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
JAWS-UG情シス支部 情シスにこそStepFunctionsが強力な武器になる〜ワイはQ...
Search
Naomi Yamasaki
May 24, 2025
Technology
160
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JAWS-UG情シス支部 情シスにこそStepFunctionsが強力な武器になる〜ワイはQuickSightのユーザー削除を自動化したかったんや〜 / How to automate deprovisioning QuickSight users with StepFunctions
JAWS-UG 情シス支部 第31回 クラウド女子会×札幌支部コラボ会で発表した資料です。
StepFunctionsの設定でハマったところとその回避策を中心にお話ししました。
Naomi Yamasaki
May 24, 2025
More Decks by Naomi Yamasaki
See All by Naomi Yamasaki
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
4
360
EOL?パッチ当て? そんなの知るか!(上司)〜株式会社ジンベエ水産 EOL狂騒曲〜 / how can we operate eol management well
naospon
1
220
ssmonline #51 ヤマサキ春のサメ祭り 2026 / ssmjp Yamasaki Spring JAWS Festival 2026
naospon
1
170
こんなアーキテクチャ図はいやだ / Anti-pattern in AWS Architecture Diagrams
naospon
2
750
20260307_JAWS_DAYS_2026_CDP道場 / jaws days 2026 cdp dojo
naospon
0
45
アーキテクチャ専門支部 presents 帰ってきた!CDP道場 〜サメシャイン水族館 事業停止の危機を救え!〜 / CDP Dojo - Save the SAMESHINE Aquarium from Shutting Down! presented by JAWS-UG Architecture
naospon
0
190
JAWS DAYS 2026 CDP道場 事前説明会 / JAWS DAYS 2026 CDP Dojo briefing document
naospon
0
300
AI駆動開発をどのように組織に取り込んで実践していくか / How can we drive AI driven development in my company
naospon
2
460
IAM Identity Centerを利用したAWSアカウントへの ログイン統制戦略 / Login Control Strategy for AWS Accounts Using IAM Identity Center
naospon
1
170
Other Decks in Technology
See All in Technology
なぜ東京にいる私が、新潟の技術コミュニティを運営するのか by 八雲慎之助
yakumo
0
210
生き様としてのSRE
hokkai7go
1
140
[re:Invent2026事前勉強会(有志開催)]続きは、ラスベガスの廊下で / continue-in-the-vegas-hallway
sh_fk2
0
450
AIテスト自動化と評価駆動開発EDD
happysamurai294
0
120
You Have Agency(サンキュー、Ruby)
snoozer05
PRO
5
630
基本から分かる!AWSセキュリティ運用の考え方と任せ方
cmusudakeisuke
1
290
Don't write the architecture only in the prompt.
neohsu
0
280
新米を「売り越さない」、Aurora DSQLで作る在庫ゼロ死守の限定ドロップEC
yama3133
0
120
クラウドエージェントの先駆け Devin。今も最先端を走る、他との違い
kinopeee
1
520
慶應義塾大学 AI実践05 論文執筆の仕組み化
keio_smilab
PRO
2
2k
Vue で書く 空間コンピューティング、TresJS と WebXR を使ったXR デバイスのフロントエンド開発
hiranuma
0
140
E2Eってつらくないですか?E2Eの管理コストを下げる手段とその実践
akaboshinit
6
2.8k
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
47k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
560
The untapped power of vector embeddings
frankvandijk
2
2k
A Modern Web Designer's Workflow
chriscoyier
699
190k
What's in a price? How to price your products and services
michaelherold
247
13k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Building Adaptive Systems
keathley
44
3.3k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
800
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
720
Transcript
情シスにこそStepFunctionsが 強力な武器になる 〜ワイはQuickSightのユーザー削 除を自動化したかったんや〜 JAWS-UG 情シス支部 第31回 クラウド女子会×札幌支部コラボ会 2025/5/24 山﨑
奈緒美
AWS SAMURAI 2015 JAWS-UGアーキテクチャ専門支部 JAWS-UG情シス支部 生活協同組合コープさっぽろ デジタル推進本部 システム企画部 インフラチーム 山﨑
奈緒美 ご挨拶と自己紹介 大阪出身。 就職で上京し、ソフトハウスでインフラエンジニア 地図情報システム開発会社でひとり情シス 旅行会社の情シス部門でクラウド担当 2020年9月に東京から札幌へ移住し10月よりコープさっぽろへJOIN。 AWSのことならなんでも担当。 @nao_spon I ♡ Route53 IAM Organizations 夏はロードバイク、冬はスノボしてます。仲間募集中!
生活協同組合コープさっぽろについて (※2024年3月現在) 設立年月日 1965年7月18日 組合員数 201万人 出資金額 897億円 総事業高 3,186億円
店舗 1,983億円 宅配(灯油込) 1,134億円 共済(代理店収入) 22億円 その他 47億円 正規職員 2,405名 契約社員 2,228名 パート アルバイト 10,110名 ※従業員数は関連会社含む 道内:247万世帯 組織率:81%
北海道で生きることを誇りと喜びにする 3つのつなぐ 福祉活動 文化教室 組合員活動 葬祭事業 旅行事業 物流事業 店舗事業 移動販売
宅配事業 配食・給食 食育 食品製造 共済事業 エネルギー 子育て支援 環境活動 リサイクル フードバンク 育英奨学金 と 人 人 をつなぐ と 人 食 をつなぐ と 人 未来 をつなぐ
StepFunctionsってさぁ...
Step Functionsに対するイメージ
Step Functionsに対するイメージ
Step Functionsに対するイメージ • アプリ開発の人が触るサービス • WEBシステム/サイトの裏側で使うサービス • Lambdaをつなげていくサービス ◦ Lambdaを書かないといけない
• なんか難しそう • (情シス / インフラ)な自分には関係なさそうなサービス • 開いてみたけどワケわからなくてそっ閉じした
Lambdaを書かなくても AWS APIを直接呼び出せる StepFunctionsのいいところ
IAM Identity Centerと QuickSightユーザーの プロビジョニングを Step Functionsで実装してみた という話を前にしました
http://bit.ly/44E52Kz 資料はこちら
世の中は常にビルドアンドスクラップである 祇園精舎の鐘の声、諸行無常の響きあり。 沙羅双樹の花の色、盛者必衰の理をあらはす。 おごれる人も久しからず。ただ春の夜の夢のごとし。 たけき者も遂にはほろびぬ、ひとへに風の前の塵に同じ。 by 平家物語 盛者必衰=「生者必滅」「会者定離」 All living
things must die、we meet only to part
IAM Identity Centerと QuickSightユーザーの デプロビジョニングを Step Functionsで実装してみた 今回は削除の話
前回の話の後...
前回の話の後... 今まではアクティブなReaderのみ課金対象だったのが 2025/5/1より非アクティブなReaderも課金対象に
QuickSightユーザーって何人いるんだっけ Admin:10ユーザー Author:16ユーザー Reader:約2200ユーザー 2200 * $3 = $6600
QuickSightユーザーって何人いるんだっけ Admin:10ユーザー Author:16ユーザー Reader:約2200ユーザー 2200 * $3 = $6600 今までの倍以上になるやないかい
アクティブじゃない人は誰だ • 過去2ヶ月以上利用していないユーザーを削除する • Last activeの日付が2ヶ月以上前なら削除対象 • 約900ユーザーが削除対象
みんな大好きStep Functions Step Functionsのフロー 1. エラーログ用DynamoDBを作成 2. S3にある削除対象csvを参照 3. リストのメールアドレスからQSユーザー名生成
4. QSユーザー存在確認 a. 存在していたらユーザー削除 b. 存在していなかったらDynamoDBにログ出力 5. DynamoDBの内容をS3へファイル出力 6. DynamoDB削除 7. S3の削除対象csvファイル削除 ❶ ❷ ❸ ❹ a b ❺ ❻ ❼
みんな大好きStep Functions ハマった点 • IAM Identity Centerユーザー削除をトリガーにできない • Map Stateの中にあるStateのCatcherでMapを抜けられない
• DynamoDB のフルエクスポートに非常に時間がかかる • 作ったばかりのDynamoDBは消せない • APIがすぐスロットリングする • エクスポネンシャルバックオフの罠
IAM Identity Centerユーザー削除でのトリガー不可 背景と原因 • GoogleグループとIAM Identity Centerでユーザー同期 • IAM
Identity Centerに同期されたユーザー情報で QSユーザープロビジョニング • Googleグループから外されたユーザーは IAM Identity Centerで削除されるので それをトリガーにState Machine起動したかった
IAM Identity Centerユーザー削除でのトリガー不可 背景と原因 • IICのDeleteUserログを確認するとuserIdがUUIDチックな... • QuickSight側のユーザー情報にはIICのユーザーIDが 関連づけられていない •
userIdからIICユーザー名を確認しようにも 既に削除されてるので確認できない
IAM Identity Centerユーザー削除でのトリガー不可 解決・回避策・工夫した点 • 削除対象者はわかっているのでcsvファイルにしてS3に置く • 削除対象リストをMap Stateで読み込んで処理するようにした •
削除タイミングは月1回程度なのでState Machineの起動は マネコンから手動実行するようにした • 作業者はAWSに詳しくないのでマネコン利用想定で 画像付きのわかりやすい手順書を作成
Map Stateの中のCatcherでMapを抜けられない 背景と原因 • 削除対象csvを作るのは人間なので間違いは起きる • QuickSightユーザー名はメールアドレスを元にしている • csv中のメールアドレスのタイプミス・全角 •
csvを作ってからQS管理画面で手動で消してるかも • QSユーザー削除前に存在確認をしたい • 存在確認OKの場合にQS:DeleteUserをしたい
Map Stateの中のCatcherでMapを抜けられない 背景と原因 • CatcherのFallback stateのプルダウンに Map Stateの外のStateが出てこないので選べない
Map Stateの中のCatcherでMapを抜けられない 解決・回避策・工夫した点 • 存在確認できなかったユーザーは作業者に伝えたいので ログとして残す必要がある • CloudWatch LogsやStep FunctionsのMap
Run Executionsを 作業者に確認してもらうのは厳しい • 存在確認できなかったユーザー情報とエラー内容を DynamoDBに貯めて最後にS3へファイル出力させる • Map State内では貯めるだけにしてS3出力は最後に • Map内なのでDynamoDB:PutItemのStateへFallback可能
背景と原因 • 存在しないユーザーを3ユーザー用意してテストしたら... • エクスポートするのに30分くらいかかった...💤 • 一発目の約900名削除時にどこまで間違えるか...? DynamoDB のフルエクスポートに非常に時間がかかる
解決・回避策・工夫した点 • 諦めてLambdaでエクスポートするようにした • プログラミングは苦手なので全力で他人に頼るムーブ • クラメソさんの記事で良さそうなのがあったので 参考にさせていただきましたありがとうございます!! DynamoDB のフルエクスポートに非常に時間がかかる
https://dev.classmethod.jp/articles/aws-lambda-dynamodb-csv/
背景と原因 • テストで初回の大量削除後の月次削除時の想定で 10ユーザー程度の削除パターンを試したら... • DynamoDb.ResourceInUseExceptionが発生 • DynamoDB:PutItemがないパターンでも発生するので 作成直後に削除はできなさそう 作ったばかりのDynamoDBは消せない
解決・回避策・工夫した点 • Retrierでインターバルを2秒→30秒にした • リトライ回数やバックオフレートはデフォルトのまま 作ったばかりのDynamoDBは消せない
背景と原因 • 一発目の削除は約900ユーザーで大量なので 1ユーザーずつ処理はしたくない • Map Run内で並列実行すると100並列程度でも API実行がスロットリングする • LambdaはTooManyRequestsException
• QuickSightはThrottlingException APIがすぐスロットリングする
解決・回避策・工夫した点 • Retrierでエクスポネンシャルバックオフさせた • リトライ間隔を指数関数的に伸ばしていく APIがすぐスロットリングする
背景と原因 • 本番一発目の削除時に3日経っても終わらなかった • リトライ時にスロットリングが発生し18回リトライ • Map Runで実行中のもののリトライ時刻と前回実行時との 時間差を算出した結果次回リトライ予定時刻が3日後 さらに次は6日後となる計算
エクスポネンシャルバックオフの罠 中略
解決・回避策・工夫した点 • Retrierのエクスポネンシャルバックオフにジッター処理 • リトライ間隔をランダム化することで 再スロットリングを防ぐ • Map Stateの並列実行数の上限を設定 •
並列実行数をMAX100にして何度もリトライが 発生するようなことにならないようにした エクスポネンシャルバックオフの罠
Reader約2200ユーザーを 約1200ユーザーへ削減 無事に大量削除完了
5/1にAWSから届いたお知らせ
みんな大好きStep Functions まとめ • API実行時にはスロットリングに気を付ける • CatcherとRetrierでのエラーハンドリングは大事 • APIではどうしても無理な場合はLambdaがんばる •
最近は生成AIに書いてもらうこともできますし... • Map Stateでは並列実行数の上限を設定する • API実行時のスロットリング誘発を防ぐ • エクスポネンシャルバックオフは過信しない • Jitterを付けるとリトライのタイミングが集中しない • プログラミングが苦手な人でも遜色のないものを作れる
みんな大好きStep Functions まとめ • API実行時にはスロットリングに気を付ける • CatcherとRetrierでのエラーハンドリングは大事 • APIではどうしても無理な場合はLambdaがんばる •
最近は生成AIに書いてもらうこともできますし... • Map Stateでは並列実行数の上限を設定する • API実行時のスロットリング誘発を防ぐ • エクスポネンシャルバックオフは過信しない • Jitterを付けるとリトライのタイミングが集中しない • プログラミングが苦手な人でも遜色のないものを作れる
None