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
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
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
AWS CDKで大量のパラメータストアを作りたい
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yasunobu Kotani (はくひめ)
October 23, 2024
Technology
1k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS CDKで大量のパラメータストアを作りたい
2024/10/23 JAWS-UG CDK支部 #17 ~大規模利用の神髄:限界突破の秘訣~
https://jawsug-cdk.connpass.com/event/331430/
Yasunobu Kotani (はくひめ)
October 23, 2024
More Decks by Yasunobu Kotani (はくひめ)
See All by Yasunobu Kotani (はくひめ)
VPCでもFloatingIPを使いたいんだ
y_kotani
1
540
社内勉強会で使える低コストVDI環境検討
y_kotani
1
260
AWS Step Functionsのタスク入出力に秩序を与えよう
y_kotani
0
460
Other Decks in Technology
See All in Technology
TSKaigi Sendai 2026 - tsgo時代のTypeScript Playgroundはどう動くか
teamlab
PRO
0
110
AIがGISを代替する日:〜すべてをAIが創る時代に、私たちがFOSS4Gに関わる意味〜
lehupa
1
210
AIコーディングはじめました
miso
0
150
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
200
AIエージェントの監視、思考を見るか行動を見るか / Monitoring AI Agents: Thoughts or Actions
yusukeshimizu
2
170
GCASアップデート(202607-202610)
techniczna
1
210
リアクションエンジニア ― 小さなリアクションから、話しかけやすい組織をつくる ―
ryuguyana
1
130
Maestro MCPとClaude Code Skillsによる自律的なE2Eテスト支援
asmz
0
430
サボる子はいねぇがー!AgentCoreハーネスの脆弱性に学ぶ、エージェントの入力バリデーション
iwamot
PRO
5
300
2026 Apache Flink Community Checkpoint
rmetzger
0
200
Active Directory と Entra ID のむむむな関係
murachiakira
PRO
3
1.7k
eBPF 簡介 2026 版
shunghsiyu
0
190
Featured
See All Featured
Making Projects Easy
brettharned
120
6.8k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
23k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
280
The Mindset for Success: Future Career Progression
greggifford
PRO
0
560
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How Software Deployment tools have changed in the past 20 years
geshan
3
35k
Done Done
chrislema
187
17k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
510
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.9k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Transcript
1 © BIP Systems Corporation 2024 2024年10月23日 ビップシステムズ株式会社 小谷 泰庸
AWS CDKで大量のパラメータストアを作りたい JAWS-UG CDK支部 #17 ~大規模利用の神髄:限界突破の秘訣~
2 © BIP Systems Corporation 2024 自己紹介 ▌名前 小谷 泰庸
(Yasunobu Kotani) ▌所属 ビップシステムズ株式会社 ▌仕事 AWS基盤設計・構築 クラウド技術推進 (CDK経験は1年程度) ▌好きなAWSサービス ⚫ Lambda ⚫ Step Functions ▌X ⚫ @haku__hime ▌ うちの子紹介 羽空(はく) 姫叶(ひめか)
3 © BIP Systems Corporation 2024 本日のテーマ CDKで大量のパラメータストアを作る
4 © BIP Systems Corporation 2024 開発チームからの依頼事項 ECS/Fargate構成コンテナの環境変数にパラメータを設定して欲しい。 ⚫ 暗号化が必要なシークレット情報あり。
⚫ 運用で頻繁に変わるパラメータあり ⚫ コンテナ数 50以上。 ⚫ 総パラメータ数 1000以上。
5 © BIP Systems Corporation 2024 どうやって実現するか ⚫ パラメータはパラメータストアに格納。 ⚫
ECSのタスク定義でパラメータストアを参照させる。 ⚫ 暗号化が必要なシークレット情報はKMS(CMK)で暗号化。 シークレット 変更頻度 プロビジョニング方法 いいえ 低 CDKでパラメータストア作成。 パラメータ値もCDKコード内で管理。 パラメータ変更時はCDKコードを修正してデプロイ。 いいえ 高 CDKでパラメータストア作成。 パラメータ値は手動設定(マネージメントコンソールから変更)。 CDKコード上のパラメータ値はダミー値とし、デプロイ後はメンテナンス しない。 はい - パラメータ特性に応じて、以下の管理方法とする。
7 © BIP Systems Corporation 2024 どうやって実現するか さて、実現方式も決まったので、 大量のパラメータも、CDKでループさせればあっという間に完成! って安易に思っちゃいました・・・
8 © BIP Systems Corporation 2024 苦悩の日々 でも、現実はそんなに甘くなかったです・・・ 私の苦労を聞いて下さい!
9 © BIP Systems Corporation 2024 ①KMS(CMK)暗号化パラメータを作成できない CDKライブラリではSecure Stringタイプのパラメータストアを作成で きない。
class StringParameter (construct) AWS::SSM::Parameter Type指定も非推奨! CloudFormationにも KMSを指定できそうなパラメータがない! KMSを指定できそうなPropsがない! L1/L2コンストラクト共に使えない!
10 © BIP Systems Corporation 2024 ①KMS(CMK)暗号化パラメータを作成できない APIは? PutParameter -
AWS Systems Manager APIは使える! KMSが指定できる! Type指定もできる!
11 © BIP Systems Corporation 2024 ①KMS(CMK)暗号化パラメータを作成できない では、カスタムリソースを作ろう。 AwsCustomResourceコンストラクトを利用。 onUpdateは意図的に実装しなかった。
なぜか。 CDKでパラメータ値を管理しないものについ て、本カスタムリソースを使う方針とした。 ⇒CDKでパラメータ値を更新しない(しては いけない) 運用となるため、onUpdateな しの方が安全な運用ができると考えた。
12 © BIP Systems Corporation 2024 ①KMS(CMK)暗号化パラメータを作成できない ちなみに、 CDKでパラメータ値を管理するものは、L1コンストラクト (CfnParameter)にて実装。
⇒L2コンストラクト(StringParameter)はタグ設定可能なパラメータ が用意されていなかったため。
13 © BIP Systems Corporation 2024 ②カスタムリソースのLambda用IAMポリシー増殖 1:46:56 PM |
CREATE_FAILED | AWS::IAM::Policy | CustomParameter68C...urcePolicyAB36F30E Resource handler returned message: "Maximum policy size of 10240 bytes exceeded for role ・・・ (Service: Iam, Status Code: 409, Request ID: ・・・)" (RequestToken: ・・・, HandlerErrorCode: ServiceLimitExceeded) IAM と AWS STSクォータ - AWS Identity and Access Management (amazon.com) デプロイ中にエラー発生。 原因はIAMロールのインラインポリシーサイズ上限超え。
14 © BIP Systems Corporation 2024 ②カスタムリソースのLambda用IAMポリシー増殖 なぜ、IAMロールのインラインポリシーサイズが肥大したのか。 AwsCustomResource AwsCustomResource
AwsCustomResource スタック AwsCustomResource ・・・ インラインポリシー インラインポリシー インラインポリシー インラインポリシー ・・・ policyの指定によりインラインポリシー増殖! 増殖イメージ カスタムリソース用Lambda、IAMロール Singletonで実装されており、 スタックに対して1つだけ作られる policy指定によりリソース毎に インラインポリシーが作られる
15 © BIP Systems Corporation 2024 ②カスタムリソースのLambda用IAMポリシー増殖 以下は、30個のパラメータストアを作成した際のIAMロール。 許可ポリシーに30個のインラインポリシーが割り当てられている。 ・・・
16 © BIP Systems Corporation 2024 ②カスタムリソースのLambda用IAMポリシー増殖 解決方法 1つ目のAwsCustomResourceのノードから SingletonFunctionを探しIAMロールを取得。
2つ目以降は、取得したIAMロールを指定。 でも、今考えると、普通にIAMロールを用意して指定すれば良かっただけかも・・・ policyを指定は1つ目のAwsCustomResourceのみ。 2つ目以降は、最初に作成したAwsCustomResourceの中で作成されたroleを指定。 (無理やり・・・)
17 © BIP Systems Corporation 2024 ③リソース多すぎでRate exceeded発生 12:10:02 PM
| CREATE_FAILED | Custom::SSMParameterStore | CustomParameter-17...e/Resource/Default Received response status [FAILED] from custom resource. Message returned: Rate exceeded (RequestId: ・・・) デプロイ中にエラー発生。 原因はPutParameter APIのRate exceeded。 1スタックあたり300~400パラメータ程度。 ※パラメータストアの全量は1000以上あるため、スタックあたりのリソース数上限(500)未満に収まるように分割。 CloudFormationは並列でリソースを作成しようとする。 これだけのリソースを同時に作成しようとすれば、当然の結果・・・
18 © BIP Systems Corporation 2024 ③リソース多すぎでRate exceeded発生 解決方法 ※pstoreList=パラメータストアのコンストラクトオブジェクトList
10並列に制限する実装例 パラメータストア1 … パラメータストア10 パラメータストア11 … パラメータストア20 パラメータストア21 … パラメータストア30 依存関係 依存関係 パラメータストア10が作成された後、 パラメータストア11~20が作成される パラメータストア20が作成された後、 パラメータストア21~30が作成される addDependencyによりリソース間の依存関係を追加し、並列で作成されるパラメータス トア数を制限。
19 © BIP Systems Corporation 2024 ③リソース多すぎでRate exceeded発生 しかし、尚もRate exceeded発生。
カスタムリソース用LambdaがAPIコールを行う際のリトライ回数が少 な過ぎた。 (恐らくデフォルトは3回程度) addDependencyにより並列作成数を小さくすれば解消するが、 デプロイ時間が延びる。
20 © BIP Systems Corporation 2024 ③リソース多すぎでRate exceeded発生 解決方法 (追加)
AwsCustomResourceのノードからSingletonFunctionを探し、環境変数を設定。 カスタムリソース用Lambdaの環境変数に、「AWS_MAX_ATTEMPTS」を設定し、 APIコールのリトライ回数を増やす。
21 © BIP Systems Corporation 2024 晴れ晴れ 無事完成!
22 © BIP Systems Corporation 2024 まとめ 大量のリソースを短いコードでプロビジョニングできるのはCDKの強み。 数百、数千のリソースを作る場合、相当威力を発揮する。 でも、高を括り過ぎないように注意・・・
CDK内外での制約事項をしっかり見極めて、安心安全のCDKライフを。
技術で情報社会を追求する企業です。 デジタル革命の真っ只中にある日本 ビップシステムズは豊富な実績、ノウハウと先進的な技術で お客様を強力にサポートします Thanks for listening.