CodePipelineのポーリングパイプラインが非推奨になって以下のような警告が出るようになりました。
弊社のプロジェクトではGithubやCodeCommitではない外部のGitリポジトリからWebhookでS3にソースを上げていたたのですが、ポーリングは非推奨になったのでEventBridgeを経由してパイプラインを起動するように変更しました。
(ググってもCloudTrail等の事例ばかりだったので)手順を載せておきます。
1. S3バケットのEventBridge通知を有効にする
S3の管理コンソールに入り、該当バケットのプロパティタグを開きます。
画面真ん中の方にスクロールするとイベント通知の欄がありますので、「Amazon EventBridge」を”オン”にします。
これにより、S3のイベントがEventBridgeに飛びます。
cdkの場合は
new s3.Bucket(scope, 'SourceBucket', {
...省略...
eventBridgeEnabled: true // ← Trueにする
});
でOKです。
2. EventBridgeのルールを定義する
以下のようにルールを定義します。eventPatternのdetailTypeは定義しないでOKです。
ポーリングではなくイベント通知とするため、S3SourceActionのtriggerプロパティはS3Trigger.EVENTSに変更します。
// S3ソースコード配置バケット
const s3SourceBucket = Bucket.fromBucketName(this,'SourceBucket','source.bucket.name.here');
// EventBridgeのルールを定義。
new Rule(this, 'EventBridgeRuleFromPutS3', {
description: 'Start Pipeline By S3 Put Event',
ruleName: 'start-pipeline-execution-by-put-s3-event',
eventPattern: {
source: [`aws.s3`],
resources: [s3SourceBucket.bucketArn],
detail: {
bucket: {
name: [s3SourceBucket.bucketName],
},
object: {
key: [
{
prefix: 'zipファイルのprefix' // ← zipファイルのプレフィックスまたはzipファイル名
}
]
}
}
},
targets: [
new CodePipeline(pipeline, {
retryAttempts: 1
})
]
});
const artifact = new Artifact('CodePipelineArtifact');
const action = new S3SourceAction({
actionName: 'TakeTheSourceZip',
bucket: s3SourceBucket,
bucketKey: 'zipファイル名', // ←zipファイル名
output: outputArtifact,
trigger: S3Trigger.EVENTS, // ←トリガーはS3Trigger.EVENTS
runOrder: 1,
});
これでOKです。
誰かのお役に立てれば。