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
Yasunobu Kotani (はくひめ)
October 23, 2024
Technology
950
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
180
社内勉強会で使える低コストVDI環境検討
y_kotani
1
240
AWS Step Functionsのタスク入出力に秩序を与えよう
y_kotani
0
460
Other Decks in Technology
See All in Technology
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
280
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
200
enechainの内製セルフサービスプラットフォーム
hiyosi
0
160
アリアドネの糸と、20年ごとの建て替え ── 長尾真『電子図書館』を、伊勢で読み直す / Rereading Makoto Nagao’s "Electronic Library" in Ise
ykiyota
0
160
DEFCON_CHV_CTF_Write-up.pdf
bata_24
0
140
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
360
新機種発売前に見直そう!端末移行で再ログインが要るアプリ・要らないアプリは何が違うのか 〜シームレスに再開できる設計と実装〜
zozotech
PRO
0
110
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
120
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
540
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
0
210
Deploying a Full-Stack Bun-Native Framework on Cloudflare Workers
7nohe
0
150
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
650
Featured
See All Featured
BBQ
matthewcrist
89
10k
Fireside Chat
paigeccino
43
4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
220
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
250
Build your cross-platform service in a week with App Engine
jlugia
234
19k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Everyday Curiosity
cassininazir
0
310
Design in an AI World
tapps
1
310
30 Presentation Tips
portentint
PRO
1
390
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
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.