【问题标题】:Terraform import ECS task definition from another projectTerraform 从另一个项目导入 ECS 任务定义
【发布时间】:2020-05-21 06:28:09
【问题描述】:

我有多个项目,每个项目都有自己的 Terraform 来管理特定于该项目的 AWS 基础设施。共享的基础架构(例如 VPC):我导入到需要它的项目中。

我想使用步进函数将来自不同服务的许多不同任务粘合在一起,但其中一些是 Fargate ECS 任务。这意味着我需要在 step 函数中指定任务定义 ARN。

我可以导入任务定义,但如果我稍后更新管理该任务定义的项目,修订将更改,而步进函数将继续指向旧的任务定义修订。

此时,我不妨将任务 ARN 硬编码到 step 函数中,并且只需要记住以后更新它。

有人知道解决这个问题的方法吗?

【问题讨论】:

  • 您能否在运行时从 step 函数中查找任务 ARN?

标签: amazon-web-services terraform amazon-ecs terraform-provider-aws


【解决方案1】:

您可以使用aws_ecs_task_definition data source 查找任务定义系列的最新版本:

data "aws_ecs_task_definition" "example" {
  task_definition = "example" 
}

output "example" {
  value = data.aws_ecs_task_definition.example
}

应用它会产生以下输出(假设您的 AWS 账户中有 example 服务):

example = {
  "family" = "example"
  "id" = "arn:aws:ecs:eu-west-1:1234567890:task-definition/example:333"
  "network_mode" = "bridge"
  "revision" = 333
  "status" = "ACTIVE"
  "task_definition" = "example"
  "task_role_arn" = "arn:aws:iam::1234567890:role/example"
}

所以你可以这样做:

data "aws_ecs_task_definition" "example" {
  task_definition = "example" 
}

data "aws_ecs_cluster" "example" {
  cluster_name = "example"
}

resource "aws_sfn_state_machine" "sfn_state_machine" {
  name     = "my-state-machine"
  role_arn = aws_iam_role.iam_for_sfn.arn

  definition = <<EOF
{  
   "StartAt": "Manage ECS task",
   "States": {  
      "Manage ECS task": {  
         "Type": "Task",
         "Resource": "arn:aws:states:::ecs:runTask.waitForTaskToken",
         "Parameters": {  
            "LaunchType": "FARGATE",
            "Cluster": ${data.aws_ecs_cluster.example.arn},
            "TaskDefinition": ${data.aws_ecs_task_definition.example.id},
            "Overrides": {  
               "ContainerOverrides": [  
                  {  
                     "Name": "example",
                     "Environment": [  
                        {  
                           "Name": "TASK_TOKEN_ENV_VARIABLE",
                           "Value.$": "$$.Task.Token"
                        }
                     ]
                  }
               ]
            }
         },
         "End": true
      }
   }
}
EOF
}

【讨论】:

  • 谢谢!我认为这是前进的方向。不幸的是,它断言familys 对于每个任务定义都是唯一的,目前对我来说并非如此。我想我需要改变这一点,因为没有其他办法。
  • 这适用于 ECS 任务定义,但不适用于批处理任务定义,因为它们没有 data 源。任何想法如何在不静态引用批处理作业的修订的情况下解决这个问题?
  • 您的问题是您有 Fargate ECS 任务而不是批处理任务定义。如果您有额外的要求,那么最好创建一个后续问题并链接回该问题并解释此答案未解决的额外问题。
  • 是的,公平点。这是:stackoverflow.com/questions/61958180/…
猜你喜欢
  • 1970-01-01
  • 2021-01-14
  • 2021-09-17
  • 2020-01-03
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多