SAM × Dockerでサーバーレス開発が超捗った話
by
ゆっきー
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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