Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LT_Amazon_ECSで複数環境のDockerイメージを頑張って共通化した話.pdf

KOHEI SATO
March 18, 2024
12

 LT_Amazon_ECSで複数環境のDockerイメージを頑張って共通化した話.pdf

KOHEI SATO

March 18, 2024
Tweet

Transcript

  1. © 2023 e-dash Co., Ltd. 2 ⾃⼰紹介‧所属会社に関して ⽒名:佐藤幸平(こへこへ) 所属:e-dash株式会社 役割:ソフトウェアエンジニア

    出⾝:埼⽟県(2年前に名古屋に引越しました) • 企業のCO2排出量可視化‧削減のSaaSを開発 • 三井物産出資のスタートアップ • 2022年設⽴‧本社は東京の⼤⼿町 • ソフトウェアエンジニア絶賛募集中です (特にAWS詳しい⽅、、、、) お客様の脱炭素への 取り組みを⽀援して いるよ!
  2. © 2023 e-dash Co., Ltd. 3 こちらのプレゼンに関して 1. 弊社ではAmazon ECSというコンテナオーケストレーションのサービスを使っ

    たWebアプリケーション開発を⾏っています。 2. ECSを使った複数開発環境構築の際に⼯夫した点を話します。
  3. © 2023 e-dash Co., Ltd. 4 アーキテクチャ ALB RDS(Aurora) Backend

    Service Golang Frontend Service Next.js ECS Cluster ECR DNS resolution Cloud Map (service connect) build & push docker image update service (Rolling Update) User triggered by the merge event feature/xxx -> main System Manager Parameter Store environment variables
  4. © 2023 e-dash Co., Ltd. 5 replication ⼯夫した点:環境間でのコンテナイメージの共通化 • 複数環境間(開発環境‧検証環境‧本番環境)で同⼀のDockerイメージを使うよう

    にした(環境毎にAWSのアカウント⽤意) • 環境間で異なるパラメータを利⽤したい場合は、コンテナ起動時に環境変数を設定 するようにした。 • ビルドしたイメージはすべて開発環境のECRにPushし、別環境のECRにReplication するようにした。 ECR(stg) ECR(prod) push image ECR(dev) 202311201459,latest 202311201132 202311191824 202311201459,latest 202311201132 202311191824 202311201459,latest 202311201132 202311191824
  5. © 2023 e-dash Co., Ltd. 6 replication ⼯夫した点:環境間でのコンテナイメージの共通化 • Pushする際にビルド⽇時とlatestをタグに指定。

    • ⼿動実⾏可能なGithubActionsのワークフローを⽤意し、stg, prodのECRのイメージタグを変更 →タグの付替えだけなのでデプロイ時間が短い&ロールバックしやすい • ECSのタスク定義でPullするタグを以下の通りに設定 開発環境(latest) / 検証環境(latest-stg) / 本番環境(latest-prod) ECR(stg) ECR(prod) push image ECR(dev) 202311201459,latest 202311201132 202311191824 202311201459,latest 202311201132 202311191824,latest-stg 202311201459,latest 202311201132,latest-prod 202311191824 deploy
  6. © 2023 e-dash Co., Ltd. 7 苦労した点:Next.jsのコンテナイメージのビルド • Next.jsは、クライアントサイドで使⽤可能な環境変数(※)と、サーバーサイド(API Route)で

    使⽤可能な環境変数に分かれている。 • 前者はDockerイメージのビルド時(yarn build)にしか指定することができない。 • フロントエンド側で必要な変数(e.g. ページのURLとか)に関しては、クライアント側では環境 変数に指定せず、Next.jsにAPIを⽤意し、サーバーサイドから取得するようにした。 ECS(dev) Frontend Task Next.js frontend_logout_url = https://dev.e-dash.com/logout call Next.js api to get Logout URL (※)Next.jsではビルド時にNEXT_PUBLIC_プレフィッ クスの値をクライアントサイド(ブラウザ)で利⽤可 能な変数として注⼊できる。
  7. © 2023 e-dash Co., Ltd. 8 まとめ 1. dockerイメージを複数環境で使い回すメリット a.

    環境ごとにdockerをビルドしなくてよい b. デプロイ‧ロールバック時間の短縮 2. dockerイメージを複数環境で使い回すデメリット a. フロントエンド(React/Vue)側の環境変数を設定できない b. 環境毎にgitのbranchを切っている場合採⽤しずらい