【发布时间】:2020-02-13 04:35:30
【问题描述】:
我有一个 lambda,它有一个 python 脚本来在参数存储中创建一个 application.properties 文件。我有一个调用此 lambda 以创建 application.properties 的 cloudformation 模板。我的 cloudformation 模板如下所示:
{
"Description": "Create SSM Parameter",
"Resources": {
"primerinvoke": {
"Type": "AWS::CloudFormation::CustomResource",
"Properties": {
"Handler": "lambda_function.lambda_handler",
"ServiceToken": "arn:aws:lambda:us-east-1:1234:function:test_lambda",
"FunctionName": "test_lambda"
}
}
}
}
我创建SSM参数的python脚本(路径是:/myapp/dev/test/application.properties)是:
import boto3
import os
region = os.environ['AWS_REGION']
client = boto3.client('ssm')
def ssm_create():
response = client.put_parameter(Name='/myapp/'
+ os.environ['environment']
+ '/test/application.properties',
Description='string',
Value='APPLICATION_NAME=myapp',
Type='SecureString', Overwrite=True)
return response
def lambda_handler(event, context):
PutParameterResult = ssm_create()
我按照AWS lambda: No module named 'cfnresponse' 中的建议使用了import cfnresponse,但是导入不起作用,我不知道如何在 lambda 外部安装 cfnresponse 库。
代码成功运行,这意味着 cloudformation 模板能够调用 lambda 及其脚本并创建 SSM 参数,但在我的脚本中的 ssm_create() 函数完成后挂起。我不知道如何将“SUCCESS”状态从我的脚本返回到 cloudformation 堆栈,以防止它挂在CREATE_IN_PROGRESS 状态。
任何帮助将不胜感激!谢谢。
EDIT1:我将代码更新为:
responseStatus = 'SUCCESS'
responseBody={}
def sendResponse(event, context, responseStatus):
responseBody = {'Status': responseStatus,
'Reason': 'See the details in CloudWatch Log Stream: ' + context.log_stream_name,
'PhysicalResourceId': context.log_stream_name,
'StackId': event['StackId'],
'RequestId': event['RequestId'],
'LogicalResourceId': event['LogicalResourceId'],
}
print 'RESPONSE BODY:n' + json.dumps(responseBody)
def lambda_handler(event, context):
logger.info(event)
test_ssm_create()
try:
req = requests.put(event['ResponseURL'], data=json.dumps(sendResponse(event, context, responseStatus)))
if req.status_code != 200:
print req.text
raise Exception('Recieved non 200 response while sending response to CFN.')
except requests.exceptions.RequestException as e:
print e
raise
return
print("COMPLETE")
req.status_code 给出 200,但 cloudformation 堆栈再次卡在 CREATE_IN_PROGRESS。仍然不确定如何使这项工作。
【问题讨论】:
标签: python aws-lambda amazon-cloudformation