43383


CloudFormationでlambdaのファンクションを追加するためのリソースを作りたいと考えています。

## 聞きたい事

cloudFormationのテンプレートで、lambdaに必要な作業を1つのテンプレートにまとめて書くことはできませんか？

## 状況

CloudFormationの「AWS::Lambda::Function」で使うソースを指定する場合は、次の方法があります。

  1. s3バケットにソースをアップして、Code属性にそのバケットの情報を追記する
  2. CloudFormtaionに直接スクリプトを書いてしまう。 

今回は、jsのライブラリを組み合わせて使うので、前者の方法で実装します。  
この場合、バケット作成->lambdaのアップロード->スタック作成の順番で実施する必要があります。  
私の調べる限り、CloudFormationでは、この3つの作業を1つのテンプレートに入れることは出来なさそうです。

`aws cloudformation
package`で、s3のパスを指定した状態のテンプレートを生成（コンパイル？）する事ができる様ですが、バケットの作成までは自動化出来ないです。

## テンプレート化したい一連の作業の詳細

下記の作業をCloudFormationのテンプレートに書いて、実行時に全て実行する。

  * 任意のS3バケットを作成する
  * 作成したS3バケットに対してLambdaのソースコードをアップロードする
  * CloudFormationのテンプレートのCodeプロパティに上記の情報を適用する。   
具体的にはResouceのPropertiesに下記を追加したいです。

[code]     "Code": {

        "S3Bucket": <1.で作成したbucket名>,
        "S3Key": "<2.でアップロードしたファイル名>"
    }
    
[/code]

### イメージ

[![構成イメージ](https://i.stack.imgur.com/1Mlda.png)](https://i.stack.imgur.com/1Mlda.png)


CC BY-SA 3.0
2018-01-01T15:09:29.007
40657
2018-07-08T08:23:53.357
2018-07-08T08:23:53.357
754
17060
question
aws aws-lambda aws-cloudformation
CloudFormationでLambdaを追加するための、S3バケット作成からTemplateに反映までの作業を一括で実現する方法はないでしょうか？


SAMと`aws cloudformation package`を使うのが良いと思います。

例えば、下記の`template.yaml`の`CodeUri`のようにファイルのパスを指定します。

[code]

    $ grep Uri template.yaml
          CodeUri: LambdaFunctionOverHttps.py
    $ ls LambdaFunctionOverHttps.py 
    LambdaFunctionOverHttps.py
    $
    
[/code]

`aws cloudformation package`で`template.yaml`とS3バケットを指定すると、

  1. lambda関数をS3バケットにアップロード
  2. `template.yaml`の`CodeUri`をS3バケットにアップロードしたS3パスに修正したcloudformationのテンプレートを出力

してくれます。

[code]

    $ aws cloudformation package --template template.yaml --s3-bucket lambda-zipfile > packaged-template.yaml
    $ grep CodeUri packaged-template.yaml 
          CodeUri: s3://lambda-zipfile/7a1fd29b27ea23ac1cc381189182062b
    $ aws s3 ls s3://lambda-zipfile/7a1fd29b27ea23ac1cc381189182062b
    2018-04-19 19:17:19        640 7a1fd29b27ea23ac1cc381189182062b
    
[/code]

出力されたテンプレートを`aws cloudformation deploy`すればlambda関数が作成されます。


CC BY-SA 3.0
2018-04-19T10:27:48.347
43383
2018-04-19T10:34:48.510
2018-04-19T10:34:48.510
5285
5285
40657
answer