AWS CloudFormationでAPIGateway + Lambda関数をデプロイする

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

ローカル環境のaws cliでAPIGateway + Lambda関数を定義したCloudFormationのスタック作成から関数デプロイまでを実行します。

作業ディレクトリの状態

template.yaml
lambdaFunc1/
  funcname1.py
lambdaFunc2/
  funcname2.py


template.yaml

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
  postImages:
    Type: 'AWS::Serverless::Function'
    Properties:
      CodeUri: lambdaFunc1/
      Handler: funcname1.lambda_handler
      Runtime: python3.7
      Description: ''
      MemorySize: 128
      Timeout: 15
      Role: arn:aws:iam::your_lambda_role
      Environment:
        Variables:
          KEY: VALUE
      Events:
        Api:
          Type: Api
          Properties:
            Path: /images
            Method: post
  updateImage:
    Type: 'AWS::Serverless::Function'
    Properties:
      Description: ''
      CodeUri: lambdaFunc2/
      Handler: funcname2.lambda_handler
      Runtime: python3.6
      MemorySize: 128
      Timeout: 15
      Role: arn:aws:iam::your_lambda_role
      Events:
        Api:
          Type: Api
          Properties:
            Path: /images
            Method: PUT

CodeUriにビルドするlambda関数のディレクトリを指定する。ビルドコマンド実行時にここに指定したディレクトリがパッケージされS3にアップロードされる。

Lambda関数のビルド

s3-bucketにビルドしたLambda関数のアップロード先bucketを指定します。

$ aws cloudformation package --template-file template.yaml \
--output-template-file template-output.yaml \
--s3-bucket your-sam-bucket

ビルドが成功すれば、CodeUriがアップロードしたs3のarnを指すoutput-template-fileが作成される。

この時点では関数のデプロイは行われない。

Lambda関数のデプロイ

関数のデプロイ。--stack-nameを指定します。

$ aws cloudformation deploy --template-file template-output.yaml \
--stack-name stack-name --capabilities CAPABILITY_IAM \
--region ap-northeast-1 

Lambda関数やtemplate.yamlを変更して再度デプロイする場合は、同様のコマンド操作を実行すればよい。