CodeBuild の AWS Elastic Beanstalk サンプル - AWS CodeBuild

CodeBuild の AWS Elastic Beanstalk サンプル

このサンプルでは、AWS CodeBuild と Maven を使用して、ROOT.war という名前の単一の WAR ファイルを生成するビルド出力として指定します。次に、このサンプルにより、WAR ファイルを AWS Elastic Beanstalk 環境のインスタンスにデプロイします。

重要

このサンプルを実行すると、AWS アカウントに課金される場合があります。これには、CodeBuild と、Amazon S3、AWS、CloudWatch Logs、Amazon EC2 に関連する AWS KMS リソースおよびアクションの料金が含まれます。詳細については、「CodeBuild 料金表、「Amazon S3 料金表、「AWS Key Management Service 料金表、「Amazon CloudWatch 料金表」および「Amazon EC2 料金表」を参照してください。

ソースコードの作成

このセクションでは、Maven を使用して、ソースコードを生成します。次に、CodeBuild を使用して、このソースコードに基づく WAR ファイルを構築します。

  1. Maven をダウンロードし、インストールします。詳細については、Apache Maven ウェブサイトの「Apache Maven のダウンロード」および「Apache Maven のインストール」を参照してください。

  2. ローカルコンピュータまたはインスタンスの空のディレクトリに切り替えて、この Maven コマンドを実行します。

    mvn archetype:generate "-DgroupId=com.mycompany.app" "-DartifactId=ROOT" "-DarchetypeArtifactId=maven-archetype-webapp" "-DinteractiveMode=false"

    成功すると、このディレクトリ構造とファイルが作成されます。

    . └── ROOT ├── pom.xml └── src └── main ├── resources └── webapp ├── WEB-INF │ └── web.xml └── index.jsp
  3. .ebextensions という名前のサブディレクトリを ROOT ディレクトリに作成します。.ebextensions サブディレクトリに、fix-path.config という名前のファイルをこのコンテンツで作成します。

    container_commands: fix_path: command: "unzip ROOT.war 2>&1 > /var/log/my_last_deploy.log"

Maven を実行したら、以下のいずれかのシナリオに進みます。

シナリオ A: CodeBuild を手動で実行し、Elastic Beanstalk に手動でデプロイする

このシナリオでは、ソースコードを作成してアップロードします。次に、AWS CodeBuild コンソールと AWS Elastic Beanstalk コンソールを使用してソースコードを構築し、Elastic Beanstalk アプリケーションと環境を作成して、ビルド出力を環境にデプロイします。

ステップ a1: ソースコードにファイルを追加する

このステップでは、Elastic Beanstalk 設定ファイルと buildspec ファイルを「ソースコードの作成」のコードに追加します。次に、ソースコードを S3 入力バケットにアップロードするか、CodeCommit、GitHub、または Bitbucket リポジトリにアップロードします。

  1. 次の内容で、buildspec.yml というファイルを作成します。ファイルを ROOT ディレクトリ内に保存します。

    version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/ROOT.war ROOT.war artifacts: files: - ROOT.war - .ebextensions/**/*
  2. ファイル構造は次のようになります。

    . └── ROOT ├── .ebextensions │ └── fix-path.config ├── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── buildpsec.yml └── pom.xml
  3. ROOT」ディレクトリの内容を、S3 入力バケットにアップロードするか、CodeCommit、GitHub、または Bitbucket リポジトリにアップロードします。

    重要

    ROOT をアップロードしないでください。アップロードするのは、ROOT のディレクトリとファイルだけです。

    S3 入力バケットを使用している場合、その入力バケットはバージョニングされている必要があります。ディレクトリ構造とファイルを含む ZIP ファイルを作成してから、入力バケットにアップロードしてください。ROOT を ZIP ファイルに追加しないでください。追加するのは、ROOT のディレクトリとファイルのみです。詳細については、Amazon S3 デベロッパーガイドの「バケットでバージョニングを設定する方法」を参照してください。

ステップ a2: ビルドプロジェクトを作成し、ビルドを実行する

