Terraform 列出 ECS 集群容器实例

Posted

技术标签:

【中文标题】Terraform 列出 ECS 集群容器实例【英文标题】:Terraform list ECS cluster container instances 【发布时间】:2022-01-11 11:50:21 【问题描述】:

有没有办法获取 ECS 集群上所有 EC2 容器实例的 ids/arns 列表,我尝试使用数据源:aws_ecs_cluster 但它只显示 register_container_instances_count - ECS 集群的已注册容器实例数,没有任何关于他们

【问题讨论】:

【参考方案1】:

如果 TF 没有提供适合您需求的数据源,您可以使用External Data Source 提供您自己的数据源。使用外部数据源,您可以在 TF 脚本中获取所需的任何信息以供将来使用。

【讨论】:

【参考方案2】:

试试这个:

确保已导入 boto3 模块和所需的 AWS 权限

(不是 Python 或 Terraform 专家)

terraform 

data "external" "external_resource" 
  program = ["/usr/bin/python3", "$path.module/list_instances.py"]

  query = 
    cluster_name = "CHANGE_ME"
  

output "output" 
  value = data.external.external_resource.result

import boto3
import sys
import json


client = boto3.client('ecs')

def list_containers(cluster_name):
    # list all container instances id 
    response = client.list_container_instances(
        cluster=cluster_name
    )
    return response['containerInstanceArns']

def describe_container():
    # get terraform query json and assign it to a dict
    query=sys.stdin.readlines()
    terraform_respone_dic=json.loads(query[0])
    cluster_name=terraform_respone_dic['cluster_name']

    # get the container instances
    response = client.describe_container_instances(
    cluster=cluster_name,
        containerInstances=list_containers(cluster_name)
    )

    # get the instance id's and assign to a variable
    instances=list(map(lambda x:x['ec2InstanceId'],response['containerInstances']))
    # assign them to our original query json (dict)
    terraform_respone_dic['instances_id\'s']=instances

    # return as stdout
    output = json.dumps(str(key): str(value) for key, value in terraform_respone_dic.items())
    sys.stdout.write(output)


if __name__ == '__main__':
    describe_container()

预期输出:

terraform apply

Outputs:

output = tomap(
  "cluster_name" = "production"
  "instances_id's" = "['i-xxxxxxxxxxxxxxxx', 'i-xxxxxxxxxxxxxxxx', 'i-xxxxxxxxxxxxxxxx']"
)

【讨论】:

以上是关于Terraform 列出 ECS 集群容器实例的主要内容,如果未能解决你的问题,请参考以下文章

terraform-ecs。已注册的容器实例显示为 0

使用 terraform 的 AWS ECS 容量提供程序

在 Terraform 销毁期间,terraform 在销毁 Auto-scaling 组之前尝试销毁 ECS 集群并且失败了

AWS ECS 开发工具包。使用开发工具包为 ECS 集群注册新容器实例 (EC2)

AWS EC2 ECS 在您的集群中未找到任何容器实例

Cloudformation 未能创建 ecs 服务(在您的集群中未找到任何容器实例。)