![](/img/trans.png)
[英]Take ECS Task Definition environment variables from Terraform input variables
[英]Terraform import ECS task definition from another project
我有多個項目,每個項目都有自己的 Terraform 來管理特定於該項目的 AWS 基礎設施。 共享的基礎設施(例如 VPC):我導入到需要它的項目中。
我想使用步進函數將來自不同服務的許多不同任務粘合在一起,但其中一些是 Fargate ECS 任務。 這意味着我需要在步驟 function 中指定任務定義 ARN。
我可以導入任務定義,但如果我稍后更新管理該任務定義的項目,則修訂將更改,而步驟 function 將繼續指向舊的任務定義修訂。
在這一點上,我不妨將任務 ARN 硬編碼到步驟 function 中,並且只需要記住以后更新它。
有人知道解決這個問題的方法嗎?
您可以使用aws_ecs_task_definition
數據源來查找任務定義系列的最新版本:
data "aws_ecs_task_definition" "example" {
task_definition = "example"
}
output "example" {
value = data.aws_ecs_task_definition.example
}
應用它會得到以下 output(假設您的 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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.