Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SAM × Dockerでサーバーレス開発が超捗った話

SAM × Dockerでサーバーレス開発が超捗った話

個人活動でやってるサーバーレスアプリケーションの開発をSAMに置き換えたら、開発環境が激変!?実際にどんな変化があったのか紹介します!

ゆっきー

August 09, 2022
Tweet

Other Decks in Programming

Transcript

  1. AWS SAM × Dockerで
    サーバーレス開発が超捗った話
    チームラボ株式会社 ゆっきー
    2022年8月9日 JAWSコンテナ支部 初心者編 #7

    View full-size slide

  2. アジェンダ
    ● 自己紹介
    ● 開発中のアプリとサーバーレスアーキテクチャ採用の理由
    ● 初期の開発環境
    ● 初期の環境の問題点
    ● AWS SAMとは?
    ● 改善点
    ● 現状の課題
    ● まとめ
    2

    View full-size slide

  3. 自己紹介
    ● 吉野敬太郎 (ゆっきー)
    ● チームラボ株式会社 パッケージチーム
    ● 新卒1年目(2022新卒)
    ● 学生団体のお手伝いとかしてる
    @Yu_yukk_Y
    3
    ※当LTで話す内容、及び本資料とその内容は
     チームラボ株式会社が行っている全ての活動とは関係ございません。

    View full-size slide

  4. 開発中のアプリとサーバーレスアーキテクチャ採用の理由
    ● Nexus Square
    ● 出身大学の学生間の
    情報格差を無くすアプリ(最初はQA)
    ● 学生団体Nexus Squareが開発・運営
    ● 今月リリース予定
    4

    View full-size slide

  5. 開発中のアプリとサーバーレスアーキテクチャ採用の理由
    ● 利用者数の上限が低い
    (最大3000人程度)
    ● 開発メンバーが少ない
    (現状コード書いてるのは2人)
    ● サーバー運用に常時コミット出来ない
    ● お金もない
    従量課金・サーバーの管理不要な
    サーバーレスアーキテクチャが合っている 5

    View full-size slide

  6. 現状のアーキテクチャ(ざっくり)
    フロントエンド
    QAサーバ
    メタデータサーバ
    6

    View full-size slide

  7. 初期の開発環境
    Github
    Actions
    とりあえず
    Githubにpush
    テスト
    コンテナビルド
    デプロイ
    (AWS CLI)
    残りのリソースは
    手動で構築
    7
    Lambdaの
    コードのみ更新

    View full-size slide

  8. 初期の環境の問題点 - ローカルで試せない
    ● 動作確認は単体テスト頼り
    ○ 全てのソースコードにわざわざmain関数を書いて一つずつロー
    カル実行(×Docker)
    ○ pytestの自動単体テスト
    ● 本当に動くのかデプロイするまでわからない
    ● フロントの開発用ローカルサーバは別途用意(Fast API)
    8

    View full-size slide

  9. 初期の環境の問題点 - コンテナの良さを活かしきれてない
    ● 開発にコンテナを使った理由は以下の通り
    ○ LambdaへのコンテナデプロイはZipファイルアップロードよりも
    楽だった
    ○ CI / CDとの相性もよかった
    ● 環境ごとに差分なく実行できる、などの
    メリットを活かしきれていない
    9

    View full-size slide

  10. 初期の環境の問題点 - Lambdaのコード以外は手動更新
    ● Lambdaに適応するIAM Policy、API Gatewayの各種設定、、など
    など、都度手動で設定する必要あり
    ● Blue / Greenデプロイと相性悪い
    ● 開発初期の今はいいけど今後どうしよう、、?
    10

    View full-size slide

  11. そこで、AWS SAMを導入してみた
    11

    View full-size slide

  12. AWS SAMとは?
    ● サーバーレスアプリケーション構築用のオープンソースフレーム
    ワーク
    ● Lambda、API Gatewayといったサーバーレスリソースを迅速にデ
    プロイできる
    ● IAMポリシーとかも管理・作成できる!
    ● APIのローカル実行も可能!
    コンテナのビルド・デプロイも
    自動でやるよ!!
    ※著作権的に載せなかった、ちゃんとした AWS SAMのキャラクターはこちら
    12

    View full-size slide

  13. SAM導入後の開発環境
    Github
    Actions
    ローカルで試してから
    Githubにpush
    テスト
    ビルド&デプロイ
    (基本SAM)
    これらは
    他のCFnテンプレートで
    管理
    13

    View full-size slide

  14. 改善点 - ローカルでAPIが実行できるようになった
    ● リポジトリにpushする前に動作確認ができるようになった
    ○ ローカルでは、Docker Composeで
    別途DynamoDB localのコンテナを立てておく
    ● 精神的安定度が増した
    14

    View full-size slide

  15. 改善点 - ローカルとデプロイ先で差分ない実行環境
    ● ローカルでもコンテナビルド&実行
    ○ Lambda用のimageを自動でビルド&実行
    ○ デプロイ先と差分のないAPI実行が可能に
    ○ 大量のDockerfileを楽々管理
    ● コンテナのメリットを活かしきれる
    15

    View full-size slide

  16. 改善点 - Lambdaのコード以外も一括更新できるように
    ● LambdaのIAMポリシーやAPI Gatewayの各種設定も
    一括で更新できるようになった
    ● 今までの苦労はいったい、、?
    16

    View full-size slide

  17. 現状の課題 - Blue/Greenデプロイにエイリアスが使えない
    ● 通常、Lambdaはエイリアスという機能を用いて
    バージョン管理や開発用・本番用バージョンを管理できる
    ● 、、が、SAMだと上手く使えない
    ○ CloudFormationのテンプレートが競合するため
    バージョンごとにLambda, API Gatewayを作成する
    Cognito, DBなどはSAMで管理しない
    現状の対策
    17

    View full-size slide

  18. 現状の課題 - 手元で簡単にデプロイ出来てしまう
    ● ローカルからコマンド一発で簡単にデプロイできて便利
    ○ だが、一方で思わぬ事故に繋がる可能性も、、
    デプロイはGithub Actions経由で
    デプロイ専用のIAM ロールを用いる(OIDC)
    開発用IAMユーザにCloudFormationの制限を加える
    現状の対策
    18

    View full-size slide

  19. まとめ
    ● AWS SAMの導入で開発環境が大きく改善した
    ○ ローカルでコンテナを用いたAPI実行が簡単にできるようになっ

    ○ LambdaとAPI Gateway、およびその周辺リソースが管理できる
    ようになった
    ● 運用していく中でまた気づくこともあるかもしれない
    ○ まずは運用頑張る、、!
    19

    View full-size slide