Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CICDを使用したECS Blue Greenデプロイを実施する際に必要なファイルについて
Search
takashi
April 15, 2023
430
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
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
590
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
650
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Being A Developer After 40
akosma
91
590k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
We Are The Robots
honzajavorek
0
350
BBQ
matthewcrist
89
10k
So, you think you're a good person
axbom
PRO
2
2.1k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
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のタスク定義とし
て使用されます。