CodePipeline による Amazon ECS アプリケーションのデプロイに、GitHub Enterprise を使用する方法を教えてください。

最終更新日: 2020 年 2 月 11 日

AWS CodePipeline による Amazon Elastic Container Service (Amazon ECS) アプリケーションのデプロイのために、GitHub Enterprise を使用したいと考えています。

簡単な説明

以下のいずれかのオプションを選択してください。

  • Git と CodePipeline を統合することにより、AWS Lambda および Amazon API Gateway を使ったカスタムウェブフックを作成します。
  • 次の 解決方法 セクションの手順を完了して、GitHub Enterprise を AWS CodeBuild プロジェクトのソースに統合します。

次の解決方法では、GitHub Enterprise リポジトリをソースとして使用して CodeBuild プロジェクトを作成します。

この解決方法の仕組みは次のとおりです。

  • プロジェクトには 2 つの buildspec.yml ファイルが含まれています。最初のファイルは CodeBuild 用です。ここではアーティファクトを作成し、それを Amazon Simple Storage Service (Amazon S3) に移動しています。もう 1 つのファイルは CodePipeline 用です。このファイルでは、Docker イメージを構築した上で、それを Amazon Elastic Container Registry (Amazon ECR) にプッシュしています。
  • これらの各ビルドによって新しく作成された cb-artifact.zip ファイルが、Amazon S3 バケットにより受信されます。
  • CodePipeline には、ソース、ビルド、デプロイの各ステージがあります。ソースステージでは、Amazon S3 オブジェクト (cb-artifact.zip) を指定します。ビルドステージでは、Docker イメージを構築して、それを Amazon ECR にプッシュします。デプロイステージでは、Amazon ECS サービスのタスク定義バージョンを更新します。

解決方法

GitHub Enterprise をソースとして使用して新しい CodeBuild プロジェクトを作成する

1.    CodeBuild コンソールを開きます。

2.    [Create build project] をクリックします。

3.    [Project name] に一意のプロジェクト名を入力します。

4.    [Source] セクションの [Source provider] で、[GitHub Enterprise] を選択します。

5.    [GitHub Enterprise personal access token] に、GitHub アカウントにより生成されたトークンを入力し、[Save token] をクリックします。

注: 個人用アクセストークンの入力および保存は、1 回のみ行います。以降、作成されるすべての CodeBuild プロジェクトで、このトークンが使用されます。

6.    [Repository URL] には、リポジトリの名前を含めてリポジトリへのパスを入力します。

7.    [Additional configuration] を展開します。

8.    GitHub エンタープライズプロジェクトリポジトリへの接続時に発生する SSL 警告を無視するには、[Enable insecure SSL] を選択します。

注: ベストプラクティスとして、安全ではないSSL (insecure SSL ) はテスト時のみに有効にします。実稼働環境では有効化しないでください。

9.    [Primary source webhook events] セクションで、[Rebuild every time a code change is pushed to this repository] チェックボックスをオンにします。

10.    [Environment image] で、[Managed Image] を選択します。

11.    [Operating system] で、[Amazon Linux 2] を選択します。

12.    [Runtime(s)] で、[Standard] を選択します。

13.    [Image] で、[aws/codebuild/amazonlinux2-x86_64-standard:2.0] を選択します。

14.    [Image version] で、[Always use the latest image for this runtime version] を選択します。

15.    [Environment type] で、[Linux] を選択します。

16.    [Enable this flag if you want to build Docker images or want your builds to get elevated privileges] チェックボックスはオフのままにします。

17.    [Service role] で、[New service role] を選択します。

注: 新しいサービスロールを更新し、CodeBuild に対し Amazon S3 バケットへのアクセス許可を追加して、そこに保存された zip ファイルにアクセスできるようにします。

18.    [Buildspec] セクションの [Build specifications] では、[Use a buildspec file] または [Insert build commands] のどちらかを、必要に応じ選択します。次に [Buildspec] の例を示します。

version: 0.2
  phases:
    install:
      runtime-versions:
        docker: 18
    build:
      commands:
          - echo Uploading Artifacts to S3
  artifacts:
      files:
          - '**/*'

注: 1 つのプロジェクトに、2 つの buildspec.yml ファイルが存在します。これらのファイルは、プロジェクトの異なるフォルダに保存されています。その内、1 つめのファイルパスには codebuild/buildspec.yml が指定されます。

19.    [Artifacts] の [Type] で、[Amazon S3] を選択します。

20.    [Bucket name] では、リストからバケットを選択するか、新しいバケットを作成します。

重要: 既存の Amazon S3 バケットを使用するか、バージョニングが有効な新しい Amazon S3 バケットを作成します。Amazon S3 バケットには、各ビルドで作成された zip ファイルが保存されます。新しいビルドごとに、新しい zip ファイルが Amazon S3 バケットにプッシュされます。これらの新しい zip ファイルごとに、コードパイプラインがトリガーされます。

