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

CDK で実現する お手軽で安全な Lambda 管理

shukim
April 28, 2022

CDK で実現する お手軽で安全な Lambda 管理

nakanoshima.dev#25 (https://nakanoshima-dev.connpass.com/event/243993/) で発表した、AWS Lambda の管理を AWS CDK を利用して行うためのスタートガイドです。セッション中に Live Demo として行った箇所は補足資料を追加しています。

shukim

April 28, 2022
Tweet

Other Decks in Programming

Transcript

  1. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    © 2022, Amazon Web Services, Inc. or its affiliates. CDK で実現する お手軽で安全な Lambda 管理 Shuhei Kimura N A K A N O S H I M A . D E V Solution Architect Amazon Web Services Japan
  2. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    このセッションは…… • AWS Lambda のコード管理に悩みがある方 • IaC という単語は聞くものの、利用できていない方 • SAM などのツールを利用しているが、 CDK に馴染みがない方 におすすめです。 ※ Lambdaの説明は省きます。TypeScriptの基本的な知識があると理解が捗ります 2
  3. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    自己紹介 氏名: 木村 秀平 (Shuhei Kimura) 役職: ソリューションアーキテクト(SA) 経歴: 大阪の南の方産まれ、大阪の北の方育ち 好きなAWSサービス: AWS Lambda Amazon S3 3
  4. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    Agenda • Lambda 管理の課題 • Cloud Development Kit (CDK) の紹介 • CDK を利用した Lambda 開発のワークフロー 4
  5. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    © 2022, Amazon Web Services, Inc. or its affiliates. Lambda管理の課題 5
  6. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    コード管理の悩み 6 Lambda にはオンラインエディタがあり、デバッグなどに便利 コードの管理機能はほぼ無く、別途 git などの VCS が必要 → 手元のコードと乖離する
  7. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    インフラ設定管理の悩み 7 Lambda はタイムアウトやメモリサイズ、権限など各関数固有の設定が可能 各関数の設定を適宜変更する必要がある → 構成を把握しきれない
  8. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    IaC による解決 Infrastructure as Code を活かして、 インフラ設定も、アプリケーションコードも、自分のバージョン管理下に! → 乖離の検出・削減、容易なロールバック、一貫した管理、などなど 8 AWS Lambda Lambda function IAM, Memory, Timeout... アプリケーションコード こちらの設定を 真とする
  9. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    IaC ツールは様々 世の中には様々な IaC ツールがあるが、今回は AWS CDK に絞って紹介 AWS が提供しているものだけでも3種類ある (CloudFormation, SAM, CDK) 9 AWS CloudFormation AWS Serverless Application Model (AWS SAM) AWS Cloud Development Kit (AWS CDK) AWS Cloud デプロイ
  10. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    © 2022, Amazon Web Services, Inc. or its affiliates. CDK の紹介 10
  11. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    基礎知識 (CDK in TypeScript) TypeScript で構築したいリソースを記述 (後ほど Demo で見てゆきます) ループや条件分岐も利用可能 関数化やライブラリ化で、再利用性の向上が狙える 11 https://github.com/aws/aws-cdk
  12. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    CDK のツールセット CLI とライブラリ (aws-cdk-lib) が提供されている CLI はデプロイを始めとする基本操作に利用 ライブラリはリソース定義のためコード中で利用 12
  13. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    CDK 開発の流れ まずはテンプレートからコードを作成 コードを改変 -> デプロイを繰り返す 13
  14. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    © 2022, Amazon Web Services, Inc. or its affiliates. CDK を利用した Lambda 開発のワークフロー 14
  15. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    前提 今回は、小規模なプロジェクトをイメージ 言語は Lambda、CDK 共に TypeScript を利用 PythonやJavaなどでも提供されています 15
  16. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    Lambda 関数の作成 なんとこれ1行 ファイル名の変更や、メモリの指定などのオプションも、入力補完や型に従うと 自然に記述できる 17
  17. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    Bundling 機能 Lambda には TypeScript がそのまま動くランタイムは無いため、 TypeScript -> JavaScript へ変換が必要 aws_lambda_nodejs モジュールを使うと、自動で必要なパッケージだけ取り込 んだ .js ファイルに変換しデプロイする 他の言語でも、事前ビルドに同じ仕組みを利用可能 (詳細は Bundling に関する記事へ) 18
  18. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    Lambda のアプリケーションコード 通常通り作成。TypeScript の型定義を利用 19 npm install --save @types/aws-lambda
  19. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    権限管理 複雑になりがちな権限管理は CDK にお任せ 20
  20. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    Lambda のテスト用デプロイ 通常の `cdk deploy` では、各種チェックのため1分以上時間がかかる `cdk watch` では、高速に Lambda コードの変更をデプロイ可能 (ただし、開発環境でのみ利用すること!) 21
  21. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    Lambda コードのテスト テスト方法はいくつかあるが、下に行くほどテスト範囲が狭い代わりに高速 • 実際にデプロイしてコンソールでテストする • SAM Local など、Lambda の docker イメージを使ってテスト • 言語の機能を使ったテスト (e.g. Jest、junit、go test) 開発速度向上のため、可能な限り下に寄せてゆきたい 22 速く狭い 遅く広い
  22. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    まとめ アプリケーションコードだけでなく、インフラ設定もバージョン管理すると便利 CDK は便利な機能が多く、 Lambda との親和性も高い 特に TypeScript との相性が良い お手軽さと安全性を兼ね揃えた仕組みを作ってゆきましょう! Pipeline には CDK Pipeline もあります 24
  23. NAKANOSHIMA.DEV#25 © 2022, Amazon Web Services, Inc. or its affiliates.

    Appendix – お役立ちリンク集 • AWS CDK • TypeScript CDKライブラリのdoc • aws_lambda_nodejsモジュールのdoc • Lambdaの型定義(Definitely Typed) 25 npm install --save @types/aws-lambda