如何在SSM文档中使用StringMap参数



我在SSM文档中有以下步骤。调用的结果是一个Json,所以我想将其解析为stringMap(这似乎是它的正确类型(,而不是为我想引用的每个变量创建一个输出

我试着将其同时引用:

{{ GetLoadBalancerProperties.Description.Scheme }}

{{ GetLoadBalancerProperties.Description["LoadBalancerName"] }}

在这两种情况下,我都得到了一个错误,说变量从未定义

{
"name": "GetLoadBalancerProperties",
"action": "aws:executeAwsApi",
"isCritical": true,
"maxAttempts": 1,
"onFailure": "step:deleteParseCloudFormationTemplate",
"inputs": {
"Service": "elb",
"Api": "describe-load-balancers",
"LoadBalancerNames": [
"{{ ResourceId }}"
]
},
"outputs": [
{
"Name": "Description",
"Selector": "$.LoadBalancerDescriptions[0]",
"Type": "StringMap"
}
]
}

这是实际消息:

步骤在验证和解析步骤输入时失败。未能解析输入:GetLoadBalancerProperty.Description[quot;LoadBalancer Name"]以键入String。GetLoadBalancerProperty.Description["LoadBalancer名称"]未在自动化文档中定义。。有关更多诊断详细信息,请参阅《自动化服务故障排除指南》。

我相信您搜索的答案在这里:https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-plugins.html#top-等级属性类型

举几个例子:

映射类型是Python dict,因此如果您的输出是dict,则应在SSM文档中使用StringMap。

而列表类型和Python列表相同。

因此,如果您的输出是字典列表,那么您要使用的类型是MapList。

在某些情况下,您似乎不能。我能够通过在SSM文档中使用Python脚本来输出正确的类型来解决这个问题,但除此之外,我认为SSM文档不够灵活,无法涵盖所有情况。

我使用的脚本:

- name: myMainStep
action: aws:executeScript
inputs:
Runtime: python3.6
Handler: myMainStep
InputPayload:
param: "{{ myPreviousStep.myOutput }}"
Script: |-
def myMainStep(events,context):
myOutput = events['myOutput']
for tag in myOutput:
if tag["Key"] == "myKey":
return tag["Value"]
return "myDefaultValue"
outputs:
- Name: output
Selector: "$.Payload"
Type: String

您可以在AWS web控制台中找到myOutput应该是什么>SSM>自动化>你的执行,如果你已经执行了一次自动化>executeScript步骤>输入参数

最新更新