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
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
510
社内勉強会で使える低コストVDI環境検討
y_kotani
1
250
AWS Step Functionsのタスク入出力に秩序を与えよう
y_kotani
0
460
Other Decks in Technology
See All in Technology
AI時代のPRレビューにどう向き合うか?
kairim0
1
240
その Valkey 使いこなしていますか?
onk
PRO
5
1.5k
Running Kotlin + Quarkus with Lambda
nealle
1
3.8k
CTO Night|NotionのAIエージェントとFDE
kzkhykw1991
0
150
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
190
自作バイナリを動かす「入口」8選
puhitaku
2
1.3k
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
190
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
250
ストレスなくAIと付き合いたい!こんなときどうしてる?
namiki64
3
550
Local CI × GitHub Actions
gogutan
2
210
会社説明資料
persolserverworks
0
9.8k
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.4k
Featured
See All Featured
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
Testing 201, or: Great Expectations
jmmastey
46
8.3k
ラッコキーワード サービス紹介資料
rakko
1
5.4M
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Faster Mobile Websites
deanohume
310
32k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
990
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
It's Worth the Effort
3n
188
29k
Exploring anti-patterns in Rails
aemeredith
4
540
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
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.