【问题标题】:Stack creation is hanging on CREATE_IN_PROGRESS堆栈创建挂在 CREATE_IN_PROGRESS
【发布时间】:2017-10-18 07:41:37
【问题描述】:

我一直在尝试使用 lambda 支持的自定义资源。我正在尝试使用自定义资源触发 Lambda 函数。在创建堆栈时,自定义资源挂在 CREATE_IN_PROGRESS 上,但我能够收到电子邮件,并且在尝试删除堆栈时,它卡在 DELETE_IN_PROGRESS 上。

现在我有五个堆栈挂在 DELETE_IN_PROGRESS 上。自定义资源在哪里创建?

     "SendEmailNotification" : {
        "Type": "AWS::Lambda::Function",
        "Properties": {
            "Handler": "index.handler",
            "Role": { "Fn::GetAtt" : ["LambdaExecutionRole", "Arn"] },
            "Code": {
                "ZipFile":  { "Fn::Join": ["", [
                    "var aws = require('aws-sdk');\n",
                    "var response = require('cfn-response');",
                    "var ses = new aws.SES({\n",
                    "region:'us-east-1'\n",
                    "});\n",
                    "exports.handler = function(event, context) {\n",
                    "console.log('Incoming: ', event);\n",
                    "var eParams = {\n",
                    "Destination: {\n"  ,
                    {"Fn::Join" : ["",["ToAddresses: ['",{ "Ref" : "EmailId" },"']\n"]]},
                    "},\n",
                    "Message: {\n",
                    "Body: {\n",
                    "Text: {\n",
                    {"Fn::Join" : ["",["Data: '", { "Fn::ImportValue" : "DNSName" },"'\n"]]},
                    "}\n",
                    "},\n",
                    "Subject: {\n",
                    "Data: 'Route53 Hosted Zone'\n",
                    "}\n",
                    "},\n",
                    {"Fn::Join" : ["",["Source: '",{ "Ref" : "EmailId" },"'\n"]]},
                    "};\n",
                    "console.log('SENDING EMAIL');\n",
                    "var email = ses.sendEmail(eParams, function(err, data){\n",
                    "if(err) console.log(err);\n",
                    "else {\n",
                    "console.log('EMAIL SENT');\n",
                    "console.log(data);\n",
                    "console.log('EMAIL: ', email);\n",
                    "context.succeed(event);\n",
                    "response.send(event, context, response.SUCCESS);\n",
                    "}\n",
                    "});\n",
                    "};"
                ]]}
            },
            "Runtime": "nodejs6.10"
        }
    },
    "TestResource": {
        "Type": "Custom::TestResource",
        "Properties": {
            "ServiceToken": { "Fn::GetAtt" : ["SendEmailNotification","Arn"] }
        }
    }

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudformation


    【解决方案1】:

    您的模板已挂起,因为 lambda 未正确执行对 cloudformation 的回调。

    在您的 SES 回调中,您首先从不发送回调以防出错,但除此之外,您首先使用“context.succeed(event);”终止 Lambda然后调用“response.send(event, context, response.SUCCESS);”。

    为了正确实现,您只需要调用 response.send 函数。在该函数中,callback.succeed 将被调用。

    您可以使用本网站上的示例作为参考。 aws lambda for cloudformation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 2017-06-06
      • 2014-06-04
      相关资源
      最近更新 更多