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
AWS CDKで大量のパラメータストアを作りたい
Search
Yasunobu Kotani (はくひめ)
October 23, 2024
Technology
1
750
AWS CDKで大量のパラメータストアを作りたい
2024/10/23 JAWS-UG CDK支部 #17 ~大規模利用の神髄:限界突破の秘訣~
https://jawsug-cdk.connpass.com/event/331430/
Yasunobu Kotani (はくひめ)
October 23, 2024
Tweet
Share
More Decks by Yasunobu Kotani (はくひめ)
See All by Yasunobu Kotani (はくひめ)
AWS Step Functionsのタスク入出力に秩序を与えよう
y_kotani
0
420
Other Decks in Technology
See All in Technology
[PR] はじめてのデジタルアイデンティティという本を書きました
ritou
0
770
人工知能のための哲学塾 ニューロフィロソフィ篇 第零夜 「ニューロフィロソフィとは何か?」
miyayou
0
360
AWSと生成AIで学ぶ!実行計画の読み解き方とSQLチューニングの実践
yakumo
2
230
AWS re:Inventre:cap ~AmazonNova 2 Omniのワークショップを体験してきた~
nrinetcom
PRO
0
130
Data Hubグループ 紹介資料
sansan33
PRO
0
2.5k
AI との良い付き合い方を僕らは誰も知らない (WSS 2026 静岡版)
asei
1
230
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.5k
AWS re:Invent2025最新動向まとめ(NRIグループre:Cap 2025)
gamogamo
0
150
わが10年の叡智をぶつけたカオスなクラウドインフラが、なくなるということ。
sogaoh
PRO
1
270
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
善意の活動は、なぜ続かなくなるのか ーふりかえりが"構造を変える判断"になった半年間ー
matsukurou
0
280
純粋なイミュータブルモデルを設計してからイベントソーシングと組み合わせるDeciderの実践方法の紹介 /Introducing Decider Pattern with Event Sourcing
tomohisa
1
650
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
40
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
Prompt Engineering for Job Search
mfonobong
0
140
Claude Code のすすめ
schroneko
67
210k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Designing for Performance
lara
610
70k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
54
49k
Navigating Weather and Climate Data
rabernat
0
65
Thoughts on Productivity
jonyablonski
73
5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
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.