gpt4 book ai didi

aws-cloudformation - 云形权杖 : How to parameterize a list of json objects

转载 作者:行者123 更新时间:2023-12-03 07:36:56 25 4
gpt4 key购买 nike

我使用权杖和对流层来生成我的建筑。

在 AWS Batch 作业定义中,我想要参数化作业定义的容器属性的环境:

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-jobdefinition-containerproperties.html

环境是 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-batch-jobdefinition-environment.html 的列表。

但是在权杖的背景下,我似乎不能声明这样的事情:

self.JobDefinitionEnvironment = t.add_parameter(Parameter(
'JobDefinitionEnvironment',
Type='List<AWS::Batch::JobDefinition::Environment>'
))

在权杖中:

  1. 我必须编写自己的解析器来解决这个问题吗?即使我编写自己的解析器来解析 JobDefintion::Environment,解析器也只返回一个字符串,而不是对象列表。

  2. 我不应该参数化容器属性并对 job-definition.py 中的值进行硬编码吗?

  3. 我目前正在通过“展平”对象来解决问题,以便我可以提供值。有点丑。

请帮忙!

最佳答案

Cloudformation 不支持List<AWS::Batch::JobDefinition::Environment> (参见https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html)

有几种方法可以解决您的问题

注意,我更熟悉使用 yaml 和 jinja,但下面的代码也应该适用于对流层,当我有机会时我会添加示例

Sceptre_user_data

config/<stack_name>.yaml添加

sceptre_user_data:
JobDefinitionEnvironment:
- <list-goes-here-as-yaml/json>

cfn/<template>.yaml.j2添加

  myBatchJob
Type: AWS::Batch::JobDefinition
Properties:
Environment:
{{ sceptre_user_data.JobDefinitionEnvironment }}

原生

要在本地执行此操作,您可以使用 Type: CommaDelimitedList然后选择,这个有点麻烦

Parameters:
BatchEnvironmentSetting1:
Type: CommaDelimitedList
Default: MySetting,MyValue

Resources:
myBatchJob:
Type: AWS::Batch::JobDefinition
Properties:
Environment:
- Name: !Select [0, BatchEnvironmentSetting]
Value: !Select [1, BatchEnvironmentSetting]

带有条件和循环

如果 native 方法适合您,那么您可以将值设置为可选(并且使用循环可以减轻痛苦

Parameters:
{% for i in range(20) %}
BatchEnvironmentSetting{{ i }}:
Type: CommaDelimitedList
Default: ''
{% endfor %}

Conditions:
{% for i in range(20) %}
UseBatchEnvironmentSetting{{ i }}: !Not [!Equals [BatchEnvironmentSetting{{ i }}, '']]
{% endfor %}


Resources:
myBatchJob:
Type: AWS::Batch::JobDefinition
Properties:
Environment:
{% for i in range(20) %}
- !If
- UseBatchEnvironmentSetting{{ i }}
- Name: !Select [0, BatchEnvironmentSetting{{ i }}]
Value: !Select [1, BatchEnvironmentSetting{{ i }}]
- !Ref AWS::NoValue
{% endfor %}

这种循环是对流层可能使代码更简洁的地方之一,因为您可以拥有一个实现所有 3 个循环的 AddEnviornmentSetting 函数

关于aws-cloudformation - 云形权杖 : How to parameterize a list of json objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51867835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com