是否可以使用boto3的简写option_settings?

时间:2016-06-13 04:05:04

标签: python amazon-web-services boto boto3

在撰写.ebextensions .config个文件时,亚马逊允许输入长条目和短格式条目,例如这两个配置相同:

长篇:

"option_settings": [
    {
        'Namespace': 'aws:rds:dbinstance',
        'OptionName': 'DBEngine',
        'Value': 'postgres'
    },
    {
        'Namespace': 'aws:rds:dbinstance',
        'OptionName': 'DBInstanceClass',
        'Value': 'db.t2.micro'
    }
]

简短格式:

"option_settings": {
  "aws:rds:dbinstance": {
    "DBEngine": "postgres",
    "DBInstanceClass": "db.t2.micro"
   }
}

但是,我见过only specify using a long form with boto3的所有配置:

response = eb_client.create_environment(
... trimmed ...
    OptionSettings=[
        {
            'Namespace': 'aws:rds:dbinstance',
            'OptionName': 'DBEngineVersion',
            'Value': '5.6'
        },
... trimmed ...
)

是否可以使用包含boto3的短格式条目的字典?

奖励:如果没有,为什么不呢?

1 个答案:

答案 0 :(得分:2)

试用和错误建议不,您不能使用短格式配置类型

但是,如果你有这种说服力,你可以这样做:

def short_to_long(_in):
    out = []
    for namespace,key_vals in _in.items():
        for optname,value in key_vals.items():
            out.append(
                {
                    'Namespace': namespace,
                    'OptionName': optname,
                    'Value': value
                }
            )
    return out

然后在其他地方:

response = eb_client.create_environment(

    OptionSettings=short_to_long({
      "aws:rds:dbinstance": {
        "DBDeletionPolicy": "Delete", # or snapshot
        "DBEngine": "postgres",
        "DBInstanceClass": "db.t2.micro"
        },
    })