在Terraform中为从Batch计算环境创建的ECS集群启用ContainerInsights

80次阅读
没有评论

问题描述

在使用Terraform创建AWS Batch计算环境时,会同时创建一个ECS集群用于运行容器。然而,问题在于虽然Terraform管理了aws_batch_compute_environment资源,但由此创建的aws_ecs_cluster并不受Terraform管理。用户想要在这个集群上启用ContainerInsights,但由于它不受管理,他对如何实现感到困惑。

以下是用户目前如何定义Batch计算环境的代码:

resource "aws_batch_compute_environment" "fargate-batch-compute" {
  compute_environment_name = "fargate-batch-compute"
  compute_resources {
    max_vcpus          = 100
    security_group_ids = [...]
    subnets            = [...]
    type               = "FARGATE"
  }
  type = "MANAGED"
}

以下是如何在Terraform中轻松启用ECS集群上的ContainerInsights的代码:

resource "aws_ecs_cluster" "foo" {
  name = "your_cluster_name_here"
  setting {
    name  = "containerInsights"
    value = "enabled"
  }
}

注意:
– 据我了解,无法将现有的ECS集群传递给创建计算环境的操作。

解决方案

请注意以下操作可能涉及AWS资源配置和版本差异,请谨慎操作。

方案1:手动导入并配置ECS集群

目前,唯一的解决方案是将AWS中创建的资源手动导入到Terraform中,并在Terraform配置文件中进行设置。

  1. 首先,找到新创建的ECS集群的名称,例如AWSBatch-foo-123456

  2. 在你的Terraform配置文件中添加以下内容,以创建一个新的ECS集群资源并启用ContainerInsights:

resource "aws_ecs_cluster" "foo-cluster" {
  name = "AWSBatch-foo-123456"

  setting {
    name  = "containerInsights"
    value = "enabled"
  }
}
  1. 执行以下命令以导入ECS集群资源:
terraform import aws_ecs_cluster.foo-cluster AWSBatch-foo-123456

现在,ECS集群将由Terraform管理,你可以在Terraform配置中应用任何设置。

方案2:脚本方式手动控制

另一种方法是使用脚本来手动控制容器的启动顺序和设置。你可以编写一个Bash脚本,以确保在启动ECS集群之后启用ContainerInsights。以下是示例脚本:

#!/bin/bash
# 使用Terraform启动AWS Batch计算环境
terraform apply -auto-approve

# 找到新创建的ECS集群的名称,例如AWSBatch-foo-123456
ecs_cluster_name="AWSBatch-foo-123456"

# 等待ECS集群完全启动
while ! aws ecs describe-clusters --clusters "$ecs_cluster_name" | grep "ACTIVE"; do
  sleep 5
done

# 启用ContainerInsights
aws ecs update-cluster-settings --cluster "$ecs_cluster_name" --settings name=containerInsights,value=enabled

在上述示例中,脚本首先使用Terraform启动AWS Batch计算环境。然后,它通过AWS CLI查询ECS集群的状态,直到状态为”ACTIVE”,表示集群已完全启动。最后,脚本使用AWS CLI命令来启用ContainerInsights。

请注意,使用脚本来管理资源可能会增加复杂性,需要谨慎操作,以免出现意外问题。

以上是两种解决方案,你可以根据实际情况选择适合你的方法来在Terraform中为从Batch计算环境创建的ECS集群启用ContainerInsights。

正文完