Amazon Web Services ブログ

AWS CodePipelineとAmazon ECSを使って継続的デリバリパイプラインを設定する

この記事はAWS Senior Technical EvangelistのAbby Fullerの投稿です。

2017年12月12日に、AWSはAWS CodePipelineのターゲットとしてAmazon Elastic Container Service (ECS)をAWS Fargateも含めてサポートしたことをアナウンスしました。このサポートにより、コンテナベースのアプリケーションやマイクロサービス継続的デリバリするパイプラインを作成するのがより簡単になりました。

コンテナ化したサービスを手動で構築しデプロイするのは、時間がかかりますしエラーを起こしがちです。自動化されたビルドとテスト機構と組み合わせた継続的デリバリは、早期にエラーを発見し時間を短縮することを助け、失敗を減らしてくれるので、アプリケーションのデプロイモデルとして一般的なものとなってきています。以前は、ECSでコンテナワークフローを自動化するには、AWS CloudFormationを使った自前のソリューションを構築する必要がありました。これからは、わずか数ステップでCodePipelineとCodeBuildをECSと連携させてワークフローを自動かすることができます。

CodePipeline、CodeBuild、そしてECSを使った典型的な継続的デリバリのワークフローは、以下のようなものです:

  • ソースを選択する
  • プロジェクトをビルドする
  • コードをデプロイする

GitHub上にこのワークフローのための継続的デプロイのリファレンスアーキテクチャも公開しています。

はじめてみよう

最初に、CodePipelineで新規プロジェクトを作成し、例として”demo”というプロジェクト名を設定します。

次に、コードが保管されているソースの場所を選択します。ここには、AWS CodeCommit、GitHub、またはAmazon S3が選択できます。この例では、GitHubを入力し、CodePipelineにレポジトリへのアクセス権を与えます。

次に、ビルドステップを追加します。JenkinsサーバURLやCodeBuildプロジェクトの様に既存のビルドを持ってくることもできますし、CodeBuildで新しいステップを作成することもできます。もし既存のCodeBuildのプロジェクトがなければ、以下の様に選択してCodePipelineから新しいものを作成しましょう:

  • Build provider: AWS CodeBuild
  • Configure your project: Create a new build project
  • Environment image: Use an image managed by AWS CodeBuild
  • Operating system: Ubuntu
  • Runtime: Docker
  • Version: aws/codebuild/docker:1.12.1
  • Build specification: Use the buildspec.yml in the source code root directory

*訳注: ちょうどCodeBuildの対応バージョンが拡充しており、Dockerについてはaws/codebuild/docker:17.09.0も選択可能になっています。

これでCodeBuildステップを作成したので、既存のプロジェクトとしてCodePipelineから選択できます。

次に、デプロイプロバイダを追加します。ここがビルドしたコードが配置される場所になります。幾つかの異なる選択肢があり、例えばAWS CodeDeploy、AWS Elastic Beanstalk、AWS CloudFormation、またはAmazon ECSなどがあります。この例では、Amazon ECSと接続します。

CodeBuildからECSにデプロイするために、イメージ定義JSONファイルを生成する必要があります。このために、buildspec.ymlファイル内でCodeBuildのビルドプロセスのpre-build、build、post-buildフェーズに追加の手順が必要になります。イメージ定義ファイルを作成する手助けとして、Tutorial: Continuous Deployment with AWS CodePipelineのStep 1をご覧下さい。

  • Deployment provider: Amazon ECS
  • Cluster name: ビルドステップのプロジェクト名を入力
  • Service name: web
  • Image filename: イメージ定義ファイル名を入力 (“web.json”)

もうすぐ終わりです!

AWSアカウント内のリソースにCodePipelineがアクセスできるようにするために、既存のIAMサービスロールを選んだり、ここでCodePipelineに作成させることができます。この例では、ウィザードを使いそこで作成したロール(AWS-CodePipeline-Service)を使います。

最後に、全ての変更をレビューしてから、Create pipelineを選択します。

パイプラインが作成されると、パイプライン全体の図が現れ、実行の様子を見たり、別のテストや手動承認を追加したり、変更のリリースを行うことができます。

より詳しくは、AWS CodePipelineユーザーガイドで学ぶことができます。

Happy automating!

原文: Set Up a Continuous Delivery Pipeline for Containers Using AWS CodePipeline and Amazon ECS (翻訳: SA岩永)