Amazon web services 使用Terraform创建目标组始终超时的AWS ECS 地形版本
v0.11.3 受影响资源Amazon web services 使用Terraform创建目标组始终超时的AWS ECS 地形版本,amazon-web-services,terraform,amazon-ecs,Amazon Web Services,Terraform,Amazon Ecs,v0.11.3 受影响资源 自动气象站ecs服务 aws\u ecs\u任务\u定义 美国航空航天局 aws_alb_目标群体 aws_alb_侦听器 错误 我正在设置一个ECS群集,目前有一个服务。在不中断服务的情况下启动服务时遇到了一些问题,但现在我的服务似乎无法保持容器运行 服务phoenix web(实例i-079707fc669361a81)(端口80)在目标组tgqaphoenix web中不正常,原因是(请求超时) 相关的 一旦我的资源用完,我似乎无法在任何实例或vpc网关上找
- 自动气象站ecs服务
- aws\u ecs\u任务\u定义
- 美国航空航天局
- aws_alb_目标群体
- aws_alb_侦听器
服务phoenix web(实例i-079707fc669361a81)(端口80)在目标组tgqaphoenix web中不正常,原因是(请求超时)
相关的
一旦我的资源用完,我似乎无法在任何实例或vpc网关上找到公共dns链接
我的ECS服务模块的main.tf:
数据“模板文件”ecs任务定义配置{
template=“${file(“config/ecs task.json”)}
}
资源“aws\u ecs\u任务\u定义”“凤凰网”{
生命周期{
在销毁之前创建=真
}
family=“nginx凤凰任务”
container_definitions=“${data.template_file.ecs_task_definition_config.rendered}”
}
资源“aws\u安全组”“主”{
vpc_id=“${var.vpc_id}”
标签{
Name=“sg${var.Name}负载平衡器”
Project=“${var.name}”
Environment=“${var.Environment}”
}
}
资源“aws\u安全\u组\u规则”“应用程序\u lb\u https\u入口”{
type=“入口”
从_端口=80
至_端口=80
协议=“tcp”
cidr_块=[“0.0.0.0/0”]
security_group_id=“${aws_security_group.main.id}”
}
资源“aws_alb”“main”{
security_groups=[“${aws_security_group.main.id}”]
子网=[“${var.public_subnet_ids}”]
name=“alb-${var.environment}-${var.name}”
访问日志{
bucket=“${var.access\u log\u bucket}”
prefix=“${var.access\u log\u prefix}”
}
标签{
Name=“alb-${var.environment}-${var.Name}”
Project=“${var.name}”
Environment=“${var.Environment}”
}
}
资源“aws\u alb\u目标组”“主”{
name=“tg${var.environment}${var.name}”
健康检查{
健康\u阈值=“3”
间隔=“30”
协议=“HTTP”
超时=“3”
path=“/healthz”
不健康\u threshold=“2”
}
port=“80”
协议=“HTTP”
vpc_id=“${var.vpc_id}”
标签{
Name=“tg${var.environment}${var.Name}”
Project=“${var.name}”
Environment=“${var.Environment}”
}
取决于=[“aws\u alb.main”]
}
资源“aws\u alb\u侦听器”“https”{
负载均衡器\u arn=“${aws\u alb.main.id}”
port=“80”
协议=“HTTP”
默认操作{
target\u group\u arn=“${aws\u alb\u target\u group.main.id}”
type=“前进”
}
}
资源“aws\U ecs\U服务”“服务”{
生命周期{
在销毁之前创建=真
}
name=“${var.name}”
cluster=“${var.environment}”
task_definition=“${aws_ecs_task_definition.phoenix web.id}”
desired_count=“${var.desired_count}”
部署最低健康百分比=“${var.deployment最低健康百分比}”
部署\u最大\u百分比=“${var.deployment\u max\u percent}”
iam_role=“${aws_iam_role.ecs role.id}”
负载平衡器{
target\u group\u arn=“${aws\u alb\u target\u group.main.id}”
容器名称=“凤凰网”
集装箱港口=“80”
}
依赖于=[“aws\U iam\U角色.ecs角色”,“空\U资源.alb\U存在”]
}
资源“aws\u iam\u角色\u策略”“ecs策略”{
name=“ecs策略”
role=“${aws\u iam\u role.ecs role.id}”
policy=应用程序运行状况检查似乎失败,即/healthz。您开始调试问题,如下所示:
1) 在本地启动一个容器,检查它是否正常工作。根据上面的健康检查信息,您应该能够访问应用程序,如
如果这行得通的话
2) 在构建docker映像时是否暴露端口80?请签入docker文件。
3) 若上述两个步骤看起来还可以,那个么在任务运行后,就尝试使用EC的实例ip访问您的应用程序。
.
4) 如果3也起作用,他们会尝试增加运行状况检查超时时间,以便应用程序有更多时间通过运行状况检查。1
确保ECS容器实例的安全组能够接受VPN内的端口1024-65535(不要对外开放)
线索2
在portMappings
的任务定义中,指定如下内容:
"portMappings": [
{
"hostPort": 0,
"protocol": "tcp",
"containerPort": 80
}
],
请注意:
containerPort
是您从容器中公开的内容,您的应用程序正在使用其healthcheck进行监听
hostPort
将是您绑定用于在主机上转发的端口。将其保留为0,它将由ECS自动分配,这就是为什么您需要在SG上打开1024-65535。这是必需的,以便您能够在同一实例上多次运行相同的任务定义(水平缩放)。是您的健康检查路径“/healthz”有效?请检查,因为我可以看到/healthz,它应该在工作,并且端口已暴露。我抓起图像并运行:docker run-ti-p 8093:80 00000000000.dkr.ecr.us-east-2.amazonaws.com/myrepo:latest
我应该在主体中添加响应代码,还是只是“OK”?另外,我应该在容器安装上看到ECS实例IP吗安斯?
module "s3-log-storage" {
source = "cloudposse/s3-log-storage/aws"
version = "0.1.3"
# insert the 3 required variables here
namespace = "mmt-ecs"
stage = "${var.environment}"
name = "logs-bucket"
policy = <<POLICY
{
"Id": "Policy1519319575520",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1519319570434",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectTagging",
"s3:PutObjectVersionAcl",
"s3:PutObjectVersionTagging"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::mmt-ecs-qa-logs-bucket/*",
"Principal": "*"
}
]
}
POLICY
}
module "network" {
source = "../network"
environment = "${var.environment}"
vpc_cidr = "${var.vpc_cidr}"
public_subnet_cidrs = "${var.public_subnet_cidrs}"
private_subnet_cidrs = "${var.private_subnet_cidrs}"
availability_zones = "${var.availability_zones}"
depends_id = ""
}
module "ecs_instances" {
source = "../ecs_instances"
environment = "${var.environment}"
cluster = "${var.cluster}"
instance_group = "${var.instance_group}"
private_subnet_ids = "${module.network.private_subnet_ids}"
aws_ami = "${var.ecs_aws_ami}"
instance_type = "${var.instance_type}"
max_size = "${var.max_size}"
min_size = "${var.min_size}"
desired_capacity = "${var.desired_capacity}"
vpc_id = "${module.network.vpc_id}"
iam_instance_profile_id = "${aws_iam_instance_profile.ecs.id}"
key_name = "${var.key_name}"
load_balancers = "${var.load_balancers}"
depends_id = "${module.network.depends_id}"
custom_userdata = "${var.custom_userdata}"
cloudwatch_prefix = "${var.cloudwatch_prefix}"
}
module "web-phoenix-service" {
source = "../services/web-phoenix"
environment = "${var.environment}"
vpc_id = "${module.network.vpc_id}"
public_subnet_ids = "${module.network.public_subnet_ids}"
name = "phoenix-web"
deployment_max_percent = "200"
deployment_min_healthy_percent = "100"
max_count = "2"
min_count = "1"
desired_count = "1"
ecs_service_role_name = "${aws_iam_instance_profile.ecs.id}"
access_log_bucket = "${module.s3-log-storage.bucket_id}"
access_log_prefix = "ALB"
}
resource "aws_ecs_cluster" "cluster" {
name = "${var.cluster}"
}
"portMappings": [
{
"hostPort": 0,
"protocol": "tcp",
"containerPort": 80
}
],