このステップでは、AWS CodeBuild コンソールを使用してプロジェクトを作成し、ビルドを実行します。

  1. ビルド出力の保存先の S3 出力バケットを作成または選択します。S3 入力バケットにソースコードを保存する場合は、出力バケットを入力バケットと同じ AWS リージョンに配置する必要があります。

  2. AWS CodeBuild コンソール (https://console.aws.amazon.com/codesuite/codebuild/home) を開きます。

    AWS リージョンセレクタを使用して、CodeBuild がサポートされている AWS リージョンを選択します。これは、S3 出力バケットの保存先と同じリージョンにする必要があります。

  3. ビルドプロジェクトを作成し、ビルドを実行します。詳細については、「ビルドプロジェクトの作成 (コンソール)」および「ビルドの実行 (コンソール)」を参照してください。これらの設定を除いて、すべての設定をデフォルト値のままにします。

    • [環境] の場合:

      • [環境イメージ] で、[Managed image (マネージド型イメージ)] を選択します。

      • [オペレーティングシステム] で、[Amazon Linux 2] を選択します。

      • [ランタイム] で、[Standard (標準)] を選択します。

      • [イメージ] で、[aws/codebuild/amazonlinux2-x86_64-standard:3.0] を選択します。

    • [アーティファクト] の場合:

      • [タイプ] で、[Amazon S3] を選択します。

      • [バケット名] に、S3 バケットの名前を入力します。

      • [名前] に、覚えやすいビルド出力ファイル名を入力します。.zip 拡張子を含めます。

      • [アーティファクトのパッケージ化] では、[Zip] を選択します。

ステップ a3: アプリケーションと環境を作成してデプロイする

このステップでは、AWS Elastic Beanstalk コンソールを使用してアプリケーションと環境を作成します。環境の作成の一環として、前の手順のビルド出力を環境にデプロイします。

  1. AWS Elastic Beanstalk コンソール (https://console.aws.amazon.com/elasticbeanstalk) を開きます。

    AWS リージョンセレクタを使用して、S3 出力バケットが保存されている AWS リージョンを選択します。

  2. Elastic Beanstalk アプリケーションを作成します。詳細については、『AWS Elastic Beanstalk デベロッパーガイド』の「AWS Elastic Beanstalk アプリケーションの管理と設定」を参照してください。

  3. Elastic Beanstalk 環境を作成してアプリケーションをデプロイする。詳細については、『AWS Elastic Beanstalk デベロッパーガイド』の「新しい環境の作成ウィザード」を参照してください。これらの設定を除いて、すべての設定をデフォルト値のままにします。

    • [プラットフォーム] では、[Tomcat] を選択します。

    • [Application code] では、[Upload your code] を選択して、[Upload] を選択します。[ソースコード元] で、[Public S3 URL] を選択し、出力バケットのビルド出力 ZIP ファイルの完全な URL を入力します。[Upload (アップロード)] を選択します。

  4. Elastic Beanstalk がビルド出力を環境にデプロイすると、ウェブブラウザに結果が表示されます。インスタンスの環境 URL (例:http://my-environment-name.random-string.region-ID.elasticbeanstalk.com) へ移動します。ウェブブラウザにテキスト Hello World! が表示されます。

シナリオ B: CodePipeline を使用した CodeBuild および Elastic Beanstalk へのデプロイ

このシナリオでは、ソースコードを準備し、アップロードするステップを完了します。CodeBuild を使用してビルドプロジェクトを作成し、AWS Elastic Beanstalk コンソールを使用して Elastic Beanstalk アプリケーションと環境を作成します。その後、AWS CodePipeline コンソールを使用してパイプラインを作成します。パイプラインを作成したら、CodePipeline によってソースコードが構築され、環境にビルド出力がデプロイされます。

ステップ b1: buildspec (ビルド仕様) ファイルをソースコードに追加する

このステップでは、buildspec ファイルを作成し、「ソースコードの作成」で作成したコードに追加します。次に、ソースコードを S3 入力バケットにアップロードするか、CodeCommit、GitHub、または Bitbucket リポジトリにアップロードします。

  1. 次の内容で、buildspec.yml というファイルを作成します。ファイルを ROOT ディレクトリ内に保存します。

    version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/ROOT.war ROOT.war artifacts: files: - ROOT.war - .ebextensions/**/*
  2. ファイル構造は次のようになります。

    . └── ROOT ├── .ebextensions │ └── fix-path.config ├── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── buildpsec.yml └── pom.xml
  3. ROOT」ディレクトリの内容を、S3 入力バケットにアップロードするか、CodeCommit、GitHub、または Bitbucket リポジトリにアップロードします。

    重要

    ROOT をアップロードしないでください。アップロードするのは、ROOT のディレクトリとファイルだけです。

    S3 入力バケットを使用している場合、その入力バケットはバージョニングされている必要があります。ディレクトリ構造とファイルを含む ZIP ファイルを作成してから、入力バケットにアップロードしてください。ROOT を ZIP ファイルに追加しないでください。追加するのは、ROOT のディレクトリとファイルのみです。詳細については、Amazon S3 デベロッパーガイドの「バケットでバージョニングを設定する方法」を参照してください。

ステップ b2: ビルドプロジェクトを作成する

このステップでは、パイプラインで使用する AWS CodeBuild ビルドプロジェクトを作成します。

  1. AWS CodeBuild コンソール (https://console.aws.amazon.com/codesuite/codebuild/home) を開きます。

  2. ビルドプロジェクトを作成します。詳細については、「ビルドプロジェクトの作成 (コンソール)」および「ビルドの実行 (コンソール)」を参照してください。これらの設定を除いて、すべての設定をデフォルト値のままにします。

    • [環境] の場合:

      • [環境イメージ] で、[Managed image (マネージド型イメージ)] を選択します。

      • [オペレーティングシステム] で、[Amazon Linux 2] を選択します。

      • [ランタイム] で、[Standard (標準)] を選択します。

      • [イメージ] で、[aws/codebuild/amazonlinux2-x86_64-standard:3.0] を選択します。

    • [アーティファクト] の場合:

      • [タイプ] で、[Amazon S3] を選択します。

      • [バケット名] に、S3 バケットの名前を入力します。

      • [名前] に、覚えやすいビルド出力ファイル名を入力します。.zip 拡張子を含めます。

      • [アーティファクトのパッケージ化] では、[Zip] を選択します。

ステップ b3: Elastic Beanstalk アプリケーションおよび環境を作成してをデプロイする

このステップでは、CodePipeline で使用する Elastic Beanstalk アプリケーションと環境を作成します。

  1. Elastic Beanstalk コンソールを開きます。https://console.aws.amazon.com/elasticbeanstalk/

  2. AWS Elastic Beanstalk コンソールを使用して、アプリケーションを作成します。詳細については、『AWS Elastic Beanstalk デベロッパーガイド』の「AWS Elastic Beanstalk アプリケーションの管理と設定」を参照してください。

  3. AWS Elastic Beanstalk コンソールを使用して環境を作成します。詳細については、『AWS Elastic Beanstalk デベロッパーガイド』の「新しい環境の作成ウィザード」を参照してください。[プラットフォーム] を除き、すべての設定をデフォルト値のままにします。[プラットフォーム] では、[Tomcat] を選択します。

ステップ b4: パイプラインを作成してデプロイする

このステップでは、AWS CodePipeline コンソールを使用してパイプラインを作成します。パイプラインを作成して実行すると、CodePipeline は、CodeBuild を使用してソースコードを構築します。CodePipeline は、Elastic Beanstalk を使用して、環境にビルド出力をデプロイします。

  1. CodePipeline、CodeBuild、および Elastic Beanstalk がユーザーに代わってリソースにアクセスするために使用できるサービスロールを作成または指定します。詳細については、「Prerequisites」を参照してください。

  2. CodePipeline コンソール (http://console.aws.amazon.com/codesuite/codepipeline/home) を開きます。

    AWS リージョンセレクタを使用して、CodeBuild がサポートされている AWS リージョンを選択します。S3 入力バケットにソースコードを保存する場合は、出力バケットを入力バケットと同じ AWS リージョンに配置する必要があります。

  3. パイプラインを作成します。詳細については、CodeBuild を使用するパイプラインを作成する (CodePipeline コンソール) を参照してください。これらの設定を除いて、すべての設定をデフォルト値のままにします。

    • [Add build stage (ビルドステージの追加)] の [ビルドプロバイダ] で、[AWS CodeBuild] を選択します。[Project name (プロジェクト名)] で、先ほど作成したビルドプロジェクトを選択します。

    • [Add deploy stage (デプロイステージの追加)] の [デプロイプロバイダ] で、[AWS Elastic Beanstalk] を選択します。

      • [Application name (アプリケーション名)] で、先ほど作成した Elastic Beanstalk アプリケーションを選択します。

      • [Environment name (環境名)] で、先ほど作成した環境を選択します。

  4. パイプラインが正常に実行されたら、ウェブブラウザで結果を表示できます。インスタンスの環境 URL (例:http://my-environment-name.random-string.region-ID.elasticbeanstalk.com) へ移動します。ウェブブラウザにテキスト Hello World! が表示されます。

これで、ソースコードを変更して、その変更を元の S3 入力バケットにアップロードするか、CodeCommit、GitHub、または Bitbucket リポジトリにアップロードするたびに、CodePipeline がその変更を検出してパイプラインを再実行します。これにより、CodeBuild によってコードが再構築され、Elastic Beanstalk は、再構築された出力を環境にデプロイします。

シナリオ C: Elastic Beanstalk CLI を使用して AWS CodeBuild を実行し、Elastic Beanstalk 環境にデプロイする

このシナリオでは、ソースコードを準備し、アップロードするステップを完了します。次に、Elastic Beanstalk CLI を実行して Elastic Beanstalk アプリケーションと環境を作成し、CodeBuild を使用してソースコードを作成した後、ビルド出力を環境にデプロイします。詳細については、『AWS Elastic Beanstalk デベロッパーガイド』の「CodeBuild での EB CLI の使用」を参照してください。

ステップ c1: ソースコードにファイルを追加する

このステップでは、Elastic Beanstalk 設定ファイルと buildspec ファイルを「ソースコードの作成」のコードに追加します。また、buildspec ファイルのサービスロールを作成または識別します。

  1. Elastic Beanstalk や CLI がユーザーのために使用できるサービスロールを作成または指定します。詳細については、CodeBuild サービスロールの作成 を参照してください。

  2. 次の内容で、buildspec.yml というファイルを作成します。ファイルを ROOT ディレクトリ内に保存します。

    version: 0.2 phases: install: runtime-versions: java: corretto11 post_build: commands: - mvn package - mv target/ROOT.war ROOT.war artifacts: files: - ROOT.war - .ebextensions/**/* eb_codebuild_settings: CodeBuildServiceRole: my-service-role-name ComputeType: BUILD_GENERAL1_SMALL Image: aws/codebuild/standard:4.0 Timeout: 60

    前のコードでは、my-service-role-name を、以前に作成または識別したサービスロールの名前で置き換えます。

  3. ファイル構造は次のようになります。

    . └── ROOT ├── .ebextensions │ └── fix-path.config ├── src │ └── main │ ├── resources │ └── webapp │ ├── WEB-INF │ │ └── web.xml │ └── index.jsp ├── buildpsec.yml └── pom.xml

ステップ c2: EB CLI をインストールして実行する

  1. EB CLI をまだインストールしていない場合は、ソースコードを作成した同じコンピュータまたはインスタンスにインストールして設定します。詳細については、『AWS Elastic Beanstalk デベロッパーガイド』の「Elastic Beanstalk コマンドラインインターフェイス (EB CLI)のインストール」および「EB CLI の設定」を参照してください。

  2. コマンドラインまたはターミナルから、cd コマンドなどを実行して、(root directory name)/ROOT ディレクトリに切り替えます。eb init コマンドを実行して、EB CLI を設定します。

    eb init

    プロンプトが表示されたら:

    • AWS CodeBuild がサポートされており、Elastic Beanstalk アプリケーションおよび環境を作成する AWS リージョンを選択します。

    • Elastic Beanstalk アプリケーションを作成し、アプリケーションの名前を入力します。

    • Tomcat プラットフォームを選択します。

    • Tomcat 8 Java 8 バージョンを選択します。

    • SSH を使用して環境のインスタンスへのアクセスを設定するかどうかを選択します。

  3. 同じディレクトリから eb create コマンドを実行して、 Elastic Beanstalk 環境を作成します。

    eb create

    プロンプトが表示されたら:

    • 新しい環境の名前を入力するか、提案された名前をそのまま使用します。

    • 環境の DNS CNAME プレフィックスを入力するか、推奨値をそのまま使用します。

    • このサンプルでは、Classic Load Balancer タイプを受け入れます。

  4. eb create コマンドを実行すると、EB CLI は次のことを行います。

    1. ソースコードから ZIP ファイルを作成し、この ZIP ファイルをアカウントの S3 バケットにアップロードします。

    2. Elastic Beanstalk アプリケーションとアプリケーションバージョンを作成します。

    3. CodeBuild プロジェクトを作成します。

    4. 新しいプロジェクトに基づいてビルドを実行します。

    5. ビルドが完了した後にプロジェクトを削除します。

    6. Elastic Beanstalk 環境が作成されます。

    7. ビルドの出力を環境にデプロイします。

  5. EB CLI がビルド出力を環境にデプロイすると、ウェブブラウザに結果が表示されます。インスタンスの環境 URL (例:http://my-environment-name.random-string.region-ID.elasticbeanstalk.com) へ移動します。ウェブブラウザにテキスト Hello World! が表示されます。

必要に応じて、ソースコードを変更して、同じディレクトリから eb deploy コマンドを実行できます。EB CLI は eb create コマンドと同じ手順を実行しますが、新しい環境を作成する代わりに既存の環境にビルド出力をデプロイします。

関連リソース