Slide 1

Slide 1 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS SAM (Serverless Application Model) Updates S e r v e r l e s s M e e t u p J a p a n V i r t u a l # 2 0 - A W S r e : C a p

Slide 2

Slide 2 text

2 当セッションの概要 l AWS re:Invent 2021 および その前後から、2022年現在 時点までの、AWS SAM 関連の主なアップデートをご紹介 します l ご注意 • AWS SAM⾃体の詳細 や 関連サービス(AWS Lambda 等) の解説 は当セッションには含まれていないため、過去の AWS Black Belt Online Seminar をご視聴ください • https://aws.amazon.com/jp/aws-jp-introduction/

Slide 3

Slide 3 text

3 当セッションのAgenda l AWS SAM の 概要 〜おさらい〜 l AWS SAM Pipelines l AWS SAM Accelerate (Preview/beta) ※DEMO予定 l AWS SAM CLI と AWS CDK のローカルテスト連携

Slide 4

Slide 4 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 5

Slide 5 text

5 AWS SAM とは? AWSでサーバーレスアプリケーションを構築するための オープンソースのフレームワーク → 2つの要素で構成 AWS SAM transform AWS SAM CLI • リソースとイベントソース マッピングを表現するための 短縮構⽂ • サーバーレスアプリケーショ ンのコード (IaC) としての インフラストラクチャを提供 • サーバーレスアプリケーショ ンのローカル開発、デバッグ、 ビルド、パッケージ化、デプ ロイのためのツールを提供

Slide 6

Slide 6 text

6 AWS SAM テンプレート AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Resources: GetProductsFunction: Type: AWS::Serverless::Function Properties: CodeUri: src/ Handler: app.handler Runtime: python3.9 Policies: - DynamoDBReadPolicy: TableName: !Ref ProductTable Events: GetProductsEvent: Type: Api Properties: Path: /products Method: get ProductTable: Type: AWS::Serverless::SimpleTable わずか20⾏で表現 AWS Lambda 関数 AWS Identity and Access Management (IAM) ロール Amazon API Gateway REST API Amazon DynamoDB テーブル

Slide 7

Slide 7 text

7 AWS SAM テンプレート AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Resources: GetProductsFunction: Type: AWS::Serverless::Function Properties: CodeUri: src/ Handler: app.handler Runtime: python3.9 Policies: - DynamoDBReadPolicy: TableName: !Ref ProductTable Events: GetProductsEvent: Type: Api Properties: Path: /products Method: get ProductTable: Type: AWS::Serverless::SimpleTable AWS Cloud API Gateway Lambda 関数 DynamoDB テーブル IAMロール これが こうなる

Slide 8

Slide 8 text

