需要检查以下几个方面来解决 AWS EventBridge 规则与 Redshift 程序未被调用的问题:
请确保你已经按照正确的步骤设置 AWS EventBridge 与 Redshift,例如创建 Lambda 函数并将其作为目标与 EventBridge 规则相连。
当创建 EventBridge 规则时,请确保你为规则指定了 Lambda 函数作为目标,并且该函数与 Redshift 集群位于同一个 VPC。
检查函数代码中是否正确设置了 IAM 角色,该角色必须包括 Redshift、Lambda 和 EventBridge 所需的权限。
以下是一个 Lambda 函数示例,该函数在调用 Redshift 之前使用 IAM Role 来获取临时凭证:
import boto3
from botocore.credentials import RefreshableCredentials
def get_temporary_credentials(event, context):
sts_client = boto3.client('sts')
response = sts_client.assume_role(
RoleArn='arn:aws:iam::123456789012:role/MyRole',
RoleSessionName='MySession'
)
credentials = response['Credentials']
session_token = credentials['SessionToken']
access_key = credentials['AccessKeyId']
secret_key = credentials['SecretAccessKey']
exp_time = credentials['Expiration']
aws_credentials = RefreshableCredentials.create_from_metadata(
metadata={
'access_key': access_key,
'secret_key': secret_key,
'token': session_token,
'expiry_time': exp_time.isoformat()
},
refresh_using=get_temporary_credentials,
method='sts-assume-role'
)
# 使用 AWS Credential 对象进行 Redshift 操作
client = boto3.client('redshift', aws_access_key_id=aws_credentials.access_key,
aws_secret_access_key=aws_credentials.secret_key,
aws_session_token=aws_credentials.token)
return "Success"
在此示例中,我们通过 assume_role()方法获取了 RoleArn 和 RoleSessionName 参数