bsa*_*aka 2 amazon-web-services terraform aws-fargate
我正在使用 Terraform 设置一个由三个 apache 服务器任务组成的小型 Fargate 集群。任务挂起待处理,然后集群停止它们并创建新的待处理任务,然后循环继续。
AWS 文档称这可能是因为:
- Docker 守护进程没有响应
文档说要设置 CloudWatch 以查看 CPU 使用情况并根据需要增加容器大小。我已将 CPU/内存提高到 1024/2048,但这并没有解决问题。
- Docker 镜像很大
不太可能?图像无非是httpd:2.4
- ECS 容器代理在任务启动过程中失去了与 Amazon ECS 服务的连接
该文档提供了一些在容器实例中运行的命令。为此,我似乎必须直接设置 AWS Systems Manager或SSH。如果我的 Terraform 配置没有发现任何问题,我将采用此路线。
- ECS 容器代理需要很长时间才能停止现有任务
不太可能,因为我正在启动一个全新的 ECS 集群
以下是我的 Terraform 文件的 ECS 和 IAM 部分。为什么我的 Fargate 任务可能会陷入待处理状态?
#
# ECS
#
resource "aws_ecs_cluster" "main" {
name = "main-ecs-cluster"
}
resource "aws_ecs_task_definition" "app" {
family = "app"
network_mode = "awsvpc"
requires_compatibilities = ["FARGATE"]
cpu = 256
memory = 512
execution_role_arn = aws_iam_role.task_execution.arn
task_role_arn = aws_iam_role.task_execution.arn
container_definitions = <<DEFINITION
[
{
"image": "httpd:2.4",
"cpu": 256,
"memory": 512,
"name": "app",
"networkMode": "awsvpc",
"portMappings": [
{
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}
]
}
]
DEFINITION
}
resource "aws_ecs_service" "main" {
name = "tf-ecs-service"
cluster = aws_ecs_cluster.main.id
task_definition = aws_ecs_task_definition.app.arn
desired_count = 2
launch_type = "FARGATE"
network_configuration {
security_groups = [aws_security_group.main.id]
subnets = [
aws_subnet.public1.id,
aws_subnet.public2.id,
]
}
}
#
# IAM
#
resource "aws_iam_role" "task_execution" {
name = "my-first-service-task-execution-role"
assume_role_policy = data.aws_iam_policy_document.task_execution.json
}
data "aws_iam_policy_document" "task_execution" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["ecs-tasks.amazonaws.com"]
}
}
}
resource "aws_iam_role_policy_attachment" "task_execution" {
role = aws_iam_role.task_execution.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy"
}
Run Code Online (Sandbox Code Playgroud)
根据评论中的讨论,确定该问题是由于Fargate 任务缺乏互联网访问造成的。
这是因为任务在私有子网中运行,而任务使用httpd
来自 docker hub 的映像。从中心提取图像需要访问互联网。
可能的解决方案是使用 NAT 网关/实例、使用公共子网中的任务或在 ECR 中使用自定义映像。
归档时间: |
|
查看次数: |
6745 次 |
最近记录: |