52
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CloudFormationでLambda関数デプロイ(超初歩)

Last updated at Posted at 2018-11-13

概要

Lambda関数デプロイ自動化に向けたCloudFormationによるLambda関数のデプロイ
※この記事の目標はS3においてあるpythonのzipファイルからLambda関数を作成するところまでです。

:new: 2018-11-15更新
プロパティについて詳しくまとめた記事書きました
AWS::Lambda::Functionのプロパティ

参考資料

基本は公式ドキュメントを参考にする

準備

1.Lambda関数にするpythonファイル

無駄にゴリゴリ書いても余計な考えが入っちゃうので今回はシンプルに↓こんなん

test.py
# coding: utf-8

def lambda_handler(event, context):
    print "OK!!"

2. zipファイル

先程のtest.pyをzip形式で圧縮して,任意のS3のバケットにアップロードする

3. テンプレートファイル準備

公式ドキュメントによるとAWS::Lambda::Functionに必要なプロパティは下記のようになっている(JSON)

テンプレート

{
  "Type" : "AWS::Lambda::Function",
  "Properties" : {
    "Code" : Code,
    "DeadLetterConfig" : DeadLetterConfig,
    "Description" : String,
    "Environment" : Environment,
    "FunctionName" : String,
    "Handler" : String,
    "KmsKeyArn" : String,
    "MemorySize" : Integer,
    "ReservedConcurrentExecutions" : Integer,
    "Role" : String,
    "Runtime" : String,
    "Timeout" : Integer,
    "TracingConfig" : TracingConfig,
    "VpcConfig" : VPCConfig,
    "Tags" : [ Resource Tag, ... ]
  }
}

ここからとりあえず必要なものを残すと↓

{
  "Type" : "AWS::Lambda::Function",
  "Properties" : {
    "Code" : Code,
    "Description" : String,
    "FunctionName" : String,
    "Handler" : String,
    "Role" : String,
    "Runtime" : String,
  }
}

プロパティの説明

  • Code (必須項目)
    • バケット内のファイルを指すことも、ソースコードをインラインテキストとして指定することもできます。
      • バケット内ファイル指定
        • S3Bucket: zipファイルを配置したバケット名を入れる
        • S3Key: zipファイル名(拡張子までつける)
  • Description
    • 関数の説明
  • FunctionName
    • 関数の名前
      • ここを指定しない場合,AWS CloudFormation は一意の物理IDを生成し、そのIDを関数名とするので,設定しておいたほうが良いでしょう
  • Handler (必須項目)
    • Lambdaがコードの実行を開始するために呼び出す (ソースコード内の) 関数の名前
  • Role (必須項目)
  • Runtime (必須項目)
    • アップロードするLambda関数のランタイム環境

4. 以上とドキュメントからテンプレートファイルを作成する

※任意のところには**※(米印)**を入れておきます。

{
  "AWSTemplateFormatVersion" : "2010-09-09",
  "Description" : "※sample of cloudformation template for deploying a lambda function form S3.",
  "Resources" : {
    "※HelloSample": {
      "Type" : "AWS::Lambda::Function",
      "Properties" : {
        "Code" : {
          "S3Bucket" : "※S3のバケット名",
          "S3Key" : "※test.zip"
        },
        "Description" : "※test deploy lambda template",
        "FunctionName" : "※test_lambda_function",
        "Handler" : "※test.lambda_handler",
        "Role" : { "Fn::GetAtt" : ["LambdaExecutionRole", "Arn"] },
        "Runtime" : "python2.7",
      }
    },
    "LambdaExecutionRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [{ "Effect": "Allow", "Principal": {"Service": ["lambda.amazonaws.com"]}, "Action": ["sts:AssumeRole"] }]
        },
      }
    }
  }
}

5. CloudFormationでスタック作成

5-1. テンプレートをAmazonS3にアップロード

先程作成したテンプレートファイルをアップロードする。
スクリーンショット 2018-11-13 21.44.31.png

5-2. 詳細の設定

スタックの任意の名前を入力する
※今回は test-deploy-lambda-function という名前に設定します。
スクリーンショット 2018-11-13 21.44.48.png

5-3. オプション

特にデフォルトのままでいいが,タイムアウトのみ念のため,設定する(5分くらい)
スクリーンショット 2018-11-13 21.45.12.png

5-4. 作成

以上の設定で 作成 ボタンを押下する

以上

確認

作成ボタンを押してすぐにスタックの詳細画面に行くと既に,Lambda関数をdeployしてくれている様子
スクリーンショット 2018-11-13 21.47.33.png
指定した名前でLambda関数が作成されているか
スクリーンショット 2018-11-13 21.48.15.png
中身はtest.pyの内容か
スクリーンショット 2018-11-13 21.49.05.png
Handlerも指定したものになっているか
スクリーンショット 2018-11-13 21.49.05 2.png

おわり

今回は全然実践的ではなく初歩になってしまいましたが,ここまでたどり着くのに3日間くらいかかったのでとりあえずここまでできればあとはテンプレートのプロパティ駆使して実践的なことができるようになるかと....

何かの参考になれば:pray:

52
27
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
52
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?