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
CDKを活用した 大規模コンテナ移行 プロジェクトの紹介
Search
akita
September 25, 2024
Programming
0
140
CDKを活用した 大規模コンテナ移行 プロジェクトの紹介
akita
September 25, 2024
Tweet
Share
More Decks by akita
See All by akita
AWSやJAWS-UGとの出会いを振り返る
yoyoyopg
1
320
AWS Control Tower で マルチアカウント運用を試した話
yoyoyopg
0
47
CDK + ecspressoでお手軽コンテナ3分クッキング
yoyoyopg
0
630
Other Decks in Programming
See All in Programming
watsonx.ai Dojo #2 生成AIを使ったアプリ開発入門編
oniak3ibm
PRO
0
370
Iteratorでページネーションを実現する
sonatard
2
640
What is TDD?
urakawa_jinsei
0
110
LLMと音声基盤モデルを用いた音声認識
spiralai
PRO
0
110
上手に付き合うコンポーネントテスト
quramy
3
1.1k
フロントエンドの標準仕様をどう追っているか / How I follow the frontend standards specs
petamoriken
0
140
Securify_エンジニア採用資料
3shake
0
140
From Idea to IDE: Developing Plugins for Android Studio
thisaay
1
300
GitHub Actions で始める Salesforce CI
sms_tech
0
130
KSPの導入・移行を前向きに検討しよう!
shxun6934
PRO
0
410
M5Stack に色々な M5ユニットをつないで扱う為の新たなアプローチ
gob
0
150
実践!難読化ガイド
mitchan
0
1k
Featured
See All Featured
Web development in the modern age
philhawksworth
205
10k
Clear Off the Table
cherdarchuk
91
320k
It's Worth the Effort
3n
182
27k
Into the Great Unknown - MozCon
thekraken
29
1.4k
Six Lessons from altMBA
skipperchong
26
3.4k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
28
1.6k
How to name files
jennybc
75
98k
The Cult of Friendly URLs
andyhume
76
6k
Build your cross-platform service in a week with App Engine
jlugia
228
18k
Designing with Data
zakiwarfel
98
5.1k
Art, The Web, and Tiny UX
lynnandtonic
294
20k
What the flash - Photography Introduction
edds
67
11k
Transcript
JAWS-UG CDK支部 #16 ~CDK Conference 2024 Extra~ 2024/09/25 あきた(yoyoyo_pg) CDKを活用した 大規模コンテナ移行
プロジェクトの紹介
• あきた(@yoyoyo_pg) • 経歴 ◦ 名古屋の士業系SaaS ◦ Java開発2年 -> AWS歴2年半
◦ SREとしてインフラ構築・運用 ◦ JAWS-UG名古屋運営(2024年~) • 好きなAWSサービス ◦ AWS CDK 自己紹介 2
3 話す事 • CDKを用いて100台近くのコンテナ・CICDパイプライ ンの構築フローを定めた事例 ◦ 複数人での構築作業において、構築や運用の手間を 減らすうえで工夫した点や今後の課題 話さない事 •
CDKのベストプラクティス • CDK自体の内部構造や技術的な話 • コンテナへのデプロイフロー・移行作業の話 今日お話すること
4 • 20年物のモノリスなJavaアプリケーションのEoL対応 に伴い、約1年かけ動作基盤をEC2からコンテナ(ECS on Fargate)へと移行 ◦ 元々CloudFormationで構築していたVPCやALBなど 共通リソースはそのままで、モノリスを分解しつつ アプリケーションを段階的に移行する形
• コンテナ化・CICDパイプラインの構築のために、IaC ツール(CDK + ecspresso)を導入 プロジェクトの概要
Virtual private cloud (VPC) Private subnet Public subnet 5 簡易構成図(移行前)
Application Load Balancer Amazon Aurora Amazon EC2 アプリケーション約 15個が同居
Virtual private cloud (VPC) Private subnet Public subnet 6 簡易構成図(移行後)
Application Load Balancer Service Amazon ECS Container Amazon Aurora Amazon EC2 1アプリケーション=1ECSサービスとし て構築し、段階的に移行
7 簡易構成図(移行後) Application Load Balancer Amazon ECS ServiceA Amazon Aurora
ServiceE ServiceI ServiceB ServiceF ServiceJ ServiceD ServiceH ServiceC ServiceG ServiceK Virtual private cloud (VPC) Private subnet Public subnet
構成図(全体) 8 8 • 7 環境 × 15 コンテナ =
約 100 パターンのコンテナと 60 パターンのCICDパイプライン ◦ TEST環境×4, デモ環境, STG環境, 本番環境
9 • 約 100 パターンのコンテナ・60 パターンのCICDパイ プラインの構成を定義 ◦ 環境別に 15
アプリケーション分を定義 ◦ 構築量が多く、スタックは分けざるを得なかった CDKスタック構成 ▪コンテナ用スタック • Test1Container • Test2Container • StgContainer • ProdContianer ・・・ ▪CICD用スタック • Test1Cicd • Test2Cicd • StgCicd • ProdCicd ・・・
10 スタック別の構築内容 ▪コンテナ用スタック • ECSクラスター • タスクロール • タスク実行ロール •
セキュリティグループ • ターゲットグループ • ロググループ • SSMパラメータストア ▪CICD用スタック • CodePipeline • CodeBuild • buildspec.yml • 各種ロール • 環境別の設定ファイル ▪ecspresso • ECSサービス • ECSタスク
11 大まかな構築の流れ ▪コンテナ用スタック • ECSクラスター • タスクロール • タスク実行ロール •
セキュリティグループ • ターゲットグループ • ロググループ • SSMパラメータストア ①コンテナスタックを構築 ②空のターゲットグループ をALBに紐づけ ▪CICD用スタック • CodePipeline • CodeBuild • buildspec.yml • 各種ロール • 環境別の設定ファイル ④CICDパイプラインを構築 ▪ecspresso • ECSサービス • ECSタスク ③コンテナ本体を構築 ※SSMパラメータストアで名前解決
12 • コンテナ・CICDパイプラインの構成を、共通コンスト ラクトとして定義 • 共通コンストラクトには主に「アプリ名」「環境名」 をpropsとして渡す ◦ 共通で構築しないリソースに関しては、権限付与用 の関数を用いて構築
▪ セキュリティグループやECSタスクロールの内、 本番環境のみメール通知権限、アプリAとアプリ BのみS3アクセス権を付与、など CDKの共通コンストラクト
13 実装例(パラメータとスタック)
14 実装例(パラメータとスタック) アプリ名・環境名を parameter.tsで定義 各アプリがどの機能を 使うかを定義
15 実装例(パラメータとスタック) アプリ名・環境名を parameter.tsで定義 各アプリがどの機能を 使うかを定義 コンテナスタックを 環境別に定義 アプリ別コンテナコン ストラクトを定義
16 実装例(コンストラクト) 権限付与用の関数を 用いて権限の付与
17 • テストコード(スナップショットテスト)導入 ◦ CDKバージョンアップやリファクタリングが容易に • npm install の自動化 ◦
VSCodeの機能(tasks.json)で、プロジェクトを 開いた時に自動的に npm install が走るように ▪ CDKバージョンアップ後にチームにアナウンス する手間を削減 • コーディング規約・運用規約の制定 ◦ 最初にある程度の共通認識をすり合わせておけた ◦ レビュー時のコスト削減 取り組んでよかった事
18 • コンストラクトツリーによる構造化 ◦ 自作コンストラクトを作成しアプリ別に分割 ▪ リソースをCloudFormationの画面上からも、 コードベース上からも確認しやすく • エスケープハッチの活用
◦ L2からL1を取り出してのパラメータの指定 取り組んでよかった事
19 • cdk import と cdk migrate の実施 ◦ 既存のリソース(手動構築・CFnによる構築)を出
来るだけCDK管理下へ • CDK用パイプラインの導入 ◦ 当時は導入の判断を見送っていた • バリデーションチェックや単体テストの導入 ◦ まずは本番環境用リソースに対して • ecspressoで構築したECSサービス・タスクをどう管理 するかの検討(CDK以外の部分) 今後取り組みたい事
20 • cdk import と cdk migrate の実施 ◦ 既存のリソース(手動構築・CFnによる構築)を出
来るだけCDK管理下へ • CDK用パイプラインの導入 ◦ 当時は導入の判断を見送っていた • バリデーションチェックや単体テストの導入 ◦ まずは本番環境用リソースに対して • ecspressoで構築したECSサービス・タスクをどう管理 するかの検討(CDK以外の部分) 今後取り組みたい事
21 JAWS-UG 名古屋 「IaC運用のリアルを 語りたい!LT大会(仮)」 10月28日(月)19:00~21:00 会場:コラボベース NAGOYA connpass上で後日イベントページを公開します 宣伝
22 ご清聴ありがとうございました おわり
23 次のスライドからは、 本編で紹介しきれなかった 取り組みの例を紹介します おまけ
24 コーディング規約例 • コンストラクト名はパスカルケースで記載 • デフォルトのパラメータは可能な限り活用 • リソースやリソース名は自動生成を可能な限り活用 • GrantやAllow系メソッドは可能な限り活用
設計面の規約例 • 可能な限り同一スタックで定義 • 自作コンストラクト・関数の置き場所の指定 • SSMパラメータ参照・コンストラクト間の値参照の活用 取り組み例:コーディング規約
25 ルール例 • CDK化の基準 ◦ ex. 全てのインフラ操作を「CDKで管理」する訳で はなく、普段メール通知を閉じておくテスト環境は メール通知を閉じておく等 •
GitHub上のルール ◦ ブランチ名は作業者名/操作内容 ◦ ラベルによる管理(環境別のラベルを作成) 取り組み例:運用ルールの制定