SAM × Dockerでサーバーレス開発が超捗った話
by
ゆっきー
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
AWS SAM × Dockerで サーバーレス開発が超捗った話 チームラボ株式会社 ゆっきー 2022年8月9日 JAWSコンテナ支部 初心者編 #7
Slide 2
Slide 2 text
アジェンダ ● 自己紹介 ● 開発中のアプリとサーバーレスアーキテクチャ採用の理由 ● 初期の開発環境 ● 初期の環境の問題点 ● AWS SAMとは? ● 改善点 ● 現状の課題 ● まとめ 2
Slide 3
Slide 3 text
自己紹介 ● 吉野敬太郎 (ゆっきー) ● チームラボ株式会社 パッケージチーム ● 新卒1年目(2022新卒) ● 学生団体のお手伝いとかしてる @Yu_yukk_Y 3 ※当LTで話す内容、及び本資料とその内容は チームラボ株式会社が行っている全ての活動とは関係ございません。
Slide 4
Slide 4 text
開発中のアプリとサーバーレスアーキテクチャ採用の理由 ● Nexus Square ● 出身大学の学生間の 情報格差を無くすアプリ(最初はQA) ● 学生団体Nexus Squareが開発・運営 ● 今月リリース予定 4
Slide 5
Slide 5 text
開発中のアプリとサーバーレスアーキテクチャ採用の理由 ● 利用者数の上限が低い (最大3000人程度) ● 開発メンバーが少ない (現状コード書いてるのは2人) ● サーバー運用に常時コミット出来ない ● お金もない 従量課金・サーバーの管理不要な サーバーレスアーキテクチャが合っている 5
Slide 6
Slide 6 text
現状のアーキテクチャ(ざっくり) フロントエンド QAサーバ メタデータサーバ 6
Slide 7
Slide 7 text
初期の開発環境 Github Actions とりあえず Githubにpush テスト コンテナビルド デプロイ (AWS CLI) 残りのリソースは 手動で構築 7 Lambdaの コードのみ更新
Slide 8
Slide 8 text
初期の環境の問題点 - ローカルで試せない ● 動作確認は単体テスト頼り ○ 全てのソースコードにわざわざmain関数を書いて一つずつロー カル実行(×Docker) ○ pytestの自動単体テスト ● 本当に動くのかデプロイするまでわからない ● フロントの開発用ローカルサーバは別途用意(Fast API) 8
Slide 9
Slide 9 text
初期の環境の問題点 - コンテナの良さを活かしきれてない ● 開発にコンテナを使った理由は以下の通り ○ LambdaへのコンテナデプロイはZipファイルアップロードよりも 楽だった ○ CI / CDとの相性もよかった ● 環境ごとに差分なく実行できる、などの メリットを活かしきれていない 9
Slide 10
Slide 10 text
初期の環境の問題点 - Lambdaのコード以外は手動更新 ● Lambdaに適応するIAM Policy、API Gatewayの各種設定、、など など、都度手動で設定する必要あり ● Blue / Greenデプロイと相性悪い ● 開発初期の今はいいけど今後どうしよう、、? 10
Slide 11
Slide 11 text
そこで、AWS SAMを導入してみた 11
Slide 12
Slide 12 text
AWS SAMとは? ● サーバーレスアプリケーション構築用のオープンソースフレーム ワーク ● Lambda、API Gatewayといったサーバーレスリソースを迅速にデ プロイできる ● IAMポリシーとかも管理・作成できる! ● APIのローカル実行も可能! コンテナのビルド・デプロイも 自動でやるよ!! ※著作権的に載せなかった、ちゃんとした AWS SAMのキャラクターはこちら 12
Slide 13
Slide 13 text
SAM導入後の開発環境 Github Actions ローカルで試してから Githubにpush テスト ビルド&デプロイ (基本SAM) これらは 他のCFnテンプレートで 管理 13
Slide 14
Slide 14 text
改善点 - ローカルでAPIが実行できるようになった ● リポジトリにpushする前に動作確認ができるようになった ○ ローカルでは、Docker Composeで 別途DynamoDB localのコンテナを立てておく ● 精神的安定度が増した 14
Slide 15
Slide 15 text
改善点 - ローカルとデプロイ先で差分ない実行環境 ● ローカルでもコンテナビルド&実行 ○ Lambda用のimageを自動でビルド&実行 ○ デプロイ先と差分のないAPI実行が可能に ○ 大量のDockerfileを楽々管理 ● コンテナのメリットを活かしきれる 15
Slide 16
Slide 16 text
改善点 - Lambdaのコード以外も一括更新できるように ● LambdaのIAMポリシーやAPI Gatewayの各種設定も 一括で更新できるようになった ● 今までの苦労はいったい、、? 16
Slide 17
Slide 17 text
現状の課題 - Blue/Greenデプロイにエイリアスが使えない ● 通常、Lambdaはエイリアスという機能を用いて バージョン管理や開発用・本番用バージョンを管理できる ● 、、が、SAMだと上手く使えない ○ CloudFormationのテンプレートが競合するため バージョンごとにLambda, API Gatewayを作成する Cognito, DBなどはSAMで管理しない 現状の対策 17
Slide 18
Slide 18 text
現状の課題 - 手元で簡単にデプロイ出来てしまう ● ローカルからコマンド一発で簡単にデプロイできて便利 ○ だが、一方で思わぬ事故に繋がる可能性も、、 デプロイはGithub Actions経由で デプロイ専用のIAM ロールを用いる(OIDC) 開発用IAMユーザにCloudFormationの制限を加える 現状の対策 18
Slide 19
Slide 19 text
まとめ ● AWS SAMの導入で開発環境が大きく改善した ○ ローカルでコンテナを用いたAPI実行が簡単にできるようになっ た ○ LambdaとAPI Gateway、およびその周辺リソースが管理できる ようになった ● 運用していく中でまた気づくこともあるかもしれない ○ まずは運用頑張る、、! 19