为 Amazon ECR 源创建 EventBridge 规则 (CLI)
调用 put-rule 命令,在命令中指定:
-
唯一地标识创建的规则的名称。在使用 CodePipeline 创建的与您的 AWS 账户关联的所有管道中,该名称必须是唯一的。
-
规则使用的源事件模式和详细信息字段。有关更多信息,请参阅 Amazon EventBridge 和事件模式。
创建以 Amazon ECR 作为事件源并以 CodePipeline 作为目标的 EventBridge 规则
-
为 EventBridge 添加权限以使用 CodePipeline 调用规则。有关更多信息,请参阅针对 Amazon EventBridge 使用基于资源的策略。
-
使用以下示例创建信任策略以允许 EventBridge 代入服务角色。将信任策略命名为
trustpolicyforEB.json。 -
使用以下命令创建
Role-for-MyRule角色并附加信任策略。aws iam create-role --role-name Role-for-MyRule --assume-role-policy-document file://trustpolicyforEB.json -
为名为
MyFirstPipeline的管道创建权限策略 JSON,如此示例中所示。将权限策略命名为permissionspolicyforEB.json。 -
使用以下命令将
CodePipeline-Permissions-Policy-for-EB权限策略附加到Role-for-MyRule角色。我为何做出此更改? 向角色添加此策略将为 EventBridge 创建权限。
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参数。我为何做出此更改? 您必须创建具有相应规则(指定必须如何进行映像推送)和目标(指定由事件启动的管道)的事件。
以下示例命令创建一个名为
MyECRRepoRule的规则。aws events put-rule --name "MyECRRepoRule" --event-pattern "{\"detail-type\":[\"ECR Image Action\"],\"source\":[\"aws.ecr\"],\"detail\":{\"action-type\":[\"PUSH\"],\"image-tag\":[\"latest\"],\"repository-name\":[\"eb-test\"],\"result\":[\"SUCCESS\"]}}}" --role-arn "arn:aws:iam::ACCOUNT_ID:role/Role-for-MyRule"注意
要查看支持的 Amazon ECR 事件的完整事件模式,请参阅 Amazon ECR 事件和 EventBridge 或 Amazon Elastic Container Registry 事件。
-
要将 CodePipeline 添加为目标,请调用 put-targets 命令并包含以下参数:
-
--rule参数与您使用rule_name创建的 put-rule 结合使用。 -
--targets参数与目标列表中该目标的列表Id以及目标管道的ARN结合使用。
以下示例命令为名为
MyECRRepoRule的规则指定此内容,目标Id由数字 1 组成,这指示此内容位于规则的目标列表中,而这是目标 1。示例命令还指定管道示例Arn和规则示例RoleArn。管道在存储库中发生更改时启动。aws events put-targets --rule MyECRRepoRule --targets Id=1,Arn=arn:aws:codepipeline:us-west-2:80398EXAMPLE:TestPipeline,RoleArn=arn:aws:iam::80398EXAMPLE:role/Role-for-MyRule -
-
(可选)要为特定映像 ID 配置具有源覆盖的输入转换器,请在 CLI 命令中使用以下 JSON:以下示例配置了覆盖,其中:
-
actionName,本示例中的Source,是在创建管道时定义的动态值,不是从源事件派生的。 -
revisionType,本示例中的IMAGE_DIGEST,是在创建管道时定义的动态值,不是从源事件派生的。 -
revisionValue,本示例中的 <revisionValue>,是从源事件变量派生的。
{ "Rule": "my-rule", "Targets": [ { "Id": "MyTargetId", "Arn": "ARN", "InputTransformer": { "InputPathsMap": { "revisionValue": "$.detail.image-digest" }, "InputTemplate": { "sourceRevisions": [ { "actionName": "Source", "revisionType": "IMAGE_DIGEST", "revisionValue": "<revisionValue>" } ] } } } ] } -