Amazon web services 为什么自定义资源未能在AWS Cloudformation中的预期时间内稳定下来?
我希望使用CloudFormation创建一个新的自定义资源,以获得当前日期减去X天的结果,当我创建lambda函数时,我获得错误: 资源未能在预期时间内稳定 我的代码是:Amazon web services 为什么自定义资源未能在AWS Cloudformation中的预期时间内稳定下来?,amazon-web-services,aws-lambda,amazon-cloudformation,aws-cloudformation-custom-resource,Amazon Web Services,Aws Lambda,Amazon Cloudformation,Aws Cloudformation Custom Resource,我希望使用CloudFormation创建一个新的自定义资源,以获得当前日期减去X天的结果,当我创建lambda函数时,我获得错误: 资源未能在预期时间内稳定 我的代码是: AWST模板格式版本:2010-09-09 参数: 环境: 说明:环境 类型:字符串 默认值:dev 允许值: -发展 -试验 -刺激 -sbx DaysToSubstract: 描述:使用RedshiftLoader减去天数以计算摄取日期 类型:编号 默认值:1 资源: LambdateredShiftLoader: 类型
AWST模板格式版本:2010-09-09
参数:
环境:
说明:环境
类型:字符串
默认值:dev
允许值:
-发展
-试验
-刺激
-sbx
DaysToSubstract:
描述:使用RedshiftLoader减去天数以计算摄取日期
类型:编号
默认值:1
资源:
LambdateredShiftLoader:
类型:“AWS::Lambda::Function”
德彭森:
-LambdateredShiftlLoaderRole
特性:
代码:
齐普菲尔:!潜艇|
从日期时间导入日期,时间增量
进口CFN应答
def lambda_处理程序(事件、上下文):
当前_delta=date.today()-timedelta(days=event['DaysToSubstract'])
current_delta_str=current_delta.strftime(“%Y-%m-%d”)
responseData['Dates']=当前的_delta_str
发送(事件、上下文、cfnresponse.SUCCESS、响应数据)
环境:
变量:
DaysToSubstract:!子“${DaysToSubstract}”
说明:>-
计算昨天日期以获取加载数据的开始和结束日期
带红移装载机
处理程序:index.lambda\u处理程序
记忆化:128
角色:!GetAtt lambdataredshiftloaderrole.Arn
运行时:python3.7
超时时间:30
LambdateredShiftLoaderRole:
类型:“AWS::IAM::角色”
特性:
罗莱娜:!子'a3m${Environment}-datesRL lambda角色'
假设政策文件:
版本:2012-10-17
声明:
-行动:
-“sts:假设角色”
效果:允许
负责人:
服务:
-lambda.amazonaws.com
路径:/service角色/
政策:
-保单名称:!子'a3m${Environment}-lambda datesRL lambda日志策略'
政策文件:
版本:2012-10-17
声明:
-行动:
-'日志:CreateLogGroup'
-'日志:CreateLogStream'
-“日志:PutLogEvents”
效果:允许
资源:
- !Sub>-
arn:aws:logs:eu-west-1:${aws::AccountId}:log group:/aws/lambda/lambda datesRL uyc:*
拉姆达尔:
类型:“自定义::值”
特性:
ServiceToken:!GetAtt LambdaateredShiftLoader.Arn
产出:
LambdaFunction输出:
值:!GetAtt lambdaRL.日期
说明:Lambda函数返回值(日期减去x天)
我正在使用cfnresponse
和成功
并使用!输出中的GetAtt lambdaRL.Dates
提前感谢您您的Lambda函数出现错误,因此它从未有机会调用
cfnresponse.send()
。这意味着CloudFormation一直在等待响应
以下是Lambda函数的更新版本:
from datetime导入日期,timedelta
导入CFN响应,操作系统
def lambda_处理程序(事件、上下文):
当前_delta=date.today()-timedelta(days=int(os.environ['DaysToSubtract']))
current_delta_str=current_delta.strftime(“%Y-%m-%d”)
响应数据={}
responseData['Dates']=当前的_delta_str
发送(事件、上下文、cfnresponse.SUCCESS、响应数据)
问题是:
- 环境变量通过
,而不是os.environ()
event()
值是作为DaysToSubtract
而不是string
传递的,因此int
函数失败(小心拼写timedelta()
与Substract
)Subtract
字典未初始化,因此它给出了一个responseData
错误NameError:name'responseData'未定义
Delete
操作期间。通常最好插入if
语句,以便仅在Create
阶段使用以下命令运行代码:
如果事件['RequestType']='Create':
是否存在lambda出现故障的CloudWatch日志错误?