本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「ECSの環境変数をCDKで変更したいあなたへ!」を再編集したものです
はじめに
こちらの記事はFIXER Rookies Advent Calendar 2024 - Adventarの記事になります。
業務でIaCを用いてECSの環境を構築、運用する機会があり、環境変数の変更をCDKで管理する上で注意が必要であった点についてまとめます。
以下のエラーと出会った方におすすめです。
The following resource(s) failed to update: [ECSService] Update requires replacement of resource ECSService
前提
本記事は以下の知識をお持ちの方を対象としています。
1. Amazon ECSに関する知識
・ECSの基本的なアーキテクチャを理解している
・タスク定義、サービス、クラスターの概念を理解している
・ECSサービスのデプロイメントプロセスを理解している
2. AWS CDKに関する知識
・CDKの基本的な構文を理解している
・Stackの作成と更新の基本を理解している
・「cdk deploy」、「cdk diff」などの基本的なCDKコマンドを理解している
CDKでECS環境変数を管理する上でのポイント
以下に自分なりのポイントをまとめました。
1. サービスとECSのタスク定義を作成するスタックは分ける
2. サービスを更新する方法を検討する
3. 既にECSのスタックをデプロイしているときはタスク定義更新スタックを作成する
各項目の詳細について記載します。
1. ECSサービスとECSのタスク定義を作成するスタックは分ける
サービスには変更不可能な属性が多く、サービスの更新をCDKで行うことは推奨されていません。
そのため、サービスの更新を行うには他の方法で行う必要があります。一方、タスク定義は更新可能であるため、スタックを分けることが好ましいです。
2. ECSサービスを更新する方法を検討する
ポイント1でも述べましたが、サービスの更新はCDK以外の方法で行う必要があります。
方法については以下から選択できます。
1. AWS Management Console
2. AWS CLI
3. AWS SDK
自分はパイプラインを用いてAWSCLIで更新を行いました。
3. 既にECSのスタックをデプロイしているときはタスク定義更新スタックを作成する
サービスとタスク定義のスタックを分けずにデプロイしてしまって、既に安易に消せない状況の場合はタスク定義の更新だけを行うスタックを作成しましょう。その場合は既存ECSスタックのConstructから、依存情報を取得することで既存タスク定義の削除や意図しない新規タスク定義の作成を防ぐことができます。
// 例 const rootConstruct = new Construct(this, 'ECSStack'); ... const TaskDefinition = new ecs.Ec2TaskDefinition( rootConstruct, ... );
まとめ
ECSをCDKで管理する上で、サービスとタスク定義はスタックを分けると特に詰まることはないと思います。
最後に
初めて技術系のブログに挑戦しました! 誰かの役に立ってくれることを願っております~
仲田泰都/FIXER
この連載の記事
-
TECH
Amazon CloudFrontで特定の国からのアクセスを制限する方法 -
TECH
初心者向け:RDSスナップショットを別のAWSアカウントで復元する手順 -
TECH
AWS CDKとGitHubを使ったIaC=インフラ構成管理の基本 -
TECH
同世代エンジニアに刺激を受けた!JAWS-UG「若手エンジニア応援LT会」参加レポート -
TECH
AWS CDKでGuardDutyのRDS保護を有効化しよう(として詰みかけた話) -
TECH
ノーコードで生成AI連携! SlackからAmazon Bedrockのエージェントに質問 -
TECH
Terraform:変数の値が未代入でもインタラクティブな入力を回避する方法 -
TECH
Amazon SESでEメールの送信機能/受信機能を作る手順 -
TECH
Amazon BedrockからWeb上のコンテンツを参照する新機能「Web Crawler」 -
TECH
IAMユーザーのアクセスキーを使わず「IAMロール」を使うべき理由 - この連載の一覧へ