AWS CLI-在参数上分配多个值的语法是啥

Posted

技术标签:

【中文标题】AWS CLI-在参数上分配多个值的语法是啥【英文标题】:AWS CLI- What is the syntax for assigning multiple values on a parameterAWS CLI-在参数上分配多个值的语法是什么 【发布时间】:2020-11-21 20:46:39 【问题描述】:

例如,我有一个要求这些参数的 CF 模板

----- cftemplate.yaml -----
...
Parameters:
  **Subnet:
    Description: Subnet for the Instance
    Type: 'AWS::EC2::Subnet::Id'
  SecurityGroups: 
    Description: Security Group for Instance
    Type: 'List<AWS::EC2::SecurityGroup::Id>'**
...
Resources:
 EC2Instance:
   Type: AWS::EC2::Instance
   Properties:
...
    **SubnetId: !Ref Subnet
    SecurityGroupIds: !Ref SecurityGroups**
...
----- cftemplate.yaml -----

为了部署堆栈,我使用以下命令:

aws cloudformation create-stack --stack-name StackName --template-body file://cftemplate.yaml --parameters file://params.json

params.json 包含的位置:

----- params.json ----- 
[
        
            "ParameterKey":"Subnet",
            "ParameterValue":"subnet-11111111"
        ,
        
            "ParameterKey":"SecurityGroups",
            "ParameterValue":"sg-111111111",
            "ParameterValue":"sg-222222222"
         
]
----- params.json -----

现在,我的目标是消除 .json 文件的使用。有谁知道应该达到与上述命令相同效果的命令的简写语法?似乎在网上的文档中找不到这个。提前致谢!

【问题讨论】:

【参考方案1】:

命令行等效项将是(为了澄清而重新格式化):

aws cloudformation create-stack \
    --stack-name StackName \
    --template-body file://cftemplate.yaml \
    --parameters ParameterKey=Subnet,ParameterValue=subnet-11111111 ParameterKey=SecurityGroups,ParameterValue=sg-111111111\\,sg-222222222

在上面注意空格和逗号很重要。

我使用自己的参数和沙盒帐户验证了命令:

aws cloudformation create-stack --stack-name StackName --template-body file://instance.yaml --parameters ParameterKey=Subnet,ParameterValue=subnet-0ae6ce0f9bbf52251 ParameterKey=SecurityGroups,ParameterValue=sg-06d2a3e9c8aa99620\\,sg-004d23d188ec1146f

这是正确的并导致开始部署堆栈的过程:


    "StackId": "arn:aws:cloudformation:us-east-1:xxxxxx:stack/StackName/61fbacd0-d3b0-11ea-970a-0ad23187ddb2"

【讨论】:

@darren 嗨。不知道你是什么意思? 使用命令:aws cloudformation create-stack --stack-name StackName --template-body file://cftemplate.yaml --parameters ParameterKey=Subnet,ParameterValue=subnet-11111111 ParameterKey=SecurityGroups,ParameterValue=sg-111111111,sg-222222222 将导致:Parameter validation failed: Invalid type for parameter Parameters[4].ParameterValue, value: ['sg-111111111', 'sg-222222222'], type: &lt;class 'list'&gt;, valid types: &lt;class 'str'&gt; 不过,我认为我们只需要为此找到正确的语法。 根据操作系统,您可能需要将参数放在单引号或双引号中。 @Marcin 酷!!!你的命令有效!我第一次测试时出错了,因为我使用了很多参数。非常感谢您的复制。赞!! 还发现这个语法也可以接受:aws cloudformation create-stack --stack-name StackName --template-body file://cftemplate.yaml --parameters ParameterKey=Subnet,ParameterValue=subnet-11111111 ParameterKey=SecurityGroups,ParameterValue='sg-111111111,sg-222222222' 【参考方案2】:

来自 cli 文档,

$ aws cloudformation create-stack help

...

"--parameters" (list)

   A list of "Parameter" structures that specify input parameters for
   the stack. For more information, see the Parameter data type.

Shorthand Syntax:

   ParameterKey=string,ParameterValue=string,UsePreviousValue=boolean,ResolvedValue=string ...

JSON Syntax:

   [
     
       "ParameterKey": "string",
       "ParameterValue": "string",
       "UsePreviousValue": true|false,
       "ResolvedValue": "string"
     
     ...
   ]

...

列表元素由空格分隔。

【讨论】:

【参考方案3】:

你可能想看看rain cli。它是由 cloudformation 团队的人开发的,它比 aws cli 好得多。

https://github.com/aws-cloudformation/rain

【讨论】:

以上是关于AWS CLI-在参数上分配多个值的语法是啥的主要内容,如果未能解决你的问题,请参考以下文章

在 Anylogic 中为代理参数分配不同值的正确方法是啥?

在传递 CommaDelimitedList 类型的参数值时看到 Aws cli cloudformation 错误

从函数返回多个值的最佳方法是啥?

从函数返回多个值的最佳方法是啥?

AWS CLI docker:参数格式不正确

使用AWS CLI修改AWS RDS参数组时出错