8 AWS SAM テンプレート AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Resources: GetProductsFunction: Type: AWS::Serverless::Function Properties: CodeUri: src/ Handler: app.handler Runtime: python3.9 Policies: - DynamoDBReadPolicy: TableName: !Ref ProductTable Events: GetProductsEvent: Type: Api Properties: Path: /products Method: get ProductTable: Type: AWS::Serverless::SimpleTable { "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "GetProductsFunction": { "Properties": { "Code": { "S3Bucket": "bucket", "S3Key": "value" }, "Handler": "app.lambda_handler", "Role": { "Fn::GetAtt": [ "GetProductsFunctionRole", "Arn" ] }, "Runtime": "python3.9", "Tags": [ { "Key": "lambda:createdBy", "Value": "SAM" } ] }, "Type": "AWS::Lambda::Function" }, "GetProductsFunctionRole": { "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Action": [ "sts:AssumeRole" ], "Effect": "Allow", "Principal": { ... CloudFormation 20 ⾏ 188 ⾏

Slide 9

Slide 9 text

9 AWS SAM: AWS CloudFormation の 抽象化 AWS CloudFormation AWS SAM AWS SAM は CloudFormation をベースとし、その定義詳細を抽象化

Slide 10

Slide 10 text

10 AWS SAM サーバーレスリソース 7serverless resource types AWS::Serverless::Function AWS::Serverless::Api AWS::Serverless::HttpApi AWS::Serverless::SimpleTable AWS::Serverless::LayerVersion AWS::Serverless::Application AWS::Serverless::StateMachine SAM Version 2016-10-31

Slide 11

Slide 11 text

11 AWS SAM サーバーレスリソース: Function GetProductsFunction: Type: AWS::Serverless::Function Properties: Description: Gets product information CodeUri: src/ Handler: app.handler Runtime: python3.9 MemorySize: 1024 Timeout: 15 Tracing: Active Architectures: - arm64 Policies: - DynamoDBReadPolicy: TableName: !Ref ProductTable Environment: Variables: TABLE_NAME: !Ref ProductTable Events: GetProductsEvent: Type: Api Properties: Path: /products Method: get Lambda関数で以下の値が指定可能に x86_64 or arm64 (デフォルト値 は x86_64) Architectures オプションのサポート N ew ! ※併せて AWS::Lambda::LayerVersionリソースにおいても CompatibleArchitectures オプションが追加され、 レイヤーが持つ互換性タイプをリスト形式で指定可能に (デフォルト値は x86_64)

Slide 12

Slide 12 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 2021/11/5 G A

Slide 13

Slide 13 text

13 CI/CDパイプライン SAM利⽤時: これまでの開発フロー Build ソースコード 開発者 コードリポジトリ template.yaml (SAMテンプレート) Source sam build Deploy Test sam deploy はパイプライン内の要素 sam local SAMを組み込んだCI/CDパイプラインが必要な場合、その整備は別途必要 CI/CDパイプライン 開発者 パイプライン開発 SAM

Slide 14

Slide 14 text

14 CI/CDパイプライン このときの悩み ソースコード 開発者 コードリポジトリ CI/CDパイプライン 開発者 パイプライン開発 template.yaml (SAMテンプレート) Build Source sam build Deploy Test sam deploy sam local → CI/CDパイプライン開発者の必要性とその開発作業 SAM

Slide 15

Slide 15 text

15 CI/CDパイプライン SAM Pipelines ソースコード 開発者 コードリポジトリ CI/CDパイプライン⽤雛形ファイルを⽣成 (例︓CodePipeline⽤CFnテンプレート) template.yaml (SAMテンプレート) > sam pipeline bootstrap > sam pipeline init SAMがパイプライン ⾃体も構成(雛形を⽣成) CloudFormation Build Source sam build Deploy Test sam deploy SAM sam local SAMがパイプラインの雛形を⾃動⽣成 → CI/CDパイプラインまでも含めて開発の⽴ち上げを加速 SAM

Slide 16

Slide 16 text

16 SAM Pipelines: 対応環境 # 対応ソースコードリポジトリ 1 AWS CodeCommit 2 Bitbucket 3 GitHub 4 GutHub Enterprise # 対応CI/CDプロバイダ 1 AWS CodePipeline(&CodeBuild) 2 GitLab CI/CD 3 GitHub Actions 4 Jenkins # 対応パッケージング形式 1 ZIP 2 コンテナ (ECRリポジトリ) 作成するCI/CDパイプラインは、以下の組み合わせで作成可能 (sam pipeline init コマンドで対話的に指定可)

Slide 17

Slide 17 text

17 SAM Pipelines: 対応環境 # 対応ソースコードリポジトリ 1 AWS CodeCommit 2 Bitbucket 3 GitHub 4 GutHub Enterprise # 対応CI/CDプロバイダ 1 AWS CodePipeline(&CodeBuild) 2 GitLab CI/CD 3 GitHub Actions 4 Jenkins # 対応パッケージング形式 1 ZIP 2 コンテナ (ECRリポジトリ) 作成するCI/CDパイプラインは、以下の組み合わせで作成可能 (sam pipeline init コマンドで対話的に指定可)

Slide 18

Slide 18 text

18 SAM Pipelines: GitHub Actions構成 GitHub Actionsの場合、ジョブステップとしてSAM CLIを実⾏する内容の ワークフロー定義 が作成される GitHub Actions Pipeline⽤IAMユーザーの クレデンシャル SAM CLI 1. sam build 2. ロール引受 3. sam package (to 各環境) 4. sam deploy (to 各環境) Pipeline⽤ IAMユーザー クレデンシャル アカウントA︓パイプライン⽤ リージョンX アカウントC︓Prod (本番環境) Dev Pipeline実⾏⽤ ロール Dev CFn実⾏⽤ ロール リージョンY Prod Pipeline実⾏⽤ ロール Prod CFn実⾏⽤ ロール アーティファクト⽤ S3バケット コンテナ⽤ ECRリポジトリ アーティファクト⽤ S3バケット コンテナ⽤ ECRリポジトリ アカウントB︓Dev (開発環境⽤) 参照 ※A〜Cのアカウントを全て同⼀とすることも可能 (Prodアカウントだけ別アカウントにすることも可能) assumeRole可能な 信頼関係を設定

Slide 19

Slide 19 text

19 GitHub Actionsワークフロー構成 https://github.com/aws/aws-sam-cli-pipeline-init-templates.git QuickStartテンプレートで構成されるパイプライン アプリケーション ソースコード GitHub リポジトリ (SAMアプリを格納) template.yaml (SAMテンプレート) .github/workflow/ pipeline.yaml (GitHub Actions⽤ パイプライン内容を定義) GitHub Actions ワークフロー sam initで初期⽣成 sam pipeline init で初期⽣成 .aws-sam/ pipelineconfig.toml (SAM Pipelines設定) sam pipeline bootstrapで⽣成 参照 ?

Slide 20

Slide 20 text

20 GitHub Actionsワークフロー構成

Slide 21

Slide 21 text

21 GitHub Actionsワークフロー構成 (pipeline.yaml) ⽣成される .github/workflow/ pipeline.yaml name: Pipeline on: push: branches: - 'main' - 'feature**' delete: branches: - 'feature**' env: PIPELINE_USER_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} PIPELINE_USER_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} SAM_TEMPLATE: template.yaml TESTING_STACK_NAME: DEV_mystackname TESTING_PIPELINE_EXECUTION_ROLE: arn:aws:iam::123456789012:role/DEV_PiPELINE_ROLE TESTING_CLOUDFORMATION_EXECUTION_ROLE: arn:aws:iam::123456789012:role/DEV_CFN_ROLE TESTING_ARTIFACTS_BUCKET: DEV_MYBUCKET TESTING_IMAGE_REPOSITORY: 123456789012.dkr.ecr..amazonaws.com/DEV_ECR_REPO TESTING_REGION: PROD_STACK_NAME: PROD_mystackname PROD_PIPELINE_EXECUTION_ROLE: arn:aws:iam::123456789012:role/PROD_PIPELINE_ROLE PROD_CLOUDFORMATION_EXECUTION_ROLE: arn:aws:iam::123456789012:role/DEV_CFN_ROLE PROD_ARTIFACTS_BUCKET: PROD_MYBUCKET PROD_IMAGE_REPOSITORY: 123456789012.dkr.ecr..amazonaws.com/PROD_ECR_REPO PROD_REGION: jobs: test: if: github.event_name == 'push' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - run: | # trigger the tests here delete-feature: if: startsWith(github.event.ref, 'feature') && github.event_name == 'delete' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 - uses: aws-actions/setup-sam@v1 - name: Assume the testing pipeline user role uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ env.PIPELINE_USER_ACCESS_KEY_ID }} aws-secret-access-key: ${{ env.PIPELINE_USER_SECRET_ACCESS_KEY }} aws-region: ${{ env.TESTING_REGION }} role-to-assume: ${{ env.TESTING_PIPELINE_EXECUTION_ROLE }} role-session-name: testing-packaging role-duration-seconds: 3600 role-skip-session-tagging: true - name: Delete feature branch stack env: FEATURE_BRANCH_NAME: ${{ github.event.ref }} run: | sam delete \ --stack-name $(echo ${FEATURE_BRANCH_NAME##*/} | tr -cd '[a-zA-Z0-9-]') \ --region ${TESTING_REGION} \ --no-prompts (…以下省略…) 約240⾏ほどの内容 (これをベースに⾃由にカスタマイズ) その GitHubリポジトリ に 「Secret」 を2つ定義 (ワークフ ロー内から変数で利⽤) (例︓AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)

