从AWS Lambda函数创建CloudFormation堆栈,传递API Gateway参数 &g



我无法在Lambda函数中获得参数。如果我在lambda中提到参数值,效果很好。当我从Lambda函数中删除参数值并尝试从API网关或测试Lambda时,它会处理默认参数值。请帮助我的Lambda函数是:

import boto3
import time
import json
datetime = time.strftime("%Y%m%d%H%M%S")
stackname = 'myec2'
client = boto3.client('cloudformation')
response = client.create_stack(
StackName= (stackname+ '-' + datetime),
TemplateURL='https://testnaeem.s3.amazonaws.com/ec2tags.yaml',
Parameters=[
{
"ParameterKey": "MyInstanceName",
"ParameterValue": " "
},
{
"ParameterKey": "MyInstanceType",
"ParameterValue": " "
}
]
)

def lambda_handler(event, context):
return(response)

我的CloudFormation模板是:

---
Parameters:
MyInstanceType:
Description: Instance type description
Type: String
MyInstanceName:
Description: Instance type description
Type: String  
Resources:
MyInstance:
Type: AWS::EC2::Instance
Properties:
AvailabilityZone: us-east-1a
ImageId:  ami-047a51fa27710816e
InstanceType: !Ref MyInstanceType
KeyName: miankeyp
Tags:
- Key : Name
Value : !Ref MyInstanceName
- Key : app 
Value : demo

请帮助在Lambda函数中需要更改什么

我的测试值是:
{
"MyInstanceName": "demott",
"MyInstanceType": "t2.micro"
}

我修改了你的lambda函数的代码。请检查代码中的注释以澄清:

import boto3
import time
import json
datetime = time.strftime("%Y%m%d%H%M%S")
stackname = 'myec2'
client = boto3.client('cloudformation')
def lambda_handler(event, context):
print(event) # to check what your even actually is
# it will be printed out in CloudWatch Logs for your
# function
# you have to check what the event actually looks like
# and adjust event['MyInstanceName'] and event['MyInstanceType']
# in the following code
response = client.create_stack(
StackName= (stackname+ '-' + datetime),
TemplateURL='https://testnaeem.s3.amazonaws.com/ec2tags.yaml',
Parameters=[
{
"ParameterKey": "MyInstanceName",
"ParameterValue": event['MyInstanceName']
},
{
"ParameterKey": "MyInstanceType",
"ParameterValue": event['MyInstanceType']
}
]
)
return(response)
顺便说一下,这样的功能和API网关可以非常快速地启动许多ec2实例。让你知道这一点。

相关内容

  • 没有找到相关文章

最新更新