You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform配置ECS Fargate挂载EFS时任务卡在pending状态

问题排查与修复方案

你的ECS Fargate任务卡在Pending状态无法挂载EFS,是配置中4处明确错误导致的,按影响优先级逐一修复即可:

1. EFS文件系统策略逻辑反向

你当前配置的EFS策略条件为"aws:SecureTransport": "false",规则含义是仅允许未加密的连接访问EFS,但你在任务定义的EFS卷配置中明确开启了传输加密transit_encryption = "ENABLED",所有来自Fargate的加密连接都会被EFS直接拒绝,根本无法完成挂载。

修复方法

将Condition块内的参数值改为"true",仅允许加密连接,和任务侧配置匹配:

"Condition": {
    "Bool": {
        "aws:SecureTransport": "true"
    }
}

如果不需要强制传输加密,直接删除整个Condition块即可。

2. IAM角色配置错误

  • 你当前任务定义中只配置了task_role_arn,但Fargate挂载EFS的权限需要配置在任务执行角色上,即需要在aws_ecs_task_definition资源中补充execution_role_arn字段,指向你的ecsTaskExecutionRole ARN。
  • 默认的ecsTaskExecutionRole不包含EFS操作权限,需要给该角色附加以下最小权限策略:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticfilesystem:ClientMount",
                "elasticfilesystem:ClientWrite",
                "elasticfilesystem:ClientRootAccess"
            ],
            "Resource": "*"
        }
    ]
}

3. 传输加密端口与安全组规则不匹配

你在EFS卷配置中自定义了transit_encryption_port = 2999,但EFS挂载点的安全组仅放通了2049端口的入站流量,端口不匹配会导致连接被安全组拦截。

修复方法

直接删除transit_encryption_port = 2999这行配置,使用默认的2049端口即可,和现有安全组规则匹配。

4. Terraform资源块语法错误

你贴出的代码中aws_security_group "grafana"资源块缺少闭合的右花括号,在tags块结束后、EFS安全组资源定义前补充}即可,否则执行terraform plan时会直接报语法错误。

可选优化

你已经创建了EFS访问点aws_efs_access_point.test,但任务定义中没有引用该资源,如果需要通过访问点实现目录自动创建、访问权限隔离,可以在efs_volume_configuration块中补充access_point_id = aws_efs_access_point.test.id字段,不添加也不影响基础挂载功能。

所有修改完成后执行terraform apply重新部署服务,任务即可正常启动并挂载EFS卷。

内容的提问来源于stack exchange,提问作者Christine M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 01:15:39