【アップデート】CloudWatch EventsのターゲットにAWS CodePipelineを選択できるようになりました!【デイリービルドに最適】

2017.07.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

育休直前の森永です。

AWSのAPIイベントなどを契機にアクションを起こすことが出来るサービス「CloudWatch Events」ですが、アクションを起こすターゲットとして「AWS CodePipeline」が選択できるようになりました!

AWS CodePipelineはアプリケーションの継続的デリバリーと継続的インテグレーションを実現するためのサービスです。
詳しくはこちらが分かりやすいかと思います。

何がうれしいのか

CodePipelineには定期実行の機能がありません。
CloudWatch Eventsにはスケジュール機能があります。

組み合わせることで、デイリービルドやナイトリービルドを実現できるようになります!

試してみる

CodePipelineの準備

今回はこちらのDevOpsハンズオンの内容を元に検証してみます。
デイリービルドを作るのが目的なので、「5. パイプラインの作成」のCodeDeployの設定はしません。

AWS_CodePipeline_Management_Console

最終的にこんな感じになります。
「Staging Stage」で行うデプロイ作業はなしになっています。
デイリービルドで出来た成果物が、「Artifact location」に記載のあるS3バケットに配置されます。

AWS_CodePipeline_Management_Console 4

CodePipelineを設定すると、初回自動で動き始めます。
Buildが完了するまでしばらく待ちましょう。
Buildで失敗する場合は、ハンズオン手順の「6. buildspec.ymlの作成」以降を行って必要なファイルをGitHubにpushしておいて下さい。

AWS_CodePipeline_Management_Console 2

CloudWatch Eventsの設定

準備ができましたので、今回の主役CloudWatch Eventsの設定に行きましょう。
CloudWatch EventのRule設定画面から「Create rule」を選択し、ルールを作成します。

まずは、Event Sourceを設定します。
今回はスケジュール機能を使用しますので、「Schedule」を選択します。
スケジュールにはcron式を使用できます。
例えば、毎日午前0時(JST)に設定する場合は0 15 * * ? *のように設定します。
こちらのスケジュールのタイムゾーンはUTCですので、JSTにする際は-9してあげて下さい。

CloudWatch_Management_Console

次に、Targetを設定します。
「Add Target」を押して、「CodePipeline」を選択します。
「Pipeline ARN」にはCodePipelineのARNを指定するのですが、自動で候補が出てきてくれません。
ARNの命名規則がarn:aws:codepipeline:リージョン名:アカウントID:Pipeline名となっていますので、それに合わせて記載して下さい。
ロールは新しく作成しておきます。

CloudWatch_Management_Console 2

では、午前12時が来るのを待ちましょう。
というわけには行かないので、時間を1分後の時刻に書き換えます。
検証時間が午前11時51分だったので、午前11時52分にしておきました。
52分になると、Pipelineが自動的に動き出しました!!

AWS_CodePipeline_Management_Console 3

Buildまで無事に通りましたので、S3を確認してみると午前11時52分13秒にファイルが配置されていることが分かりますね!!

S3_Management_Console

最後に

CodePipelineでスケジュール機能を実装するためにLambdaファンクションを使っているという人ももしかしたらいるかもしれませんが、これで作り込み不要でスケジュール機能を使えるようになりました。
CloudWatch Eventsは様々なAWSサービスのスケジュール部分を担当するサービスになるのかもしれませんね…

他にもっと有用なユースケースがある!という方がいたら是非教えて下さいませ!