0

私はラムダ関数を展開する際に、s3バケットに更新が含まれるたびに展開しようとしています。lamdaを使用してs3をlamda関数に配置する方法

私は単に

{ 
"AWSTemplateFormatVersion": "2010-09-09", 
"Description": "AWS CloudFormation CloudWatch Log Janitor Demo Stack", 
"Resources": { 
    "TestLamdaRole": { 
     "Type": "AWS::IAM::Role", 
     "Properties": { 
      "AssumeRolePolicyDocument": { 
       "Version": "2012-10-17", 
       "Statement": [{ 
        "Effect": "Allow", 
        "Principal": { 
         "Service": [ 
          "lambda.amazonaws.com" 
         ] 
        }, 
        "Action": [ 
         "sts:AssumeRole" 
        ] 
       }] 
      }, 
      "Path": "/" 
     } 
    }, 
    "EbsBackupExecutionPolicy": { 
     "DependsOn": [ 
      "TestLamdaRole" 
     ], 
     "Type": "AWS::IAM::Policy", 
     "Properties": { 
      "PolicyName": "hamedlamdapolicytest", 
      "Roles": [{ 
       "Ref": "TestLamdaRole" 
      }], 
      "PolicyDocument": { 
       "Version": "2012-10-17", 
       "Statement": [{ 
         "Effect": "Allow", 
         "Action": [ 
          "logs:*" 
         ], 
         "Resource": [ 
          "arn:aws:lambda:us-east-1:1111111111111:function:*" 
         ] 
        }, 
        { 
         "Effect": "Allow", 
         "Action": [ 
          "ec2:Describe*" 
         ], 
         "Resource": [ 
          "*" 
         ] 
        } 
       ] 
      } 
     } 
    }, 
    "LambdaFuction": { 
     "Type": "AWS::Lambda::Function", 
     "Properties": { 
      "Code": { 
       "S3Bucket": "lambda-dep-test", 
       "S3Key": "index.zip" 
      }, 
      "Role": { 
       "Fn::GetAtt": [ 
        "TestLamdaRole", 
        "Arn" 
       ] 
      }, 
      "Timeout": 60, 
      "Handler": "lambda_function.handler", 
      "Runtime": "nodejs6.10", 
      "MemorySize": 128, 
      "FunctionName": "stg1-test" 
     } 
    } 
} 

}

ラムダ関数の作成と展開を自動化するために雲の形成を使用することができます。しかし、問題があることであるバケツの最新ジップラムダコードを知っている場合上記のラムダコードを実行するとすぐに、ユーザーがバケットにsthを置くたびに最新のコードが自動的にデプロイされることはありません。私はそれがラムダとするsthがあることを知っているが、私は紛失していると私はどのアプローチを使用してどこを開始するか分からない。これについて光を当ててください。

+1

これを達成する簡単な方法はありません。 S3でイベントを作成します。新しいファイルが追加されるたびに、イベントは元の関数(この場合はstg1-test)を更新する別のラムダ関数を起動します –

答えて

1

serverlessのようなフレームワークを使用してください。シンプルなコマンドを使用して簡単に導入でき、CIと簡単に統合できます。 https://serverless.com

+0

このフレームワークについて知っていただきありがとうございます。しかし、私が望むのは、ユーザーの関心を引くことなく自動展開することです。フレームワークはそうしていますか? –

+0

Serverlessでは、設定されたs3バケットにzipファイルをデプロイし、ラムダ展開を開始します。あなたの場合、zipファイルをs3にアップロードするには、まだユーザーのやりとりが必要です。 –

1

これは私がこの問題に取り組ん方法です:

  • を指定するためにCodeセクションでS3ObjectVersionプロパティを使用して、あなたのCloudFormationテンプレートでのごAWS::Lambda::Function宣言でlambda-dep-testバケット
  • でバージョン管理を有効にしますバージョンを展開する必要があります。

は今、あなたは、テンプレートを更新し、ラムダコードはバケツに更新され、新たなS3ObjectVersionたびに指定するか、あなたのテンプレートのパラメータとしてそれを宣言し、S3ObjectVersionでそれを参照することができますすることができます。両方のソリューションは、.zipファイルのパッケージ化とアップロードでスクリプト化できます。

関連する問題