具有动态环境变量的 AWS CDK StateMachine BatchSubmitJob
AWS CDK StateMachine BatchSubmitJob with dynamic environment variables
我正在尝试在 AWS CDK 中使用 BatchSubmitJob 创建状态机,在 BatchContainerOverrides 中使用动态环境变量。我在想这样的事情:
container_overrides = sfn_tasks.BatchContainerOverrides(
environment={
"TEST.$": "$.dynamic_from_payload"
}
)
return sfn_tasks.BatchSubmitJob(self.scope,
id="id",
job_name="name",
job_definition_arn="arn",
job_queue_arn="arn",
container_overrides=container_overrides,
payload=sfn.TaskInput.from_object({
"dynamic_from_payload.$": "$.input.some_variable"
}))
但是,在部署时,CDK 会将“名称”和“值”添加到状态机定义中,但值现在是静态的。这是在控制台中看到的状态机定义的一部分:
"Environment": [
{
"Name": "TEST.$",
"Value": "$.dynamic_from_payload"
}
]
但我需要这样:
"Environment": [
{
"Name": "TEST",
"Value.$": "$.dynamic_from_payload"
}
]
我也试过使用“Ref::”,就像这里对命令参数所做的那样:AWS Step and Batch Dynamic Command。但这也不管用。
我还研究了逃生通道,覆盖了 CloudFormation 模板。但我认为这在这里不适用,因为生成的状态机定义字符串基本上是一个大字符串。
我能想到两种解决方案,这两种解决方案都不让我满意:用一个副本覆盖带有逃生舱口的状态机定义字符串,其中“值”在某些条件下被替换(可能使用正则表达式)或将状态机中的一个 lambda 将创建并触发批处理作业,一个 lambda 将在作业完成时进行轮询。
长话短说:有人知道如何在 CDK 中将动态环境变量与 BatchSubmitJob 一起使用吗?
您可以使用 aws_cdk.aws_stepfunctions.JsonPath class:
container_overrides = sfn_tasks.BatchContainerOverrides(
environment={
"TEST": sfn.JsonPath.string_at("$.dynamic_from_payload")
}
)
感谢 !
解决了
对于批量提交作业,我最终得到了 intrinsic functions to format the value and the aws_cdk.aws_stepfunctions.JsonPath 的通过状态。
所以像这样:
sfn.Pass(scope
id="id",
result_path="$.result",
parameters={"dynamic_from_payload.$": "States.Format('static_sub_part/{}',$.dynamic_sub_part)"} )
...
container_overrides = sfn_tasks.BatchContainerOverrides(
environment={
"TEST": sfn.JsonPath.string_at("$.result.dynamic_from_payload")
}
)
我正在尝试在 AWS CDK 中使用 BatchSubmitJob 创建状态机,在 BatchContainerOverrides 中使用动态环境变量。我在想这样的事情:
container_overrides = sfn_tasks.BatchContainerOverrides(
environment={
"TEST.$": "$.dynamic_from_payload"
}
)
return sfn_tasks.BatchSubmitJob(self.scope,
id="id",
job_name="name",
job_definition_arn="arn",
job_queue_arn="arn",
container_overrides=container_overrides,
payload=sfn.TaskInput.from_object({
"dynamic_from_payload.$": "$.input.some_variable"
}))
但是,在部署时,CDK 会将“名称”和“值”添加到状态机定义中,但值现在是静态的。这是在控制台中看到的状态机定义的一部分:
"Environment": [
{
"Name": "TEST.$",
"Value": "$.dynamic_from_payload"
}
]
但我需要这样:
"Environment": [
{
"Name": "TEST",
"Value.$": "$.dynamic_from_payload"
}
]
我也试过使用“Ref::”,就像这里对命令参数所做的那样:AWS Step and Batch Dynamic Command。但这也不管用。
我还研究了逃生通道,覆盖了 CloudFormation 模板。但我认为这在这里不适用,因为生成的状态机定义字符串基本上是一个大字符串。
我能想到两种解决方案,这两种解决方案都不让我满意:用一个副本覆盖带有逃生舱口的状态机定义字符串,其中“值”在某些条件下被替换(可能使用正则表达式)或将状态机中的一个 lambda 将创建并触发批处理作业,一个 lambda 将在作业完成时进行轮询。
长话短说:有人知道如何在 CDK 中将动态环境变量与 BatchSubmitJob 一起使用吗?
您可以使用 aws_cdk.aws_stepfunctions.JsonPath class:
container_overrides = sfn_tasks.BatchContainerOverrides(
environment={
"TEST": sfn.JsonPath.string_at("$.dynamic_from_payload")
}
)
感谢
对于批量提交作业,我最终得到了 intrinsic functions to format the value and the aws_cdk.aws_stepfunctions.JsonPath 的通过状态。
所以像这样:
sfn.Pass(scope
id="id",
result_path="$.result",
parameters={"dynamic_from_payload.$": "States.Format('static_sub_part/{}',$.dynamic_sub_part)"} )
...
container_overrides = sfn_tasks.BatchContainerOverrides(
environment={
"TEST": sfn.JsonPath.string_at("$.result.dynamic_from_payload")
}
)