Slide 22

Slide 22 text

22 GitHub Actionsワークフロー – feature系ブランチ アプリケーション ソースコード GitHub リポジトリ (SAMアプリを格納) template.yaml (SAMテンプレート) .github/workflow/ pipeline.yaml (GitHub Actions⽤ パイプライン内容を定義) GitHub Actions ワークフロー sam initで初期⽣成 .aws-sam/ pipelineconfig.toml (SAM Pipelines設定) sam pipeline bootstrapで⽣成 参照 主な処理概要 (feature系ブランチ⽤) • push先ブランチ名が「feature*」の場合、以下を 実⾏して「開発(テスト)環境にデプロイ」 1. actions/checkout@v2 → ソースコードをチェックアウト 2. actions/setup-python@v2 → Python環境をセットアップ 3. aws-actions/setup-sam@v1 → SAM CLIをダウンロード&セットアップ 4. sam build --use-container → SAM CLIでtemplate.yamlを参照してビルド 5. aws-actions/configure-aws-credentials@v1 → 変数を利⽤してPipeline⽤クレデンシャル設定 6. sam deploy → SAM CLIでアプリを開発環境にデプロイ sam pipeline init で初期⽣成

Slide 23

Slide 23 text

23 GitHub Actionsワークフロー – mainブランチ アプリケーション ソースコード GitHub リポジトリ (SAMアプリを格納) template.yaml (SAMテンプレート) .github/workflow/ pipeline.yaml (GitHub Actions⽤ パイプライン内容を定義) GitHub Actions ワークフロー sam initで初期⽣成 .aws-sam/ pipelineconfig.toml (SAM Pipelines設定) sam pipeline bootstrapで⽣成 参照 主な処理概要 (mainブランチ⽤) • push先ブランチ名が「main」の場合、複数job以下 を実⾏して「テスト」→「各環境にデプロイ」 1. actions/checkout@v2 → ソースコードをチェックアウト 2. actions/setup-python@v2 → Python環境をセットアップ 3. aws-actions/setup-sam@v1 → SAM CLIをダウンロード&セットアップ 4. sam build --use-container → SAM CLIでtemplate.yamlを参照してビルド 5. aws-actions/configure-aws-credentials@v1 → 変数を利⽤してPipeline⽤クレデンシャル設定 6. (統合テスト実⾏) & sam pakckageで⽣成 & actions/upload-artifact@v2 → SAMテンプレート等をArtifactにUpload 7. actions/download-artifact@v2 → SAMテンプレートをArtifactからDownload 8. sam deploy → SAM CLIでアプリを本番環境にデプロイ sam pipeline init で初期⽣成

