基本上,我正在构建一个集成,通过 AWS 批处理作业定义在 ECS 上运行 ECR 映像。这段代码适用于 atm,我们现在开始通过 AWS 步骤函数运行作业定义。
这是我当前状态机的副本(为了保护参与此代码的公司的隐私而进行了一些编辑)
{
"Comment": "A description of my state machine",
"StartAt": "xxxxxx Job",
"QueryLanguage": "JSONata",
"States": {
"blahblah Job": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Arguments": {
"JobName": "blahJob",
"JobDefinition": "job-def-arn:69",
"JobQueue": "job-queue"
},
"Next": "bleg Job",
"Assign": {
"apiCall": "$states.input.apiCall",
"wid": "$states.input.wid"
}
},
"bleg Job": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Arguments": {
"JobDefinition": "job-arn:69",
"JobQueue": "job-queue",
"JobName": "blegJob"
},
"End": true,
"Assign": {
"apiCall": "$states.input.apiCall",
"person": "$states.input.person",
"endpoint": "$states.input.endpoint"
}
}
}
}
我一直在尝试几种不同的方法。我的 ECR 映像是运行 Nodejs 代码的 alpine linux 映像。 ECR 存储库和批处理作业都是通过 Terraform 创建的。上面的分配块无法正常工作。
这是通过步骤函数运行的 terraform 作业定义的副本。您可以看到我也尝试通过 terraform 设置环境变量,但这对我来说也不起作用。
如果我可以提供更多有关我的设置的信息,或者是否有任何我应该尝试的技术或技巧,请告诉我。
resource "aws_batch_job_definition" "managed" {
for_each = var.manage_job_definitions ? var.job_definitions : {}
name = "${var.app_name}-${var.environment}-${each.key}"
type = "container"
platform_capabilities = [
"FARGATE",
]
container_properties = <<CONTAINER_PROPERTIES
{
"fargatePlatformConfiguration": {
"platformVersion": "LATEST"
},
"executionRoleArn": "${aws_iam_role.ecs_task_execution_role.arn}",
"jobRoleArn": "${local.ecs_job_role}",
"mountPoints": ${jsonencode(var.mount_points)},
"volumes": ${jsonencode(var.volumes)},
"containers": [
{
"name": "xxxxx",
"image": "${xxxxx}",
"environment": [
{
"name": "apiCall",
"value": "{% $states.input.apiCall $}"
},
{
"name": "wid",
"value": "{% $states.input.xxx $}"
}
],
"environment": ${jsonencode(concat(local.common_env_vars, each.value.environment_variables))},
"essential": true,
"resourceRequirements": [
{"type": "VCPU", "value": "0.25"},
{"type": "MEMORY", "value": "512"}
]
},
{
"name": "xxxxxImage",
"image": "${var.xxxx_image}",
"environment": [
{
"name": "apiCall",
"value": "{% $states.input.apiCall $}"
},
{
"name": "wid",
"value": "{% $states.input.wid $}"
}
],
"essential": true,
"resourceRequirements": [
{"type": "VCPU", "value": "0.25"},
{"type": "MEMORY", "value": "512"}
]
},
{
"name": "dataImage",
"image": "${var.node_server_image}",
"environment": ${jsonencode(concat(local.common_env_vars, each.value.environment_variables))},
"essential": true,
"resourceRequirements": [
{"type": "VCPU", "value": "0.25"},
{"type": "MEMORY", "value": "512"}
]
}
]
}
CONTAINER_PROPERTIES
}
感谢 Reddit 上的一些人,我最终找到了答案。您只需添加
"ContainerOverrides": {
"Environment": [
{
"Name": "var1",
"Value": "{% $states.input.value1 %}"
},
{
"Name": "var2",
"Value": "{% $states.input.value2 %}"
}
]
}
到您尝试将变量放入“参数”字段下的“状态机/步进函数”定义中的任何容器。