如何在AWS SAM中使用现有S3及EventBridge规则触发Lambda
关于AWS SAM与现有S3桶、EventBridge规则集成的解决方案
问题1:在SAM中使用现有Amplify S3桶创建EventBridge规则触发Lambda
可以在SAM中使用现有S3桶,但需要先完成前置配置并修正代码:
开启S3桶的EventBridge事件通知
登录AWS控制台,找到Amplify创建的S3桶 → 进入「属性」标签 → 找到「事件通知」模块 → 开启「发送到EventBridge」开关。修正SAM代码
需明确指定文件上传的事件类型,同时补充Lambda访问S3对象的权限(如果业务需要),示例代码如下:
MyLambda: Type: AWS::Serverless::Function Properties: FunctionName: 'MyLambda123' CodeUri: code/ Handler: lambda_function.lambda_handler Runtime: python3.7 Policies: - Statement: - Sid: SSMDescribeParametersPolicy Effect: Allow Action: - ssm:DescribeParameters Resource: '*' - Sid: S3ObjectAccessPolicy Effect: Allow Action: - s3:GetObject Resource: 'arn:aws:s3:::someexistingbucket/*' # 替换为你的桶ARN Events: S3UploadTrigger: Type: EventBridgeRule Properties: EventBusName: default Pattern: source: - "aws.s3" detail-type: - "Object Created" # 指定文件上传事件类型 detail: bucket: name: - "someexistingbucket" # 替换为你的Amplify S3桶名
问题2:在SAM中关联手动创建的现有EventBridge规则触发Lambda
不能直接通过Events字段的EventBridgeRule类型关联现有规则,需单独创建目标关联资源并配置Lambda调用权限:
MyLambda: Type: AWS::Serverless::Function Properties: FunctionName: 'MyLambda123' CodeUri: code/ Handler: lambda_function.lambda_handler Runtime: python3.7 Policies: - Statement: - Sid: SSMDescribeParametersPolicy Effect: Allow Action: - ssm:DescribeParameters Resource: '*' # 将现有EventBridge规则与Lambda绑定为目标 ExistingRuleLambdaTarget: Type: AWS::Events::Target Properties: Rule: '你的手动规则名称' # 替换为已创建的EventBridge规则名 Arn: !GetAtt MyLambda.Arn Id: 'LambdaTarget' # 授予EventBridge调用Lambda的权限 LambdaInvokePermission: Type: AWS::Lambda::Permission Properties: FunctionName: !Ref MyLambda Action: lambda:InvokeFunction Principal: events.amazonaws.com SourceArn: !Sub 'arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/你的手动规则名称' # 替换为规则名称
内容的提问来源于stack exchange,提问作者Pavan Kumar
相关产品推荐
相关产品推荐