Slide 24

Slide 24 text

24 GitHub Actions - もう⼀⼿間かけましょう! 無くしたい!

Slide 25

Slide 25 text

25 GitHub Actions - OIDC連携(2021/11〜) aws-actions/configure-aws-credentials@v1 がOIDCプロバイダ経由 でのロール引受に対応 (→ GitHub側にクレデンシャル登録が不要に) GitHub リポジトリ GitHub Actionsワークフロー定義 (pipeline.yaml) ジョブステップ1 「IDプロバイダ」 (GitHub Actions⽤) アカウントA︓パイプライン⽤ AWS IAM aws-actions/configure-aws-credentials@v1 ① 引受したいロールAのARNを指定し Web Identityフェデレーション開始 ジョブステップ2 (引受ロールの 権限で動作) SAM CLI ② STS経由で IAMロールA の⼀時 クレデンシャル を取得 ロールA ③ ロールAの権限を持つ ⼀時的なクレデンシャルが返却 ※ご注意1︓SAM Pipelines が⽣成する初期テンプレートでは、このロール引受を利⽤する構成にはなっていないため、変更が必要です ※ご注意2︓ロールの「信頼関係ポリシー」には、必ず引受元リポジトリを限定するためのCondition句を設定ください ロールA 環境変数をセット

Slide 26

Slide 26 text

26 GitHub Actions - OIDC連携(2021/11〜) 無くせた!

Slide 27

Slide 27 text

27 SAM Pipelines: GitHub Actions構成 (まとめ) GitHub Actionsの場合、ジョブステップとしてSAM CLIを実⾏する内容の ワークフロー定義 が作成される GitHub pipeline.yaml内に AWSアクションで ロール引受を指定 SAM CLI 1. sam build 2. ロール引受 3. sam package (to 各環境) 4. sam deploy (to 各環境) Pipeline⽤ IAMロール アカウントA︓パイプライン⽤ リージョンX アカウントC︓Prod (本番環境) Dev Pipeline実⾏⽤ ロール Dev CFn実⾏⽤ ロール リージョンY Prod Pipeline実⾏⽤ ロール Prod CFn実⾏⽤ ロール アーティファクト⽤ S3バケット コンテナ⽤ ECRリポジトリ アーティファクト⽤ S3バケット コンテナ⽤ ECRリポジトリ アカウントB︓Dev (開発環境⽤) assumeRole可能な 信頼関係を設定 ※A〜Cのアカウントを全て同⼀とすることも可能 (Prodアカウントだけ別アカウントにすることも可能) Webフェデレーションでのロール引き受け

Slide 28

Slide 28 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 2021/10/27 Preview

Slide 29

Slide 29 text

