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에서 인증 토큰 만들기
인증 토큰을 만드는 방법은 여기
인증 토큰에
Read
및 Webhook
의 권한 부여자동 빌드 설정(CodeBuild)
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의 제목을 수정해보십시오.
다음과 같이 성공적으로 배포되어야 합니다.
Reference
이 문제에 관하여(ECS Fargate에서 GitHub WebHook에 Blue/Green 자동 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takeshi_hirosue/items/19901da776c3f301f7cf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)