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

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

【问题讨论】:

    标签: amazon-web-services amazon-ec2 terraform amazon-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']"
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 2022-01-26
        • 1970-01-01
        • 1970-01-01
        • 2020-11-02
        • 1970-01-01
        • 2020-04-22
        相关资源
        最近更新 更多