Terraform 是否公开 ECS 启动类型中使用的 EC2 实例的实例 ID?
Does Terraform expose the instance ID for an EC2 instance used in an ECS launch type?
我正在使用 EC2 启动类型将应用程序部署到 ECS 集群。我在这里取得了一些成功,并且在集群前面建立了一个负载均衡器,并且该实例可以很好地接收和响应流量。
对于一个单独的任务,我也在考虑能够单独处理实例,如果我有实例 ID,Terraform 允许我这样做,但我没有看到实例 ID 是其中之一aws_launch_configuration
.
的数据输出
有没有办法提取 ECS 集群中使用的 EC2 实例的实例 ID?
您可以使用 aws_instance
data source
在其中,您可以指定一些过滤器来检索任何 EC2 实例。
例如,假设您的启动配置(顺便说一句,您应该使用启动模板,它基本上是具有更多功能的“启动配置 v2”)为您的 ECS 容器实例分配了一些标签,其中之一是Name:ECSClusterX
。了解这一点后,您可以通过以下方式检索所述 EC2 实例:
data "aws_instance" "ecs-instance" {
filter {
name = "tag:Name"
values = ["ECSClusterX"]
}
}
然后您可以检索找到的实例的 ID,方法是:aws_instance.ecs-instance.id
。
就是这样,你已经准备好了!
如果您正在寻找在特定实例中启动任务,一个好的做法是使用属性。
在您的集群中,移至 ECS 实例 选项卡,然后 select 一个实例。如图所示打开 Actions 菜单并转到 View/Edit Attributes:
添加您的属性:
最后一步是在 Terraform 中配置任务定义。
resource "aws_ecs_task_definition" "component1" {
...
placement_constraints {
type = "memberOf"
expression = "attribute:deploy_type == standard"
}
...
}
现在任务只会在匹配属性的实例中执行。
我使用 lambda 函数始终保持至少一个实例包含我需要的每个属性块。但是您可以使用不同的启动模板和不同的属性将实例集成到集群中。
我正在使用 EC2 启动类型将应用程序部署到 ECS 集群。我在这里取得了一些成功,并且在集群前面建立了一个负载均衡器,并且该实例可以很好地接收和响应流量。
对于一个单独的任务,我也在考虑能够单独处理实例,如果我有实例 ID,Terraform 允许我这样做,但我没有看到实例 ID 是其中之一aws_launch_configuration
.
有没有办法提取 ECS 集群中使用的 EC2 实例的实例 ID?
您可以使用 aws_instance
data source
在其中,您可以指定一些过滤器来检索任何 EC2 实例。
例如,假设您的启动配置(顺便说一句,您应该使用启动模板,它基本上是具有更多功能的“启动配置 v2”)为您的 ECS 容器实例分配了一些标签,其中之一是Name:ECSClusterX
。了解这一点后,您可以通过以下方式检索所述 EC2 实例:
data "aws_instance" "ecs-instance" {
filter {
name = "tag:Name"
values = ["ECSClusterX"]
}
}
然后您可以检索找到的实例的 ID,方法是:aws_instance.ecs-instance.id
。
就是这样,你已经准备好了!
如果您正在寻找在特定实例中启动任务,一个好的做法是使用属性。
在您的集群中,移至 ECS 实例 选项卡,然后 select 一个实例。如图所示打开 Actions 菜单并转到 View/Edit Attributes:
添加您的属性:
最后一步是在 Terraform 中配置任务定义。
resource "aws_ecs_task_definition" "component1" {
...
placement_constraints {
type = "memberOf"
expression = "attribute:deploy_type == standard"
}
...
}
现在任务只会在匹配属性的实例中执行。
我使用 lambda 函数始终保持至少一个实例包含我需要的每个属性块。但是您可以使用不同的启动模板和不同的属性将实例集成到集群中。