Slide 1

Slide 1 text

情シスにはStepFunctionsが 強力な味方になるのではないか説 JAWS-UG情シス支部 #30 2024/04/15 生活協同組合コープさっぽろ 山﨑 奈緒美

Slide 2

Slide 2 text

AWS SAMURAI 2015 JAWS-UGアーキテクチャ専門支部 JAWS-UG情シス支部 生活協同組合コープさっぽろ デジタル推進本部 システム企画部 インフラチーム 山﨑 奈緒美 ご挨拶と自己紹介 大阪出身。 就職で上京し、ソフトハウスでインフラエンジニア 地図情報システム開発会社でひとり情シス 旅行会社の情シス部門でクラウド担当 2020年9月に東京から札幌へ移住し10月よりコープさっぽろへJOIN。 AWSのことならなんでも担当。 @nao_spon I ♡ Route53 IAM Organizations 夏はロードバイク、冬はスノボしてます。仲間募集中!

Slide 3

Slide 3 text

生活協同組合コープさっぽろについて 設立年月日 1965年7月18日 組合員数 197万人 247万世帯(組合員数÷北海道内世帯数 80%) 事業エリア 北海道179市町村(35市 129町 15村) 出資金額 873億円 総事業高 3,140億円 職員数 14,743名(契約職員・パートアルバイト・関連会社含む) 店舗数 108店舗 移動販売車 94台(133市町村) 宅配物流センター 41センター、10デポ、車両1,300台 配食工場 6工場(札幌、函館、苫小牧、旭川、釧路、帯広) 生産工場 7工場 ※2023年3月20日現在 


Slide 4

Slide 4 text

北海道で生きることを誇りと喜びにする 3つのつなぐ 福祉活動 文化教室 組合員活動 葬祭事業 旅行事業 物流事業 店舗事業 移動販売 宅配事業 配食・給食 食育 食品製造 共済事業 エネルギー 子育て支援 環境活動 リサイクル フードバンク 育英奨学金 と 人 人 をつなぐ と 人 食 をつなぐ と 人 未来 をつなぐ

Slide 5

Slide 5 text

AWS Step Functions 触ったことある人?

Slide 6

Slide 6 text

Step Functionsに対するイメージ ● アプリ開発の人が触るサービス ● WEBシステム/サイトの裏側で使うサービス ● Lambdaをつなげていくサービス ○ Lambdaを書かないといけない ● なんか難しそう ● (情シス / インフラ)な自分には関係なさそうなサービス ● 開いてみたけどワケわからなくてそっ閉じした

Slide 7

Slide 7 text

Step Functionsに対するイメージ

Slide 8

Slide 8 text

Step Functionsに対するイメージ

Slide 9

Slide 9 text

やっぱワイには 関係ないやつやん

Slide 10

Slide 10 text

Lambdaを書かなくても AWS APIを直接呼び出せる

Slide 11

Slide 11 text

いろいろなAPIを直接呼び出せる

Slide 12

Slide 12 text

IAM Identity Centerと QuickSightユーザーの プロビジョニングを Step Functionsで実装してみた

Slide 13

Slide 13 text

課題の背景 • 2021年からQuickSightを使っている • IAM Identity Centerを使用してSSOログイン • IdpはGoogle WorkspaceでカスタムSAMLアプリを使用 • 8部門でQuickSightを使用しており横展開を推進中 • ユーザー数は約2200人→横展開進めばもっと増える • QuickSightでは自部門の分析やダッシュボードしかみれないよう にしたい

Slide 14

Slide 14 text

当時の課題点(2023年2月ごろ) • IAM Identity Centerを経由してQuickSightへのSSOログインはで きるがQuickSightユーザーの自動作成ができない • QuickSightユーザーの自動作成ができないのでQuickSightグルー プへの関連付けもできない

Slide 15

Slide 15 text

Idp/IAM Identity Center/QuickSight

Slide 16

Slide 16 text

