我在CloudFormation模板上有以下资源,可以从AWS文档中创建运行Lambda函数的规则:
"ScheduledRule": {
"Type": "AWS::Events::Rule",
"Properties": {
"Description": "ScheduledRule",
"ScheduleExpression": "rate(5 minutes)",
"State": "ENABLED",
"Targets": [{
"Arn": { "Fn::GetAtt": ["myLambda", "Arn"] },
"Id": "TargetFunctionV1"
}]
}
}
我想指定输入:
{
"Arn" : String,
"Id" : String,
"Input" : String,
"InputPath" : String
}
和Input是传递给目标的JSON格式的文本字符串。该值将覆盖匹配的事件。
我希望我的JSON格式文本为:
{
"mykey1": "Some Value"
}
当我把:
时,我不知道如何在输入中指定它 "ScheduledRule": {
"Type": "AWS::Events::Rule",
"Properties": {
"Description": "ScheduledRule",
"ScheduleExpression": "rate(5 minutes)",
"State": "ENABLED",
"Targets": [{
"Arn": { "Fn::GetAtt": ["myLambda", "Arn"] },
"Id": "TargetFunctionV1",
"Input": { "mykey1": "Some Value" }
}]
}
}
我会收到错误:
Value of property Input must be of type String
我该如何正确指定?
答案 0 :(得分:5)
自己找到答案:
“输入”:“{\”test \“:\”value11 \“,\”test2 \“:\”value22 \“}”
希望它可以帮助别人。
答案 1 :(得分:4)
我会使用YAML,因为它更容易阅读且更具可读性:
Input:
!Sub |
{
mykey1: "${myKey}"
}
答案 2 :(得分:4)
我想扩展@Pau 的回答。基本上,如果您使用 |
表示下面的整个块将被视为原始字符串。
如果您需要替换 JSON 中的任何变量,那么您可以使用 Sub
,但如果您没有任何变量,那么您就不需要 Sub
。一个例子是:
Input:|
{
"jsonVar":"jsonVal",
"jsonVar2" : "jsonVal2"
}
您可以稍后执行 JSON.parse(<input-variable>)
来获取 JSON 对象。
注意:如果没有下一个变量,请不要在 JSON 中的变量末尾放置逗号。示例:
Input:|
{
"jsonVar":"jsonVal",
"jsonVar2" : "jsonVal2",
}
这会导致 JSON 解析错误。
答案 3 :(得分:0)
这应该有效:
"Input": JSON.stringify({ mykey1: "Some Value" })
答案 4 :(得分:0)
如果您使用yaml编写CloudFormation脚本,发现难以使用JSON字符串(例如策略文档),最简单的方法是使用online converter
将JSON转换为yamlApiGatewayRestApi:
Type: AWS::ApiGateway::RestApi
Properties:
Description: API Gateway for some API
EndpointConfiguration:
Types:
- PRIVATE
Name: MyAPIGateway
Policy: <Policy Doc >
让我们说说政策文件如下。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-southeast-2:something/*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:sourceVpce": "vpce-abcd"
}
}
}
]
}
使用转换器,您可以将JSON转换为相同的Yaml并按以下方式使用。
ApiGatewayRestApi:
Type: AWS::ApiGateway::RestApi
Properties:
Description: API Gateway for some API
EndpointConfiguration:
Types:
- PRIVATE
Name: MyAPIGateway
Policy:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal: "*"
Action: execute-api:Invoke
Resource: arn:aws:execute-api:ap-southeast-2:something/*
Condition:
ForAnyValue:StringEquals:
aws:sourceVpce: vpce-abcd
答案 5 :(得分:0)
这是我用于“输入”行的类似 YAML 代码。我花了一整天的时间才弄明白语法,所以我希望这可以在将来对某人有所帮助。
Input: "{\"action\":[\"configure\"],\"mode\":[\"ec2\"],\"optionalConfigurationSource\":[\"ssm\"],\"optionalConfigurationLocation\":[\"AmazonCloudWatch-Baseline-Windows\"],\"optionalRestart\":[\"yes\"]}"