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
960
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
210
社内勉強会で使える低コストVDI環境検討
y_kotani
1
240
AWS Step Functionsのタスク入出力に秩序を与えよう
y_kotani
0
460
Other Decks in Technology
See All in Technology
ソフトウェアDNAとクラウドエージェントのススメ
cloudace
0
110
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
3
1.7k
人間はどの意思決定を手放せるのか
kawasima
14
7.1k
DEFCON_CHV_CTF_Write-up.pdf
bata_24
0
150
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
830
その Lambda、8分で 管理者権限まで奪われます
k1nakayama
4
2.5k
CLIライブラリ開発を支える技術
htnabe
0
120
積み重なった技術負債への挑戦 〜初手としての全社ゴト化〜
techtekt
PRO
0
1.3k
銀行勘定系システムにおける開発プロセス刷新×AIによる環境モダナイゼーション / Development Process Transformation and AI-Driven Environment Modernization
muit
0
2.2k
幾何アルゴリズムで なめらかなピン操作を / iOSDC Japan 2026 / smoothpin
kazumanagano
0
350
Railsのように考える: See through the Master
snoozer05
PRO
3
940
Minecraft JavaのMODをSwiftで作る
1mash0
0
170
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.1k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
540
Visualization
eitanlees
152
17k
Raft: Consensus for Rubyists
vanstee
142
7.7k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
Are puppies a ranking factor?
jonoalderson
2
3.9k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
330
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Navigating Weather and Climate Data
rabernat
0
520
The browser strikes back
jonoalderson
0
1.7k
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.