SAMで容量の大きなlambdaのコードをCodeUriで指定する方法についてです。
ローカルにzipにしておいておく。
lambdaはあまりにもでかいコードをあげる場合にはzipにするか、それ以上ではcliからs3にアップし、lambdaからはそのURIを指定する方法をとります。
実際、以前の記事(近くで開催される勉強会を定期的にslackへ流す。)ではdockerコンテナをs3へ置いてlambdaから参照して実行していました。
他方でsam-cli
は、template.yml
のCodeUri
に指定した相対パスのソースコードをs3へアップします。
つまり、zipにまでして相対パスを指定しておけばs3へのアップはsam package
コマンドの中で同時に行われます。
リファレンスを見るとこのCodeUri
にはs3のパスを指定できていることから、一度s3にあげたコードをここで参照させるのかと思っていましたがtemplate.yml
の中ではローカルでのパスを指定するものでした。
ただしここには注意が必要で、絶対パスを指定するとSuccessfullyとは出ますがうまくいきません。
訂正) 指定可能でした。 (2019/12/26)
AWSTemplateFormatVersion : '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: get connpass info
Resources:
getConnpassSchedule:
Type: AWS::Serverless::Function
Properties:
Handler: index.lambda_handler
Runtime: python3.6
# パスを指定
CodeUri: ./deploy_package.zip
Description: ''
MemorySize: 512
Timeout: 120
# lambdaのバージョンのエイリアスを指定(必須)
AutoPublishAlias: prod
FunctionName: 'getConnpassSchedule'
# IAMロール
Role: 'arn:aws:iam::xxxxxxxxxxxx:role/FullAccess'
# デプロイ方式
DeploymentPreference:
Type: Linear10PercentEvery1Minute
$ sam package --template-file template.yml --output-template-file package.yml --s3-bucket YOUR_BUCKET
$ sam deploy --template-file package.yml --stack-name my-date-time-app2 --capabilities CAPABILITY_IAM
s3にzipにしてあげておく。
テンプレートの中のCodeUri
にS3://〜
で始まるURIを指定してsam package
を実行すると生成するパッケージのCodeUri
にそのまま反映されます。このケースではS3へのアップロードを踏みません。
ただ、sam package
コマンドでs3へ送ってくれるのであれば良いのではないかと思うのですがそこには差があるのでしょうか?(今後使ってみて探索と言ったところですかね)