LoginSignup
1
0

More than 3 years have passed since last update.

SAMで容量の大きなlambdaのコードをCodeUriで指定する方法

Last updated at Posted at 2019-12-23

SAMで容量の大きなlambdaのコードをCodeUriで指定する方法についてです。

ローカルにzipにしておいておく。

lambdaはあまりにもでかいコードをあげる場合にはzipにするか、それ以上ではcliからs3にアップし、lambdaからはそのURIを指定する方法をとります。
実際、以前の記事(近くで開催される勉強会を定期的にslackへ流す。)ではdockerコンテナをs3へ置いてlambdaから参照して実行していました。

他方でsam-cliは、template.ymlCodeUriに指定した相対パスのソースコードをs3へアップします。

つまり、zipにまでして相対パスを指定しておけばs3へのアップはsam packageコマンドの中で同時に行われます。
リファレンスを見るとこのCodeUriにはs3のパスを指定できていることから、一度s3にあげたコードをここで参照させるのかと思っていましたがtemplate.ymlの中ではローカルでのパスを指定するものでした。

ただしここには注意が必要で、絶対パスを指定するとSuccessfullyとは出ますがうまくいきません。
訂正) 指定可能でした。 (2019/12/26)

template.yml
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にしてあげておく。

テンプレートの中のCodeUriS3://〜で始まるURIを指定してsam packageを実行すると生成するパッケージのCodeUriにそのまま反映されます。このケースではS3へのアップロードを踏みません。

ただ、sam packageコマンドでs3へ送ってくれるのであれば良いのではないかと思うのですがそこには差があるのでしょうか?(今後使ってみて探索と言ったところですかね)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0