永远支持自定义资源的Lambda“ CREATE_IN_PROGRESS”

时间:2019-01-18 16:02:47

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

我有一个支持lambda的自定义资源,导致lambda永久导致了云形式“ CREATE_IN_PROGRESS”,无法删除

import pymysql
import os
import json
import boto3
from botocore.vendored import requests


def handler(event, context):
    try:
        if event['RequestType'] == 'Create' or event['RequestType'] == 'Update':
            print("Create or Update")
            # some database operation
            respond_cloudformation(event, "SUCCESS")
        else:
            respond_cloudformation(event, "SUCCESS")
            return
    except:
        respond_cloudformation(event, "SUCCESS")

def respond_cloudformation(event, status, data=None):
    responseBody = {
        'Status': status,
        'Reason': 'See the details in CloudWatch Log Stream',
        'PhysicalResourceId': 'Custom Lambda Function',
        'StackId': event['StackId'],
        'RequestId': event['RequestId'],
        'LogicalResourceId': event['LogicalResourceId'],
        'Data': data
    }

    print('Response = ' + json.dumps(responseBody))
    requests.put(event['ResponseURL'], data=json.dumps(responseBody))

2 个答案:

答案 0 :(得分:0)

好吧

首先,它不会永远存在。堆栈创建/更新最终将超时。为了加快速度,您可以联系aws支持人员,以便他们可以手动终止堆栈。但是对于自定义资源,我认为超时发生在1小时后。

第二,检查您的AWS CloudWatch日志。正在运行的lambda在那里生成所有日志。您肯定会在那看到崩溃。

第三,几乎可以保证您的lambda崩溃,因为它没有安装pymysql模块。如果要使用依赖项,请创建一个lambda部署程序包。

答案 1 :(得分:0)

当您在CloudFormation中部署自定义资源并且未能正确捕获错误时,鉴于Lambda调用失败,CloudFormation资源将在定义的超时时间(默认值:1小时)内保持“ CREATE_IN_PROGRESS”状态。时间。

您可以在部署Lambda并当场“修复”之后很快,以便当CloudFormation调用Lambda时不会返回错误,或者如果您来不及(尝试3次):修复Lambda功能并取消堆栈更新。回滚还会调用Lambda。如果Lambda损坏,那么这还将花费定义的超时时间。

如果您错过了所有机会,回滚将失败。您将必须继续回滚以保留失败的资源。

提示:定义合理的CFN超时;-)