AWS SAMを利用してAWS Lambdaをデプロイする
環境 / 必要なもの
- 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に展開されているはず。