こんにちは、技術4課の多田です。
2016年も終わりますが、皆さんにとってどんな一年だったでしょうか?
私は、サーバーワークスに入っていろいろと変化があった1年だったなぁと思います。
来年も引き続き頑張っていきたいと思います。
さて、今回は、CodePipelineが東京リージョンの他以下のリージョンに展開されたので、Code4兄弟の連携による東京リージョンのEC2へのデプロイを試したいと思います。
- オハイオ
- フランクフルト
- シンガポール
- シドニー
- サンパウロ
AWSの発表記事は、以下になります。
AWS CodePipeline Available in Asia Pacific (Tokyo) Region
今回の構成イメージ
今回は、バージニアに配置したCodeCommit/CodeBuildの連携をCodePipelineのワークフローで作り、ビルド/テストしたビルド済みのデプロイモジュールをS3に出力します。
その後、東京リージョンに配置したS3バケットへデプロイモジュールをコピーして、CodePipeline/CodeDeployを使ってEC2へデプロイします。
Code系のサービスでは利用するのが東京リージョンの場合、連携する他のサービスも東京リージョンのものでないとエラーが発生してしまうため、S3バケットも東京リージョンで別途作って、そのバケットへビルド済みのデプロイモジュールをコピーする必要があります。
Code4兄弟の連携
0. S3バケットを作成する
まずは、バージニアリージョンからビルド済みのデプロイモジュールを受け取る、東京リージョンにS3バケットを作成します。
私は、以下のものを作りました。
- 20161215-codedeploybucket
尚、バージニアリージョンのS3バケットは、CodePipelineのセットアップの過程で作成されます。
1. バージニアリージョンのCodePipelineでCodeCommit/CodeBuildを連携
次に、バージニアリージョンの CodePipelineでCodeCommit/CodeBuildを連携します。
CodeCommitとCodeBuildのセットアップについては、下記のブログを併せて確認いただけますと幸いです。
- 【Code3兄弟シリーズ】CodeCommit << サーバーワークスエンジニアブログ
- 【re:Invent 2016】Code4兄弟に!「AWS CodeBuild」が発表されました! << サーバーワークスエンジニアブログ
尚、最終的にEC2へデプロイするのは、こちらのサンプルプログラムになります(英語のドキュメントになります)。
このサンプルプログラムをCodeCommitにプッシュしたソースコード群をCodeBuildでビルド/テストしていきます。
CodePipelineのセットアップを行います。セットアップに関しては、こちらのブログを参照ください。
上記のブログのセットアップで違いがあるのは、ビルドとベータのセクションになります。
ビルドでは、CodeBuildを選択できます。セットアップしたプロジェクトを選択できるので、選択します。
バージニアリージョンでは、デプロイしませんので、[デプロイなし]で進みます。
CodePipelineで、CodeCommit/CodeBuildの連携設定が完了したら、処理を実行してみます。
以下のようにオールグリーンの状態になりましたら、S3バケットへ成果物が出力されます。
S3のバケットを確認してみると、ビルド済みのデプロイモジュールが出力されています。
2.CodeBuildの成果物を東京リージョンのバケットへコピー
次に、CodeBuildの成果物をバージニアリージョンのバケットから東京リージョンのバケットへコピーします。
今回はCLIを使って手作業でバケット間コピーを行い、東京リージョンのバケットへビルド済みのデプロイモジュールがコピーされたことを確認しました。
3. CodeDeployでEC2へデプロイ
S3のバケットへビルド済みのデプロイモジュールをコピー後、東京リージョンのCodePipelineの設定を行います。
ビルド済みのアプリパッケージの置き場所は、S3バケット、デプロイにCodeDeployを指定します。
S3をソースコードの指定場所にする場合の注意として、S3バケットのバージョニングを有効化する必要がありますので、有効化を実施します。
また、S3バケットから対象のデプロイファイルを指定する必要があります。今回は、バージニアリージョンからコピーしたファイル名を入力しましたが、何度も同じフローを回す場合、ファイル名を統一しておく必要があります。
CodePipelineの設定後、東京リージョンのCodePipelineの処理を実行してみます。
S3からCodeDeploy、EC2へのデプロイフローは実行されました。
EC2を確認すると、対象のディレクトリにJARファイルの存在を確認できましたので、サンプルプログラムのデプロイは成功です。
[ec2-user@ip-172-31-xxx-xxx ~]$ ls -l /tmp/ 合計 20 -rw-r--r-- 1 root root 8843 12月 16 12:40 codedeploy-agent.update.log drwxr-xr-x 2 root root 4096 12月 16 03:06 hsperfdata_root -rw-r--r-- 1 root root 2287 12月 16 03:42 my-app-1.0-SNAPSHOT.jar
まとめ
ビルド/テストしたデプロイモジュールをバージニアから東京リージョンへ展開できたので、東京リージョンへのCode系サービスを使ったデプロイフロー作成やマルチリージョンのデプロイも視野に入ってくるのではないかと思います。
ただ、まだまだ自動化でききれていないところがありますので、この点は改良してまたブログに記事を投稿したいと思います。
この記事が少しでもお役に立てば幸いです。それでは!