21.    [name] で、[cb-artifact.zip] を選択します。

22.    [Path] および [Namespace type] は、デフォルトのオプションのままにしておきます。

23.    [Artifacts packaging] で、[zip] を選択します。

24.    [Create build project] をクリックします。

注: CodeBuild コンソールで作成された新しいロールの名前は、codebuild-YourProjectName-service-role になります。

ソースとして Amazon S3 バケットを使用して新しいコードパイプラインを作成する

1.    CodePipeline コンソールを開きます。

2.    [Create pipeline] をクリックします。

3.    [Pipeline name] に、パイプラインの名前を入力します。

4.    [Service role] で、[New service role] を選択します。

5.    [Next] をクリックします。

6.    [Source] セクションの [Source provider] で、[Amazon S3] を選択します。

7.    [Bucket] では、(バケット名を使用して) ビルドにより作成された zip ファイルが保存されているバケットを選択します。

8.    [S3 object key] に cb-artifact.zipと入力します。

9.    [次へ] を選択します。

10.    [Create pipeline] をクリックします。

ビルドステージ用の新しい CodeBuild プロジェクトを作成する

1.    [Build provider] では、[AWS CodeBuild] を選択した後、[Create Project] をクリックします。

注: CodeBuild プロジェクト作成ページにリダイレクトされます。

2.    [Project name] に一意のプロジェクト名を入力します。

3.    [Environment image] で、[Managed Image] を選択します。

4.    [Operating system] で、[Amazon Linux 2] を選択します。

5.    [Runtime(s)] で、[Standard] を選択します。

6.    [Image] で、[aws/codebuild/amazonlinux2-x86_64-standard:2.0] を選択します。

7.    [Image version] で、[Always use the latest image for this runtime version] を選択します。

8.    [Environment type] で、[Linux] を選択します。

9.    [Enable this flag if you want to build Docker images or want your builds to get elevated privileges] チェックボックスをオンにします。

10.    [Service role] で、[New service role] を選択します。

11.    [Buildspec] セクションの [Build specifications] では、[Use a buildspec file] または [Insert build commands] のどちらかを、必要に応じ選択します。次の buildspec ファイルの例を参照してください。

version: 0.2
phases:
  install:
    runtime-versions:
      docker: 18
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws --version
      - YOUR_ACCOUNT_ID=$(aws sts get-caller-identity --output text --query 'Account')
      - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
      - REPOSITORY_URI=$(echo $ACCOUNT_ID).dkr.ecr.eu-central-1.amazonaws.com/ECR-REPO-NAME
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
      - echo Build started on 'date'
      - echo Building the Docker image...
      - docker build -t $REPOSITORY_URI:latest .
      - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on 'date'
      - echo Pushing the Docker images...
      - docker push $REPOSITORY_URI:latest
      - docker push $REPOSITORY_URI:$IMAGE_TAG
      - echo Writing image definitions file...
      - printf '[{"name":"YourContainerName","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
artifacts:
    files: imagedefinitions.json

注: 前述のコード例を利用する場合は、ECR-REPO-NAME および YourContainerName パラメータを修正して使用します。

重要: 1 つのプロジェクトに、2 つの buildspec.yml ファイルがあります。これらのファイルは、プロジェクトの異なるフォルダに保存されています。2 つめのファイルパスには codepipeline/buildspec.yml が指定されます。デフォルトでは、buildspec によって生成されるファイルの名前は imagedefinitions.json になります。これと異なるファイル名を使用する場合は、パイプラインのデプロイステージを作成するときにその名前を指定する必要があります。

12.    [Continue to CodePipeline] をクリックします。

13.    [Environment variables] と [Variable namespace] は空白のままにします。

14.    [Output artifacts] に一意の名前 (BuildArtifactなど) を追加します。これは後に使用します。

15.    [Done] をクリックします。

Amazon ECS でクラスターとサービスをデプロイする

ここまでのセクションで示した手順を完了すると、CodePipeline コンソールにリダイレクトされます。

1.    CodePipeline コンソールの [Deploy] セクションにある [Deploy provider] には、[Amazon ECS] を選択します。

2.    [Input artifacts] で、[BuildArtifact] を選択します。

3.    [Cluster name] で、デプロイするクラスターを選択します。

4.    [Service name] で、デプロイするサービスを選択します。

5.    [Next]、[Create pipeline] の順にクリックします。

6.    プロジェクトのビルドとパイプライン作成が完了したら、AWS Identity and Access Management (IAM) コンソールでサービスロールを更新します。

注: CodeBuild コンソールで作成された新しいロールの名前は codebuild-YourProjectName-service-roleになります。このロールには、イメージを Amazon ECR にプッシュするアクセス許可がありません。詳細については「Step 3: Add Amazon ECR Permissions to the CodeBuild Role」をご参照ください。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合