本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 AWS CloudTrail 追蹤並啟用記錄
若要使用 AWS CLI 建立線索,請呼叫 create-trail命令,指定:
-
線索名稱。
-
您已套用 AWS CloudTrail 儲存貯體政策的儲存貯體。
如需詳細資訊,請參閱使用 AWS 命令列界面建立線索。
-
呼叫 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
-
呼叫 start-logging 命令並加入
--name
參數。為什麼要進行這項變更? 此命令會啟動來源儲存貯體的 CloudTrail 記錄,並將事件傳送至 EventBridge。
範例:
以下命令範例會使用了
--name
,以在名為my-trail
的線索上啟動日誌記錄。aws cloudtrail start-logging --name my-trail
-
呼叫 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 規則,並套用許可政策
-
授予 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
參數。以下範例命令會建立名為
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" -
若要新增 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
-
(選用) 若要為特定映像 ID 設定具有來源覆寫的輸入轉換器,請在 CLI 命令中使用下列 JSON。下列範例會設定覆寫,其中:
-
在此
actionName
Source
範例中, 是在管道建立時定義的動態值,不是衍生自來源事件。 -
在此
revisionType
S3_OBJECT_VERSION_ID
範例中, 是在管道建立時定義的動態值,不是衍生自來源事件。 -
此範例中的
revisionValue
<revisionValue
> 衍生自來源事件變數。
{ "Rule": "my-rule", "Targets": [ { "Id": "MyTargetId", "Arn": "ARN", "InputTransformer": { "InputPathsMap": { "revisionValue": "$.detail.object.version-id" }, "InputTemplate": { "sourceRevisions": { "actionName": "
Source
", "revisionType": "S3_OBJECT_VERSION_ID
", "revisionValue": "<revisionValue
>" } } } } ] } -
編輯管道的 PollForSourceChanges 參數
重要
當您使用這個方法建立管道時,如果沒有明確設為 false,則 PollForSourceChanges
參數會預設為 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 命令來手動啟動您的管道。