问题描述
在使用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配置文件中进行设置。
-
首先,找到新创建的ECS集群的名称,例如
AWSBatch-foo-123456
。 -
在你的Terraform配置文件中添加以下内容,以创建一个新的ECS集群资源并启用ContainerInsights:
resource "aws_ecs_cluster" "foo-cluster" {
name = "AWSBatch-foo-123456"
setting {
name = "containerInsights"
value = "enabled"
}
}
- 执行以下命令以导入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。