Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用Terraform创建目标组始终超时的AWS ECS 地形版本_Amazon Web Services_Terraform_Amazon Ecs - Fatal编程技术网

Amazon web services 使用Terraform创建目标组始终超时的AWS ECS 地形版本

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网关上找

v0.11.3

受影响资源
  • 自动气象站ecs服务
  • aws\u ecs\u任务\u定义
  • 美国航空航天局
  • aws_alb_目标群体
  • aws_alb_侦听器
错误 我正在设置一个ECS群集,目前有一个服务。在不中断服务的情况下启动服务时遇到了一些问题,但现在我的服务似乎无法保持容器运行

服务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 
    }
  ],