ECS Fargate에서 GitHub WebHook에 Blue/Green 자동 배포

AWS Fargate 에서 Blue/Green 자동 배포를 설정합니다.
소스 리포지토리에는 GitHub, 빌드에는 CodeBuild, 배포 파이프라인에는 CodePipeline를 사용합니다.
자동 빌드 설정은 CloudFormation 및 관리 콘솔을 사용합니다.

※이하의 순서를 실행하면, AWS 의 서비스 이용료가 발생합니다.
Fargate 의 Blue/Green 배포 설정이 완료된 것으로 합니다.
Fargate 의 Blue/Green 배포 설정은 아래를 참조하십시오.

ECS Fargate에서 Blue/Green 배포 설정

※이번 샘플은 이하를 이용하고 있습니다.
htps : // 기주 b. 코 m / 테 로스 에 / c 로 s - 아코 t에서 p ぉ y - mp ぇ

구성 이미지



이번 구성의 이미지는 아래 그림과 같습니다.



GitHub에서 인증 토큰 만들기



인증 토큰을 만드는 방법은 여기

인증 토큰에 ReadWebhook의 권한 부여



자동 빌드 설정(CodeBuild)



Blue/Green 배포에는 다음 세 가지 파일을 만들어야 합니다.
  • imageDetail.json(빌드 이미지 지정 파일 ※ECS 빌드로 필요)
  • appspec.yaml (CodeDeploy 설정 파일 ※ ECS의 경우 Blue/Green 배포에서만 필요)
  • taskdef.json (태스크 정의 파일 ※ ECS의 경우 Blue/Green 배포에서만 필요)
  • 
    version: 0.2
    
    phases:
      install:
        runtime-versions:
          docker: 18
      pre_build:
        commands:
          - echo Logging in to Amazon ECR...
          - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION) #ECRへログイン
          - REPOSITORY_URI=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com/${IMAGE_NAME}
          - IMAGE_TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) #リリースタグを生成
          - echo AWS Account Setiing ...
          - sed -i -e "s/__ACOUNTID__/$AWS_ACCOUNT_ID/" taskdef.json #ビルド実行AWSアカウントで置換
      build:
        commands:
          - echo Build started on `date`
          - echo Vue.js Project Building...
          - docker run --rm -v $(pwd):/work node:lts /bin/bash -c "cd /work && yarn && yarn build" #安定版(LTS)でビルド
          - cp -r dist docker/
          - echo Building the Docker image...
          - docker build -t $REPOSITORY_URI:latest docker/
          - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
      post_build:
        commands:
          - echo Pushing the Docker image...
          - docker push $REPOSITORY_URI:latest
          - docker push $REPOSITORY_URI:$IMAGE_TAG
          - echo Writing image definitions file...
          - printf '{"Version":"1.0","ImageURI":"%s"}' $REPOSITORY_URI:$IMAGE_TAG > imageDetail.json #イメージ指定ファイルを出力
          - cat imageDetail.json
    artifacts:
      files:
        - appspec.yaml
        - taskdef.json
        - imageDetail.json
    

    ※설정 파일의 전량은 아래를 참조하십시오.
    htps : // 기주 b. 이 m/테ぃろすえ/c룻 s-아코 t-에서 pぉyーさ mpぇ/bぉb/마s r/부이 ldsぺc. yml

    배포 파이프라인 설정( CodePipeline )


    CloudFormation 및 관리 콘솔에서 설정합니다.

    빌드 스테이지까지 설정
    CloudFormation 에서 Build 스테이지까지 설정합니다.
    -> GitHubOAuthToken 에 위에서 취득한 인증 토큰을 설정한다
    -> ProdAccount 는 임의의 값을 설정한다 (본 기사에서는 이용하지 않는다)


      SampleCodeBuild:
        Type: AWS::CodeBuild::Project
        Properties:
          Artifacts:
            Type: CODEPIPELINE
          Source:
            BuildSpec: buildspec.yml
            Type: CODEPIPELINE
          Environment:
            ComputeType: BUILD_GENERAL1_SMALL
            Image: aws/codebuild/standard:3.0
            Type: LINUX_CONTAINER
            PrivilegedMode: true
            EnvironmentVariables:
              - Name: AWS_ACCOUNT_ID
                Type: PLAINTEXT
                Value: !Ref AWS::AccountId
              - Name: AWS_DEFAULT_REGION
                Type: PLAINTEXT
                Value: !Ref AWS::Region
              - Name: CONTAINER_NAME
                Type: PLAINTEXT
                Value: front
              - Name: IMAGE_NAME
                Type: PLAINTEXT
                Value: !Sub ${ServiceName}
          LogsConfig:
            CloudWatchLogs:
              Status: ENABLED
          Name: !Sub ${ServiceName}-codebuild
          ServiceRole: !Ref CodeBuildServiceRole
    
      SampleCodePipeline:
        Type: AWS::CodePipeline::Pipeline
        Properties:
          Name: !Sub ${ServiceName}-codepipeline
          RoleArn: !GetAtt CodePipelineServiceRole.Arn
          ArtifactStore:
            Type: S3
            Location: !Ref ApplicationDeployArtifactBucket
          Stages:
            - Name: Source
              Actions:
                - Name: download-source
                  ActionTypeId:
                    Category: Source
                    Owner: ThirdParty
                    Version: 1
                    Provider: GitHub
                  Configuration:
                    Owner: !Ref GitHubOwner
                    Repo: !Ref GitHubRepositoryName
                    OAuthToken: !Ref GitHubOAuthToken
                    Branch: master
                  OutputArtifacts:
                    - Name: SourceOutput
            - Name: Build
              Actions:
                - Name: BuildAction
                  ActionTypeId:
                    Category: Build
                    Owner: AWS
                    Version: 1
                    Provider: CodeBuild
                  Configuration:
                    ProjectName: !Ref SampleCodeBuild
                  RunOrder: 1
                  InputArtifacts:
                    - Name: SourceOutput
                  OutputArtifacts:
                    - Name: BuildOutput
    

    CloudFormation 의 전량은 아래를 참조하십시오.
    htps : // 기주 b. 이 m/테이로스에/c로스-아코 t로 pぉyー사 mpぇ/bぉb/마s r/p로ゔぃ시오닌 g/피페네. 또는 ml

    Deploy 스테이지 설정

    위에서 만든 파이프라인에 Deploy 스테이지를 추가합니다.


    Deploy 액션을 추가한다.
    -> Amazon ECS(블루/그린)를 선택하고 빌드에서 만든 BuildOutput를 입력 아티팩트로 지정합니다.





    자동 배포 확인



    변경 사항을 GitHub로 푸시합니다.
    -> 샘플 프로젝트라면 index.html의 제목을 수정해보십시오.

    다음과 같이 성공적으로 배포되어야 합니다.

    좋은 웹페이지 즐겨찾기