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 销毁期间,terraform 在销毁 Auto-scaling 组之前尝试销毁 ECS 集群并且失败了