本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為 Amazon ECR 源(AWS CloudFormation 模板)創建 EventBridge 規則
若要用 AWS CloudFormation 來建立規則,請使用範本程式碼片段,如下所示。
更新管線 AWS CloudFormation 範本並建立 EventBridge 規則
-
在範本中的下Resources
,使用AWS::IAM::Role
AWS CloudFormation 資源來配置允許事件啟動管道的IAM角色。此項目會建立一個使用兩個政策的角色:
-
第一個政策允許要承擔的角色。
-
第二個政策提供啟動管道的許可。
為什麼我會做出此變更? 您必須創建一個可以假定的角色 EventBridge 才能在我們的管道中開始執行。
- YAML
-
EventRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Principal:
Service:
- events.amazonaws.com
Action: sts:AssumeRole
Path: /
Policies:
-
PolicyName: eb-pipeline-execution
PolicyDocument:
Version: 2012-10-17
Statement:
-
Effect: Allow
Action: codepipeline:StartPipelineExecution
Resource: !Sub arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${AppPipeline}
- JSON
-
{
"EventRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"events.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
},
"Path": "/",
"Policies": [
{
"PolicyName": "eb-pipeline-execution",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "codepipeline:StartPipelineExecution",
"Resource": {
"Fn::Sub": "arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${AppPipeline}"
}
}
]
}
}
]
}
}
}
...
-
在範本的下Resources
,使用AWS::Events::Rule
AWS CloudFormation 資源為 Amazon ECR 來源新增 EventBridge 規則。此事件模式會建立一個事件,用於監視對儲存庫的提交。 EventBridge 偵測到存放庫狀態變更時,規則會StartPipelineExecution
在您的目標管線上叫用。
我為什麼要進行這項變更? 您必須使用規則來建立事件,該規則指定必須如何進行映像推送,以及命名要由事件啟動的管道的目標。
此程式碼片段使用名為 eb-test
的映像,並具有 latest
標籤。
- YAML
-
EventRule:
Type: 'AWS::Events::Rule'
Properties:
EventPattern:
detail:
action-type: [PUSH]
image-tag: [latest]
repository-name: [eb-test]
result: [SUCCESS]
detail-type: [ECR Image Action]
source: [aws.ecr]
Targets:
- Arn: !Sub arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${AppPipeline}
RoleArn: !GetAtt
- EventRole
- Arn
Id: codepipeline-AppPipeline
- JSON
-
{
"EventRule": {
"Type": "AWS::Events::Rule",
"Properties": {
"EventPattern": {
"detail": {
"action-type": [
"PUSH"
],
"image-tag": [
"latest"
],
"repository-name": [
"eb-test"
],
"result": [
"SUCCESS"
]
},
"detail-type": [
"ECR Image Action"
],
"source": [
"aws.ecr"
]
},
"Targets": [
{
"Arn": {
"Fn::Sub": "arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:${AppPipeline}"
},
"RoleArn": {
"Fn::GetAtt": [
"EventRole",
"Arn"
]
},
"Id": "codepipeline-AppPipeline"
}
]
}
}
},
-
將更新的範本儲存到本機電腦,然後開啟 AWS CloudFormation
主控台。
-
選擇您的堆疊,然後選擇 Create Change Set for Current Stack (建立目前堆疊的變更集)。
-
上傳範本,然後檢視 AWS CloudFormation中所列的變更。這些是會針對堆疊進行的變更。您應該會在清單中看到新資源。
-
選擇 Execute (執行)。