ローカル環境の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を変更して再度デプロイする場合は、同様のコマンド操作を実行すればよい。
リンク