AWS SAMを利用してAWS Lambdaをデプロイする

2019年1月11日

環境 / 必要なもの

  • Python 3.6
  • pip
  • AWS CLI
  • 適当なS3バケット
  • デプロイしたいLambdaのソースを固めたzip(後述のlambda_function.zip)
  • デプロイしたいLambdaのAWS SAMファイル(後述のlambda_function.yaml)

デプロイ準備

まずAWS SAMの書き換えから

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: hoge - description
Resources:
  resourcesname:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.7
      CodeUri: .
      Description: fuge - description
      MemorySize: 128
      Timeout: 3
      Role: 'arn:aws:iam::#############:role/#######################'
      Events:
      VpcConfig:
      Environment:
        Variables:
          KEY: poyo
      Tags:
        TAG: foo
こんな感じのSAMファイルがLambdaのマネジメントコンソールからダウンロードできるので下記のように一部書き換える。(CodeUriの修正、FunctionNameの追加をする)
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: hoge - description
Resources:
  resourcesname:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.7
      CodeUri: '{任意のpath}/lambda_function.zip'
      FunctionName: '{任意のlambda_function名}'
      Description: fuge - description
      MemorySize: 128
      Timeout: 3
      Role: 'arn:aws:iam::#############:role/#######################'
      Events:
      VpcConfig:
      Environment:
        Variables:
          KEY: poyo
      Tags:
        TAG: foo

デプロイ用のパッケージをS3上に作成する

※lambda_function.yaml : 用意したAWS SAMファイル
※packaged.yaml : デプロイ時に使用するAWS SAMファイルの名前(任意)

aws cloudformation package --template-file lambda_function.yaml --s3-bucket {任意のS3バケット名+path(key)} --output-template-file packaged.yaml

デプロイする

sam deploy --template-file packaged.yaml --stack-name {任意のスタック名}
スタック名はCloudFormationで管理する際の名前になります。
これでAWS Lambdaに展開されているはず。