为 Amazon S3 来源创建 EventBridge 规则 (CLI) - Amazon CodePipeline
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为 Amazon S3 来源创建 EventBridge 规则 (CLI)

创建 Amazon CloudTrail 跟踪并启用日志记录

要使用创建跟踪,请调用create-trail命令,指定: Amazon CLI

  • 跟踪名称。

  • 已将 Amazon CloudTrail的存储桶策略应用于的存储桶。

有关更多信息,请参阅使用Amazon 命令行界面创建跟踪

  1. 调用 create-trail 命令并包含 --name--s3-bucket-name 参数。

    我为何做出此更改? 这将为您的 S3 源存储桶创建所需的 CloudTrail跟踪。

    以下示例命令使用 --name--s3-bucket-name 创建一个名为 my-trail 的跟踪和一个名为 amzn-s3-demo-source-bucket 的存储桶。

    aws cloudtrail create-trail --name my-trail --s3-bucket-name amzn-s3-demo-source-bucket
  2. 调用 start-logging 命令并包含 --name 参数。

    我为何做出此更改? 此命令启动您的源存储桶的 CloudTrail 日志记录并将事件发送到 EventBridge。

    例如:

    以下命令使用 --name 启动针对名为 my-trail 的跟踪的日志记录。

    aws cloudtrail start-logging --name my-trail
  3. 调用 put-event-selectors 命令并包含 --trail-name--event-selectors 参数。使用事件选择器指定您希望您的跟踪记录源存储桶的数据事件并将事件发送到 EventBridge 规则。

    我为何做出此更改? 此命令筛选事件。

    例如:

    以下示例命令使用 --trail-name--event-selectors 指定源存储桶的数据事件以及名为 amzn-s3-demo-source-bucket/myFolder 的前缀。

    aws cloudtrail put-event-selectors --trail-name my-trail --event-selectors '[{ "ReadWriteType": "WriteOnly", "IncludeManagementEvents":false, "DataResources": [{ "Type": "AWS::S3::Object", "Values": ["arn:aws:s3:::amzn-s3-demo-source-bucket/myFolder/file.zip"] }] }]'
创建以 Amazon S3 作为事件源和 CodePipeline 目标的 EventBridge 规则并应用权限策略
  1. 授 EventBridge 予使用调 CodePipeline 用规则的权限。有关更多信息,请参阅使用适用于 Amazon EventBridge 的基于资源的政策。

    1. 使用以下示例创建允许 EventBridge 担任服务角色的信任策略。将它命名为 trustpolicyforEB.json

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 使用以下命令创建 Role-for-MyRule 角色并附加信任策略。

      我为何做出此更改? 将此信任策略添加到角色会为创建权限 EventBridge。

      aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json
    3. 为名为的管道创建权限策略JSON,如下所示MyFirstPipeline。将权限策略命名为 permissionspolicyforEB.json

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:StartPipelineExecution" ], "Resource": [ "arn:aws:codepipeline:us-west-2:80398EXAMPLE:MyFirstPipeline" ] } ] }
    4. 使用以下命令将新的 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
  2. 调用 put-rule 命令并包含 --name--event-pattern--role-arn 参数。

    以下示例命令创建名为 MyS3SourceRule 的规则。

    aws events put-rule --name "MyS3SourceRule" --event-pattern "{\"source\":[\"aws.s3\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventSource\":[\"s3.amazonaws.com\"],\"eventName\":[\"CopyObject\",\"PutObject\",\"CompleteMultipartUpload\"],\"requestParameters\":{\"bucketName\":[\"amzn-s3-demo-source-bucket\"],\"key\":[\"my-key\"]}}} --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"
  3. 要添加 CodePipeline 为目标,请调用put-targets命令并添加--rule--targets参数。

    以下示例命令为名为 MyS3SourceRule 的规则指定此内容,目标 Id 由数字 1 组成,这指示此内容位于规则的目标列表中,而这是目标 1。此命令还为管道指定一个示例 ARN。管道在存储库中发生更改时启动。

    aws events put-targets --rule MyS3SourceRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline
编辑管道的 PollForSourceChanges参数
重要

使用此方法创建管道时,如果 PollForSourceChanges 参数未明确设置为 false,则默认为 true。添加基于事件的更改检测时,必须将参数添加到输出并将其设置为 false 以禁用轮询。否则,您的管道将针对单个源更改启动两次。有关详细信息,请参阅PollForSourceChanges参数的有效设置

  1. 运行get-pipeline命令将管道结构复制到JSON文件中。例如,对于名为 MyFirstPipeline 的管道,运行以下命令:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    该命令不会返回任何结果,但您创建的文件将出现在您运行命令所在的目录中。

  2. 在任何纯文本编辑器中打开JSON文件,然后通过将名为的存储桶的PollForSourceChanges参数更改为amzn-s3-demo-source-bucket来编辑源代码阶段false,如本示例所示。

    我为何做出此更改? 将此参数设置为 false 将关闭定期检查,因此您只能使用基于事件的更改检测。

    "configuration": { "S3Bucket": "amzn-s3-demo-source-bucket", "PollForSourceChanges": "false", "S3ObjectKey": "index.zip" },
  3. 如果您正在使用get-pipeline命令检索到的管道结构,则必须从JSON文件中删除这些metadata行。否则,update-pipeline 命令无法使用它。删除 "metadata": { } 行以及 "created""pipelineARN""updated" 字段。

    例如,从结构中删除以下各行:

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" },

    保存该文件。

  4. 要应用您的更改,请运行update-pipeline命令,指定管道JSON文件:

    重要

    务必在文件名前包含 file://。此命令中需要该项。

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    该命令会返回编辑后的管道的整个结构。

    注意

    update-pipeline 命令会停止管道。如果在运行 update-pipeline 命令时正在通过管道运行修订,则该运行会被停止。您必须手动启动管道,通过升级后的管道运行此修订。使用 start-pipeline-execution 命令手动启动您的管道。