29 SAM Accelerate "AWS SAM Accelerate aims to increase infrastructure accuracy for testing with incremental builds, sam sync, and aggregated feedback for developers" "AWS SAM Accelerateの⽬的は、 インクリメンタルビルド、sam sync、 開発者向けの集約されたフィードバック により、 テストのためのインフラの精度を⾼めることです。" https://aws.amazon.com/blogs/compute/accelerating-serverless-development-with-aws-sam-accelerate/

Slide 30

Slide 30 text

30 SAM利⽤時: これまでの開発フロー 開発者 sam build sam deploy ソースコード template.yaml (SAMテンプレート) Amazon API Gateway AWS Lambda AWS Step Functions ⾃動CFnスタック デプロイ/更新 ビルドして デプロイして 待つ コーディングして 作成/更新 SAMアプリケーションの初回デプロイ後、"ソースコード更新のみ" であっても、CloudFormationスタックの更新が必要

Slide 31

Slide 31 text

31 このときの悩み 開発者 ソースコード Amazon API Gateway AWS Lambda AWS Step Functions ⾃動CFnスタック デプロイ/更新 ビルドして デプロイして 待つ コーディングして 待ち時間をもっと短くしたい 作成/更新 sam build sam deploy → 繰り返しの開発/テストではデプロイ時の更新待ち時間が課題に template.yaml (SAMテンプレート)

Slide 32

Slide 32 text

32 SAM sync (Preview / 開発⽤機能) 開発者 sam sync --watch ソースコード Amazon API Gateway AWS Lambda AWS Step Functions 「コード」の変更は 各サービスAPIで更新 (それ以外は従来通り CFn更新) ビルドして デプロイして 待つ コーディングして 更新 コードの変更を監視して インクリメンタルビルド & ⾃動デプロイ (1分弱 → 数秒程度に) 変更監視 ※初回のデプロイはCloudFormationスタックによるデプロイが⾏われる コード以外の設定変更や、対応するリソースが以外の更新も同様にスタックの更新デプロイが⾏われる ※--watchオプションを⽤いずに、コマンドで同期を⼿動で実⾏することでも利⽤可能 対応するAWSリソースの更新を、CloudFormationではなくAPIで実⾏ → 開発者の繰り返しテスト(コード変更)における 開発体験 & 速度Up template.yaml (SAMテンプレート)

Slide 33

Slide 33 text

33 SAM sync: 対応リソース Amazon API Gateway AWS Lambda AWS Step Functions 対応リソース API変更対応内容 ソースコード変更 ASL(JSON)変更 レイヤー変更 OpenAPI document変更 上記の組み合わせ以外は、CloudFormationスタック更新によるデプロイになる APIによる更新 に対応するリソース と その内容 は以下が対象 → API Gateway, Lambda, Step Functions の「コード部分」

Slide 34

Slide 34 text

34 開発者向けの集約されたフィードバック Amazon CloudWatch Logs AWS X-Ray ログ(*) や X-Rayトレース情報 を SAMコマンドでまとめて ローカル環境で表⽰ > sam logs --stack-name sam-app --tail --include-traces > sam traces --tail (*) ログは Lambda関数ログ、API Gateway の REST API実⾏ログ, HTTP APIアクセスログ に対応 XRay Event at (2022-01-10T21:53:23.338000) with id (1-61dc2c43-0357d27a40a73c4526d1795c) and duration (0.260s) - 0.260s - sam-app-HelloWorldFunction-1ILtd5dmAt5k [HTTP: 200] - 0.002s - sam-app-HelloWorldFunction-1ILtd5dmAt5k - 0.133s - Initialization - 0.001s - Invocation - 0.000s - Overhead 2022/01/10/[$LATEST]6c0d6dbb6fe44cbda6d59690e9c0219a 2022-01-10T12:53:23.594000 START RequestId: 545340a6-1322-4e51-9070- 93a60bbc4d28 Version: $LATEST 2022/01/10/[$LATEST]6c0d6dbb6fe44cbda6d59690e9c0219a 2022-01-10T12:53:23.596000 Hello, SAM Accelerate! 2022/01/10/[$LATEST]6c0d6dbb6fe44cbda6d59690e9c0219a 2022-01-10T12:53:23.598000 END RequestId: 545340a6-1322-4e51-9070- 93a60bbc4d28 2022/01/10/[$LATEST]6c0d6dbb6fe44cbda6d59690e9c0219a 2022-01-10T12:53:23.598000 REPORT RequestId: 545340a6-1322-4e51- 9070-93a60bbc4d28 Duration: 1.83 ms Billed Duration: 2 ms Memory Size: 128 MB Max Memory Used: 37 MB Init Duration: 133.29 ms XRAY TraceId: 1-61dc2c43-0357d27a40a73c4526d1795c SegmentId: 0b30412d3e54bc5a Sampled: true New XRay Service Graph Start time: 2022-01-10 21:53:23+09:00 End time: 2022-01-10 21:53:23+09:00 Reference Id: 0 - AWS::Lambda::Function - sam-app-HelloWorldFunction-1ILtd5dmAt5k - Edges: [] Summary_statistics: - total requests: 1 - ok count(2XX): 1 - error count(4XX): 0 - fault count(5XX): 0 - total response time: 0.002 Reference Id: 1 - client - sam-app-HelloWorldFunction-1ILtd5dmAt5k - Edges: [2] Summary_statistics: - total requests: 0 - ok count(2XX): 0 - error count(4XX): 0 - fault count(5XX): 0 - total response time: 0 Reference Id: 2 - (Root) AWS::Lambda - sam-app-HelloWorldFunction-1ILtd5dmAt5k - Edges: [0] Summary_statistics: - total requests: 1 - ok count(2XX): 1 - error count(4XX): 0 - fault count(5XX): 0 - total response time: 0.26

