Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CICDを使用したECS Blue Greenデプロイを実施する際に必要なファイルについて
Search
takashi
April 15, 2023
420
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CICDを使用したECS Blue Greenデプロイを実施する際に必要なファイルについて
takashi
April 15, 2023
More Decks by takashi
See All by takashi
lt53
98_justdoit
0
350
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
430
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
270
HDC tutorial
michielstock
2
760
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
440
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Statistics for Hackers
jakevdp
799
230k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
It's Worth the Effort
3n
188
29k
Transcript
CICDを使用したECS Blue Greenデプロイを実 施する際に必要なファイルについて 2023/04/14 LT
目次 ❏ 自己紹介 ❏ 前提 ❏ 構成図 ❏ サービスについて ❏
CICDで必要なファイルについて ❏ CodePipelineの設定値について
自己紹介 所属 : アイレット株式会社 業務内容 : AWSインフラ構築、運用 保有資格 : AWS
SAA、SOA、DVA、SAP、DOP、SCS、DBS 詳しくなりたいAWSサービス : AWS ECS
前提 ❏ 話すこと ❏ CICDを使用したECS Blue Greenデプロイを実施する際に必要なファイルについて ❏ 話さないこと ❏
CodePipelineの上記以外の設定(EventBridgeやIAMなど) ❏ ECSの設定値
構成図
サービスについて ❏ AWS CodeCommit ❏ プライベート Git リポジトリをホストする、安全で高度にスケーラブルなフルマネージド型ソース管理サービス ❏ AWS
CodeBuild ❏ ソースコードをコンパイルし、テストを実行し、すぐにデプロイできるソフトウェアパッケージを生成する、フルマネージド 型の継続的インテグレーションサービス ❏ AWS CodeDeploy ❏ Amazon Elastic Compute Cloud (EC2)、Amazon Elastic Container Service (ECS)、AWS Lambda、オンプレミスサー バーなどのさまざまなコンピューティングサービスへのソフトウェアデプロイを自動化するフルマネージド型のデプロイ サービス ❏ AWS CodePipeline ❏ フルマネージドの継続的デリバリーサービスで、迅速かつ確実性のあるアプリケーションとインフラストラクチャをアッ プデートするパイプラインのリリースを自動化します
CICDで必要なファイルについて ❏ buildspec.yml ❏ Codebuildでビルド実行時に実行するコマンドを記述したファイルです。 ❏ appspec.yml ❏ ECSで使用するタスク定義を定義し、 CodeDeployでデプロイ中にトラフィックを再ルーティングする
タスク(コンテナ)名、ポートを定義します。 ❏ taskdef.json ❏ タスク定義を作成するファイルです。 ❏ imageDetail.json ❏ ECS イメージ URI を説明する JSON ファイルです。
CICDで必要なファイルについて ❏ buildspec.ymlの中身は下記のような形です
CICDで必要なファイルについて ❏ pre_buildフェーズ ❏ 最終的にimageをプッシュするECRにログインしています。 ❏ aws ecr get-login-password --region
$AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com ❏ Imageタグにビルドの実行IDを指定しています。 ❏ IMAGE_TAG=build-$(echo $CODEBUILD_BUILD_ID | awk -F":" '{print $2}') ❏ ビルド実行IDは {ビルドプロジェクト名 : ビルド実行ID} で生成されるので、: 以降のみを抽出 してImageタグに指定しています。
CICDで必要なファイルについて ❏ buildフェーズ ❏ ビルド環境でImageをビルドしています。 ❏ DOCKER_BUILDKIT=1 docker build -t
$IMAGE_REPO_NAME . ❏ DOCKER_BUILDKITはDocker Buildの拡張版です。 ❏ ビルドしたImageを参照して、ECRにプッシュするための Imageを作成しています。 ❏ docker tag $IMAGE_REPO_NAME:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_R EPO_NAME:$IMAGE_TAG
CICDで必要なファイルについて ❏ post_buildフェーズ ❏ ECRにビルドしたImageをプッシュしています。 ❏ docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_R EPO_NAME:$IMAGE_TAG
❏ ECSにデプロイする際に使用する ImageURIを記載したImageDetail.jsonファイルを作成していま す。 ❏ printf '{"ImageURI":"%s"}' $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_R EPO_NAME:$IMAGE_TAG > imageDetail.json ❏ “%s”にECRにプッシュしたImageを代入しています。 ❏ 作成したImageDetail.jsonは下記のような形で生成されます。
CICDで必要なファイルについて ❏ artifacts ❏ post_buildで生成したImageDetail.jsonをCodeBuildのoutputとして定義しています。
CICDで必要なファイルについて ❏ appspec.ymlの中身は下記のような形です
CICDで必要なファイルについて ❏ TargetService ❏ 今回デプロイ対象は ECSになるので、AWS::ECS::Serviceを選択しています。 ❏ TaskDefinition ❏ 別途用意したtaskdef.jsonの内容を記載するため、
"<TASK_DEFINITION>"を記載しています。 ❏ ContainerName ❏ ECSで起動されているタスク定義に記載されたタスク名と同じ必要があります。 ❏ ContainerPort ❏ ECSで起動されているタスク定義に記載されたポートと同じ必要があります。
CICDで必要なファイルについて ❏ taskdef.jsonは下記のような形です
CICDで必要なファイルについて ❏ image ❏ 本来ECSで使用しているタスク定義にはイメージの URI等が入っていますが、今回は Codebuildで ECRにプッシュしたImageを使用したいため、"<IMAGE1_NAME>"を記載しています。 ❏ taskdef.jsonはECSで現在使用しているタスク定義の最新のリビジョンのjsonを元
に作成しています。
それぞれ必要なファイルがあって、何をしているかはわかったけど、 どうやって連携してるの?
CodePipelineの各ステージで定義してあげます。
CodePipelineの設定値について ❏ CodePipelineには各ステージで生成されるファイルを格納するためのアーティファ クトストが必要になります。
CodePipelineの設定値について ❏ Sourceステージは下記の様になっています。
CICDの流れについて ❏ 出力アーティファクトには source_output_infraを指定しています。 ❏ 出力アーティファクトとして、 CodeCommitリポジトリに格納されてる buildspec.yml、appspec.yml、 taskdef.json、DockerfileなどがS3に保存されます。
CodePipelineの設定値について ❏ Buildステージは下記の様になっています。
CodePipelineの設定値について ❏ 入力アーティファクトには Sourceステージで出力アーティファクトとして設定した source_output_infraを指定しています。 ❏ CodeBuildがbuildspec.ymlをソースリポジトリから参照する場合は、 Sourceステージの出力アー ティファクトとBuildステージの入力アーティファクトを同じにする必要があります。 ❏
出力アーティファクトはbuild_outputを指定しています。 ❏ 出力アーティファクトとして、 Buildフェーズで作成したImageDetail.jsonがS3に格納されます。
CodePipelineの設定値について ❏ Deployステージは下記の様になっています。
CodePipelineの設定値について ❏ 入力アーティファクトにはSourceステージとBuildステージの出力アーティファクトを 指定するため、source_output_infraとbuild_outputを指定しています。 ❏ Amazon ECSタスク定義はSourceステージの出力アーティファクトを参照するた め、source_output_infraを指定しています。 ❏ AWS
CodeDeploy AppSpecファイルはSourceステージの出力アーティファクトを 参照するため、source_output_infraを指定しています。
CodePipelineの設定値について ❏ 入力アーティファクトを持つイメージの詳細はImageDetail.jsonを参照したいので、 build_outputを指定しています。 ❏ タスク定義のプレースホルダー文字はtaskdef.jsonのimageに記載した IMAGE1_NAME を記載します。 ❏ IMAGE1_NAMEがImageDetail.jsonに記載されてるImageURIに置換され、ECSのタスク定義とし
て使用されます。