こんにちは、技術4課の多田です。
9月から所属部署が技術4課に変わりまして、気分新たに記事を投稿していきます!
さて、今回でCode3兄弟シリーズラストの投稿回になります。
最後は、AWS CodePipeline(以下、CodePipeline)と仲良くなりたいと思います。
尚、過去記事は以下です。
- 【Code3兄弟シリーズ】CodeCommit « サーバーワークス エンジニアブログ
- 【Code3兄弟シリーズ】CodeDeploy~SampleDeployment編~ « サーバーワークス エンジニアブログ
- 【Code3兄弟シリーズ】CodeDeploy~CustomDeployment編~ « サーバーワークス エンジニアブログ
以下が目次です。
- CodePipelineとは
- CodePiplineの実践
- まとめ
CodePipelineとは
CodePipelineとは、アプリケーションのデプロイプロセス(ビルドやテスト等)のフローを自動化するためのサービスです。
CodePipelineでは、次のような特徴があります。
- AWSマネージドのワークフローコントローラー
- CodePipelineではデプロイフローの状況をリアルタイムでUIから確認が可能
- AWSリソースやサードパーティとの連携が充実
以下の画像は、CodePipelineのサービスイメージ図になります。
料金については、1アクティブパイプライン毎に$1/月がかかります。
ここでいうアクティブパイプラインとは、1度でも実行したパイプラインを指します。
尚、CodeDeployとCodePipelineを連携したサンプルアプリのデプロイについては、次のブログでも紹介しているためご覧ください。
AWSリソースやサードパーティとの連携先については、私が発表した資料のP29,P30に載せていますので、併せてご覧ください。
CodePipelineの実践
それでは、実際にCodePipelineを使っていきましょう。
今回の構成は、以下になります。
シリーズの最終系として、Code3兄弟のみでソースコードの管理からEC2へのアプリ展開まで実施します。
ただ、全てのサービスの利用を考慮して利用するリージョンは、バージニアを選択しております。
尚、記事で紹介するのは、CodePipelineの設定に関することのみでその他のCodeCommitやCodeDeployについては、記載を割愛しております。
0.事前準備(Jenkinsの設定)
今回、ビルド処理としてJenkinsを利用しますが、実行環境をEC2上に設定します。
その際、注意点として、「AWSCodePipelineCustomActionAccess」を付与したIAMポリシーをアタッチしてEC2を起動してください。
IAMロールの定義方法については、こちらをご覧ください。
Jenkinsをセットアップ後、CodePipelineのプラグインをインストールします。
Jenkinsの管理画面から [Jenkinsの管理] > [プラグインの管理] > [利用可能タブ]より「AWS CodePipeline Plugin」を検索し、インストールします。
プラグインをインストール後、CodePipelineとの連携設定を行います。
まずは、Jenkinsのプロジェクト名を決めます。
ここで、定義したものがCodePipelineの設定でも必要となります。
次に、CodePipelineに関する設定を定義していきます。
AWS Regionには、利用するリージョンを選びます。
Access KeyとSecret Keyで利用するIAMユーザーのcredential情報を入力します。
また、ProviderもCodePipeline側でも定義を行うため、記憶できるものを定義しましょう。
次に、Jenkinsのポーリングの間隔を定義します。
「SCMをポーリング」を有効化し、cron形式でポーリング間隔を定義します。今回は、毎分ポーリングするようにしました。
そして、ビルド後の処理に「AWS CodePipeline Publisher」を指定します。
Locationには何も入力せず、保存します。これで最終的にJenkinsの処理が完了後、CodePipelineに結果を渡して後続の処理へと繋げます。
以上で事前準備が完了です。
尚、ビルドの処理の定義についてはCodePipelineとJenkinsの連携設定とは直接関係がないため、割愛させて頂きます。
1.パイプラインに任意の名前をつける
これから作成する、パイプラインに任意の名前をつけます。
2.ソースコードを格納しているサービスを選択
まず、Source providerは「AWS CodeCommit」を選択します。
次に、ソースコードを取得するリポジトリとブランチを選択します。
3.ビルドのサービスを選択
ビルドの処理を行うため、「Add Jenkins」を選択します。
加えて、Provider nameとProject nameには、事前準備で行ったJenkinsの定義を入力し、Server URLにはJenkinsの管理画面へのアクセスURLを記載します。
4.デプロイサービスの選択
インスタンスにデプロイするサービスを選択するのですが、Deploy providerでは「AWS CodeDeploy」を選択します。
Application nameとDeployment groupで使用するCodeDeployの設定を選択します。
5.IAMロールの設定
CodePiplineが使用するAWSリソースへのIAMロールを設定します。
「Create role」を選択すれば、新規のIAMロールを作成できます。
6.設定の確認
1~5までの設定を確認する画面になります。
問題なければ、「Create pipeline」を選択します。
7.パイプライン作成後の確認
CodePipeline作成後、ソースコードを取得してインスタンスへのデプロイまで処理が実行されます。
オールグリーンで、処理が完了したため、EC2のコンテンツを確認します。
意図したサーバーのコンテンツが確認できたので、デプロイ成功です。
まとめ
Code3兄弟との連携でCodePipelineを使ってみましたが、いかがでしたでしょうか?
サードパーティやAWSサービスとの連携の幅が広がっており、今後の展開が楽しみです。
また、Lambdaとの連携もできるので、今後はデプロイプロセスにサーバーが不要になったりするのかな、なんて夢想したりもできます。