Slide 35

Slide 35 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. DEMO (AWS SAM Accelerate)

Slide 36

Slide 36 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. 2022/1/6 G A

Slide 37

Slide 37 text

37 AWS SAM CLI と CDK の連携とは? AWS CloudFormation AWS SAM SAM は CloudFormation をベースに各種機能を提供

Slide 38

Slide 38 text

38 AWS SAM CLI と CDK の連携とは? AWS CloudFormation AWS SAM AWS CloudFormation AWS CDK CDK も CloudFormation をベースに各種機能を提供 (ただし、テンプレートではなく ⼀般の開発⾔語 によるIaC)

Slide 39

Slide 39 text

39 AWS SAM CLI と CDK の連携とは? SAMテンプレートとSAM CLI によるローカルテスト、ビルド、 デプロイがもたらす開発者体験 CloudFormationテンプレートでは なく、CDKコンストラクトを⽤いた コーディングによるインフラの実現 AWS CloudFormation AWS SAM AWS CloudFormation AWS CDK

Slide 40

Slide 40 text

40 AWS SAM CLI と CDK の連携とは? • リソース定義 • ビルド • ローカルテスト • デプロイ • リソース定義 • ビルド • デプロイ AWS CloudFormation AWS SAM AWS CloudFormation AWS CDK

Slide 41

Slide 41 text

41 AWS SAM CLI と CDK の連携とは? AWS SAM AWS CloudFormation AWS CDK • リソース定義 • ビルド • デプロイ • リソース定義 • ビルド • ローカルテスト • デプロイ + CDKのフレームワークがカバーしない、サーバーレスアプリケーションの 「ローカルテスト」の機能をSAMで補完 サーバーレスアプリケーション開発に CDKを採⽤

Slide 42

Slide 42 text

42 CDK with SAM: ローカルテスト cdk synthで⽣成されるテンプレートを⽤いてテスト⽤SAM CLIコマンド が実⾏できる︓sam local {invoke | start-api | start-lambda } CDKアプリケーション (スタック) > sam local invoke MyFunction --no-event -t ./cdk.out/CdkSamExampleStack.template.json AWS SAM CLI MyFunction MyAPI > sam local start-api MyAPI -t ./cdk.out/CdkSamExampleStack.template.json ① cdk synth実⾏ ② /cdk.out/.template.json ファイルが⽣成される 前提1︓AWS CDK v1.135.0 以降 または AWS CDK v2.0.0 以降, SAM CLI 1.37.0以降 前提2︓CDKスタック内にLambda関数が含まれること ③ sam local invoke コマンドで利⽤ ④ ローカル環境で実⾏ (コンテナ利⽤)

Slide 43

Slide 43 text

43 当セッションのAgenda (再掲) l AWS SAM の 概要 〜おさらい〜 l AWS SAM Pipelines l AWS SAM Accelerate (Preview/beta) l AWS SAM CLI と AWS CDK のローカルテスト連携

Slide 44

Slide 44 text

© 2022, Amazon Web Services, Inc. or its affiliates. All rights reserved. Thank you!