LoginSignup
4
0

More than 5 years have passed since last update.

AWS CloudFormationでのlambda functionのコード管理方法について

Last updated at Posted at 2019-03-29

悩み

AWS CloudFormationで環境を構築できるようになったが、lambdaを利用する場合、現在のソースコード管理がイマイチだった

AWS Lambda Function Code

上記のDocをみると以下二つの方法があった

CloudFormationの中身にコードを入れる

例)

ZipFile: |
  import json
  import cfnresponse
  def handler(event, context):
    responseValue = int(event['ResourceProperties']['Input']) * 5
    responseData = {}
    responseData['Data'] = responseValue
    cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData, "CustomResourcePhysicalID")

一目でこの方法は論外と判断、
テストしたソースコードをCloudFormationファイルでコピペした後の整合性は誰が責任取るんだ〜
もし使うなら、ソースをzipにしてパスを入れるならありと思うが、多分できない?ようで

S3で管理

こちはバージョン管理をどうするかが課題
既存んgitと別にS3のバージョン管理を利用することは嫌だったから、
もしこれを使うならシェルでS3にソースコードを登録したあとでにCloudFormationを起動する方法かな?
面倒だけどこちかな?

解決した方法

ソースコードを通常とおりに別途ファイルに管理し、CloudFormationのparametersで渡す方法を利用した

1. ソースはそのままテキストファイルで保存

例のファイル名: ./labmdaFuntionTest.js

2. CloudFormationのparameters定義

以下のParameters定義を追加 (yamlの場合)

Parameters: 
  LambdaFunctionContents: 
    Type: String

3. Codeをparametersで入力した値で設定

Resources:

  ConnectCognitoAuthHooks:
    Type: "AWS::Lambda::Function"
    Properties: 
      FunctionName: 'TestFunction'
      Handler: index.handler
      Runtime: nodejs8.10
      Code: 
        ZipFile: !Ref LambdaFunctionContents

4. 起動時シェルでソースコードファイルを渡す


aws cloudformation deploy --template-file ./LabmdaFuntionTest.yaml --stack-name LabmdaFuntionTest --parameter-overrides LambdaFunctionContents="$(<./labmdaFuntionTest.js)"
4
0
2

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
4
0