本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
按照以下步骤创建带有 S3 源的管道,该源使用中的事件 EventBridge 进行更改检测。有关使用 CLI 创建管道的完整步骤,请参阅创建管道、阶段和操作。
要构建具有 Amazon S3 源的事件驱动管道,您应编辑管道的 PollForSourceChanges
参数,然后创建以下资源:
-
EventBridge 事件规则
-
允许 EventBridge 事件启动管道的 IAM 角色
创建以 Amazon S3 作为事件源和 CodePipeline 目标的 EventBridge 规则并应用权限策略
-
授 EventBridge 予使用调 CodePipeline 用规则的权限。有关更多信息,请参阅使用适用于 Amazon EventBridge 的基于资源的政策。
-
使用以下示例创建信任策略以允许 EventBridge 代入服务角色。将它命名为
trustpolicyforEB.json
。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
使用以下命令创建
Role-for-MyRule
角色并附加信任策略。我为何做出此更改? 向角色添加此信任策略将为 EventBridge 创建权限。
aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
-
为名为
MyFirstPipeline
的管道创建权限策略 JSON,如此处所示。将权限策略命名为permissionspolicyforEB.json
。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:80398EXAMPLE:MyFirstPipeline" ] } ] }
-
使用以下命令将新的
CodePipeline-Permissions-Policy-for-EB
权限策略附加到您创建的Role-for-MyRule
角色。aws iam put-role-policy --role-name Role-for-MyRule --policy-name CodePipeline-Permissions-Policy-For-EB --policy-document file://permissionspolicyforEB.json
-
-
调用 put-rule 命令并包含
--name
、--event-pattern
和--role-arn
参数。以下示例命令创建名为
EnabledS3SourceRule
的规则。aws events put-rule --name "EnabledS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"Object Created\"],\"detail\":{\"bucket\":{\"name\":[\"amzn-s3-demo-source-bucket\"]}}}" --role-arn "arn:aws:iam::
ACCOUNT_ID
:role/Role-for-MyRule" -
要添加 CodePipeline 为目标,请调用put-targets命令并添加
--rule
和--targets
参数。以下示例命令为名为
EnabledS3SourceRule
的规则指定此内容,目标Id
由数字 1 组成,这指示此内容位于规则的目标列表中,而这是目标 1。此命令还为管道指定一个示例ARN
。管道在存储库中发生更改时启动。aws events put-targets --rule EnabledS3SourceRule --targets Id=codepipeline-AppPipeline,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
编辑管道的 PollForSourceChanges参数
重要
使用此方法创建管道时,如果 PollForSourceChanges
参数未明确设置为 false,则默认为 true。添加基于事件的更改检测时,必须将参数添加到输出并将其设置为 false 以禁用轮询。否则,您的管道将针对单个源更改启动两次。有关详细信息,请参阅PollForSourceChanges 参数的有效设置。
-
运行 get-pipeline 命令以将管道结构复制到 JSON 文件中。例如,对于名为
MyFirstPipeline
的管道,运行以下命令:aws codepipeline get-pipeline --name
MyFirstPipeline
>pipeline.json
该命令不会返回任何结果,但您创建的文件将出现在您运行命令所在的目录中。
-
在任何纯文本编辑器中打开 JSON 文件并通过将名为
amzn-s3-demo-source-bucket
的存储桶的PollForSourceChanges
参数更改为false
来编辑源阶段,如此示例中所示。我为何做出此更改? 将此参数设置为
false
将关闭定期检查,因此您只能使用基于事件的更改检测。"configuration": { "S3Bucket": "amzn-s3-demo-source-bucket",
"PollForSourceChanges": "false",
"S3ObjectKey": "index.zip" }, -
如果您要使用通过 get-pipeline 命令检索到的管道结构,则必须删除 JSON 文件中的
metadata
行。否则,update-pipeline 命令无法使用它。删除"metadata": { }
行以及"created"
、"pipelineARN"
和"updated"
字段。例如,从结构中删除以下各行:
"metadata": { "pipelineArn": "arn:aws:codepipeline:
region
:account-ID
:pipeline-name
", "created": "date
", "updated": "date
" },保存该文件。
-
要应用更改,请运行 update-pipeline 命令,指定管道 JSON 文件:
重要
务必在文件名前包含
file://
。此命令中需要该项。aws codepipeline update-pipeline --cli-input-json file://
pipeline.json
该命令会返回编辑后的管道的整个结构。
注意
update-pipeline 命令会停止管道。如果在运行 update-pipeline 命令时正在通过管道运行修订,则该运行会被停止。您必须手动启动管道,通过升级后的管道运行此修订。使用 start-pipeline-execution 命令手动启动您的管道。