QuickSigitのユーザープロビジョニング 2つの方式を要件によって使い分ける • 管理者による事前プロビジョニング • ユーザーが初回ログインを行う前にグループにあらかじめ追加するといった ユーザーの権限周りの個別設定を事前に行う必要がある • QuickSightの利用を行うにあたって管理者の承認が必要 • ユーザー自身による自己プロビジョニング • 組織内の多数のユーザーに対して自由にQuickSightの利用を開始させたい • 各種権限付与は自己プロビジョニング後に非同期処理で権限付与を行うか、 申請ベースで管理者が後から行う形でも運用上問題ない 引用元: Amazon QuickSight における シングルサインオンの設計と実装 AWS Black Belt Online Seminar https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_AmazonQuickSight-SSO_0228_v1.pdf

Slide 17

Slide 17 text

どっちもやりたくない笑

Slide 18

Slide 18 text

QuickSightユーザーの 管理者による事前 プロビジョニングを Step Functionsで実装してみた

Slide 19

Slide 19 text

Step Functionsでの実装 • EventBridgeからStep Functionsを起動する • QuickSight側で追加すべきグループも取得したいので aws.sso-directoryのAddMemberToGroupイベントをトリガー指定 • EventBridgeのターゲットでStep Functionsを指定する • ターゲット指定はStep Functionsができてから

Slide 20

Slide 20 text

Step Functionsでの実装

Slide 21

Slide 21 text

Step Functionsでの実装 • IdpからSCIMでIAM Identity Centerにユーザー追加または グループ追加されたらスタート • ユーザー情報とグループ情報を取得する • 同時に複数のユーザーが追加されることを考慮して並列実行

Slide 22

Slide 22 text

Step Functionsでの実装 • QuickSightユーザーIDをLambdaで生成 • どうしてもLambdaにならざるを得なかった • /<メールアドレス> • ユーザー情報取得結果を次のStepへ渡す時に 文字列連結する方法がわからなかった

Slide 23

Slide 23 text

Step Functionsでの実装 • Lambdaの結果が200かどうか判定 • エラーだったらStep Functionsの結果をFailで終わらせる • 200だったらQuickSightDescribeUserをしてユーザー情報を取得

Slide 24

Slide 24 text

Step Functionsでの実装 • QuickSightユーザーが存在しているかを判定 • 存在していない場合 • IAM Identity Centerから取得したグループ情報とLambdaで生成したユーザーIDを使って QuickSightユーザー作成しグループ追加ステップへ遷移 • 存在している場合はグループ追加ステップへ遷移

Slide 25

Slide 25 text

Step Functionsでの実装 • QuickSightグループへの追加 • IAM Identity Centerから取得したグループ情報により それぞれのQuickSightグループへの追加を行う

Slide 26

Slide 26 text

Step Functionsでの実装 • ハマったこと • 値を次Stepへ渡す際に文字列を連結する方法がわからなかった • 初めての実行時、当時いた約1600人分のSSO.DescribeUserと SSO.DescribeGroupが走ってAPIがコケた • Stepでエラーハンドリングができる • エラーハンドリングではエクスポネンシャルバックオフに対応している Identitystore.ThrottlingExceptionが発生したらエラーハンドリング

Slide 27

Slide 27 text

Step Functionsでの実装 • ハマったこと • QuickSightDescribeUserもコケる • SSO.DescribeXXと同じくエクスポネンシャルバックオフ • QuickSightユーザーが存在していない場合(=新規作成)時もコケる • Exceptionが起きるとStep Functions自体がFailとなってしまう • QuickSight.ResourceNotFoundException のCatcher処理で ユーザー存在判定Stepへ流すようにした

Slide 28

Slide 28 text

Step Functionsでの実装 • つらみな点 • 利用部門が増えると・・・ • グループ追加させるStepを部門×Author、Reader分増やす必要がある • Lambdaの修正も必要

Slide 29

Slide 29 text

Step Functions稼働後にアップデートきた

Slide 30

Slide 30 text

Step Functions稼働後にアップデートきた 担当SAさん 担当SAさん

Slide 31

Slide 31 text

情シス的Step Functions • 使えるAPIはたくさんあるので何かしら使えるものがある • 手作業でしていてしんどいことは全部Step Functionsに任せよう

Slide 32

Slide 32 text

Cloud in the Camp 2024 札幌 Horippa 7/13-14 https://connpass.com/event/315715/

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

ありがとうございました https://www.wantedly.com/companies/company_7505384