![Terraform 部署到 ECS 时出现静默错误](https://linux22.com/image/1489599/Terraform%20%E9%83%A8%E7%BD%B2%E5%88%B0%20ECS%20%E6%97%B6%E5%87%BA%E7%8E%B0%E9%9D%99%E9%BB%98%E9%94%99%E8%AF%AF.png)
我是 Terraform 的新手,在设置非常基本的配置时遇到了问题。我想要一些可以调出我的“docker-whale”图像。从看哈希公司和AWS文档,看来我需要一个“aws_ecs_service”使用“aws_ecs_task_definition”。
使用这个例子,我创建了以下配置。
variable "access_key" {}
variable "secret_key" {}
provider "aws" {
alias = "west"
region = "us-west-1"
access_key = "${var.access_key}"
secret_key = "${var.secret_key}"
}
resource "aws_ecs_cluster" "default" {
name = "whale"
}
resource "aws_ecs_service" "whale-service" {
name = "whale-service"
cluster = "${aws_ecs_cluster.default.id}"
task_definition = "${aws_ecs_task_definition.whale-task.arn}"
desired_count = 1
}
resource "aws_ecs_task_definition" "whale-task" {
family = "whale"
container_definitions = "${file("task-definitions/whale.json")}"
volume {
name = "whale-home"
host_path = "/ecs/whale-home"
}
}
现在,当我运行 terraform apply 时(access_key 和 secret_key 已删除),一切似乎都运行正常。但我在 AWS Web 控制台中没有看到相应的 ECS 集群或任务定义。我是否遗漏了什么?
$ terraform apply
provider.aws.region
The region where AWS operations will take place. Examples
are us-east-1, us-west-2, etc.
Default: us-east-1
Enter a value:
aws_ecs_task_definition.whale-task: Refreshing state... (ID: whale)
aws_ecs_cluster.default: Creating...
name: "" => "whale"
aws_ecs_cluster.default: Creation complete
aws_ecs_service.whale-service: Creating...
cluster: "" => "arn:aws:ecs:us-east-1:186598327969:cluster/whale"
deployment_maximum_percent: "" => "200"
deployment_minimum_healthy_percent: "" => "100"
desired_count: "" => "1"
name: "" => "whale-service"
task_definition: "" => "arn:aws:ecs:us-east-1:186598327969:task-definition/whale:1"
aws_ecs_service.whale-service: Creation complete
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
The state of your infrastructure has been saved to the path
below. This state is required to modify and destroy your
infrastructure, so keep it safe. To inspect the complete state
use the `terraform show` command.
State path: terraform.tfstate
答案1
您尚未启动集群中的任何实例,但我认为您仍然能够在 ECS 管理器中看到该集群。
我从这个文件开始工作:https://github.com/Capgemini/terraform-amazon-ecs/blob/master/ecs.tf
其中有一个自动缩放组,用于为集群启动实例,并将user_data
计算机标记为集群的一部分
/* SSH key pair */
resource "aws_key_pair" "ecs" {
key_name = "${var.key_name}"
public_key = "${file(var.key_file)}"
}
/**
* Launch configuration used by autoscaling group
*/
resource "aws_launch_configuration" "ecs" {
name = "ecs"
image_id = "${lookup(var.amis, var.region)}"
/* @todo - split out to a variable */
instance_type = "${var.instance_type}"
key_name = "${aws_key_pair.ecs.key_name}"
iam_instance_profile = "${aws_iam_instance_profile.ecs.id}"
security_groups = ["${aws_security_group.ecs.id}"]
iam_instance_profile = "${aws_iam_instance_profile.ecs.name}"
user_data = "#!/bin/bash\necho ECS_CLUSTER=${aws_ecs_cluster.default.name} > /etc/ecs/ecs.config"
}
/**
* Autoscaling group.
*/
resource "aws_autoscaling_group" "ecs" {
name = "ecs-asg"
availability_zones = ["${split(",", var.availability_zones)}"]
launch_configuration = "${aws_launch_configuration.ecs.name}"
/* @todo - variablize */
min_size = 1
max_size = 10
desired_capacity = 1
}
/* ecs service cluster */
resource "aws_ecs_cluster" "default" {
name = "${var.ecs_cluster_name}"
}