Ansible ecs_taskdefinition模块报错:cpu等参数不被支持
解决Ansible ecs_taskdefinition模块不支持cpu/launch_type/memory参数的问题
你遇到的问题核心是当前使用的ecs_taskdefinition模块版本过旧,这些适配Fargate的参数是在后续版本的模块中才被新增支持的。下面给你两种可行的解决思路:
方案一:升级AWS相关集合,使用新版模块
旧版本的ecs_taskdefinition模块(比如Ansible 2.9及更早的内置模块、或旧版amazon.aws集合)确实不包含launch_type、cpu、memory这些参数。你需要升级到维护中的community.aws集合:
首先执行命令升级集合:
ansible-galaxy collection install community.aws --upgrade
然后修改任务配置,使用完整的模块名避免调用旧模块,同时补充Fargate必需的execution_role_arn(Fargate需要执行角色来拉取镜像、管理日志等):
- name: 创建/更新Fargate类型ECS任务定义 community.aws.ecs_taskdefinition: family: "{{ taskfamily_name }}" execution_role_arn: "{{ ecs_execution_role.arn }}" # Fargate必填参数 task_role_arn: "{{ ecs_task_role.arn }}" # 按需添加任务角色 containers: - name: "{{ container_name }}" essential: true image: "{{ image_var }}" portMappings: - containerPort: "{{ container_port }}" hostPort: "{{ container_port }}" environment: - name: xyz_ENV value: "{{ env }}" launch_type: FARGATE cpu: "{{ cpu_var }}" memory: "{{ memory_var }}" state: present network_mode: awsvpc requires_compatibilities: - FARGATE # 部分版本需显式声明兼容Fargate
方案二:无法升级时,用AWS CLI替代模块
如果受环境限制无法升级Ansible或集合,可以直接通过aws cli命令注册任务定义,绕过模块的参数限制:
- name: 通过AWS CLI注册ECS任务定义 command: > aws ecs register-task-definition --family {{ taskfamily_name }} --network-mode awsvpc --requires-compatibilities FARGATE --cpu {{ cpu_var }} --memory {{ memory_var }} --execution-role-arn {{ ecs_execution_role.arn }} --task-role-arn {{ ecs_task_role.arn }} --containers '[ { "name": "{{ container_name }}", "essential": true, "image": "{{ image_var }}", "portMappings": [ { "containerPort": {{ container_port }}, "hostPort": {{ container_port }} } ], "environment": [ { "name": "xyz_ENV", "value": "{{ env }}" } ] } ]' environment: AWS_ACCESS_KEY_ID: "{{ aws_access_key }}" AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}" AWS_DEFAULT_REGION: "{{ aws_region }}"
额外注意
- Fargate模式下,
cpu和memory的取值必须符合AWS的配对规则(比如1vCPU对应2GB/4GB内存等),具体可参考AWS官方的规格要求。 - 确保你的AWS凭证拥有
ecs:RegisterTaskDefinition等相关权限。
内容的提问来源于stack exchange,提问作者AJAY YADAV
相关产品推荐
相关产品推荐

