为 Amazon S3 源创建 EventBridge 规则(CloudFormation 模板)
要使用 CloudFormation 创建规则,请按此处所示更新您的模板。
创建 EventBridge 规则,并将 Amazon S3 和 CodePipeline 分别用作事件源和目标,同时应用权限策略
-
在模板中,在
Resources下,使用AWS::IAM::RoleCloudFormation 资源配置将允许您的事件启动管道的 IAM 角色。此条目将创建一个使用两个策略的角色:-
第一个策略允许代入角色。
-
第二个策略提供启动管道所需的权限。
我为何做出此更改? 添加
AWS::IAM::Role资源将使 CloudFormation 能够为 EventBridge 创建权限。此资源将添加到您的 CloudFormation 堆栈。 -
-
使用
AWS::Events::RuleCloudFormation 资源添加 EventBridge 规则。此事件模式会创建一个事件,以监控 Amazon S3 源桶上的CopyObject、PutObject和CompleteMultipartUpload。此外,还包括您管道的目标。当发生CopyObject、PutObject或CompleteMultipartUpload时,此规则将对目标管道调用StartPipelineExecution。我为何做出此更改? 添加
AWS::Events::Rule资源将使 CloudFormation 能够创建事件。此资源将添加到您的 CloudFormation 堆栈。 -
将此代码段添加到第一个模板,以允许跨堆栈功能:
-
(可选)要为特定映像 ID 配置具有源覆盖的输入转换器,请使用以下 YAML 片段:以下示例配置了覆盖,其中:
-
actionName,本示例中的Source,是在创建管道时定义的动态值,不是从源事件派生的。 -
revisionType,本示例中的S3_OBJECT_VERSION_ID,是在创建管道时定义的动态值,不是从源事件派生的。 -
revisionValue,本示例中的 <revisionValue>,是从源事件变量派生的。
--- Rule: my-rule Targets: - Id: MyTargetId Arn:pipeline-ARNInputTransformer: InputPathsMap: revisionValue: "$.detail.object.version-id" InputTemplate: sourceRevisions: actionName:SourcerevisionType:S3_OBJECT_VERSION_IDrevisionValue: '<revisionValue>' -
-
将更新的模板保存到本地计算机,并打开 CloudFormation 控制台。
-
选择堆栈,然后选择为当前堆栈创建更改集。
-
上传更新的模板,然后查看 CloudFormation 中所列的更改。以下是将对堆栈进行的更改。您应在列表中看到新资源。
-
选择执行。
编辑您的管道的 PollForSourceChanges 参数
重要
使用此方法创建管道时,如果 PollForSourceChanges 参数未明确设置为 false,则默认为 true。添加基于事件的更改检测时,必须将参数添加到输出并将其设置为 false 以禁用轮询。否则,您的管道将针对单个源更改启动两次。有关更多信息,请参阅 PollForSourceChanges 参数的有效设置。
-
在模板中,将
PollForSourceChanges更改为false。如果您未在管道定义中包含PollForSourceChanges,请添加它并将它设置为false。我为何做出此更改? 将
PollForSourceChanges更改为false将关闭定期检查,因此您只能使用基于事件的更改检测。
为 Amazon S3 管道的 CloudTrail 资源创建另一个模板
-
在单独的模板中,在
Resources下,使用AWS::S3::Bucket、AWS::S3::BucketPolicy和AWS::CloudTrail::TrailCloudFormation 资源为 CloudTrail 提供一个简单的存储桶定义和跟踪。我为何做出此更改? 鉴于当前每个账户存在 5 个跟踪的限制,必须单独创建和管理 CloudTrail 跟踪。(请参阅 AWS CloudTrail 中的限制。) 但是,您可以在单个跟踪上包括许多 Amazon S3 桶,因此您可以创建跟踪一次,然后根据需要为其他管道添加 Amazon S3 桶。将以下内容粘贴到第二个示例模板文件中。