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

Ansible ec2_instance模块TagSpecifications参数类型错误求助

问题描述

使用Ansible Core 2.13.4、amazon.aws 3.4.0模块编写Playbook部署AWS EC2实例时,触发TagSpecifications参数类型错误——值为None,但合法类型应为list/tuple。未手动配置该参数,改用已废弃的ec2模块(替换ec2_instance为ec2、image_id为image)可正常运行但会收到废弃警告。

Playbook代码

- name: provisioning Ec2 instance
  hosts: localhost
  connection: local
  tasks:
  - name: launching
    ec2_instance:
      key_name: stackkeypair
      image_id: ami-01216e7612243e0ef
      instance_type: t2.micro
      aws_region: ap-south-1
      wait: yes
      count: 1

      aws_access_key:  <Key given>
      aws_secret_key: < Key given>   

完整报错堆栈

The full traceback is:
Traceback (most recent call last):
  File "/tmp/ansible_ec2_instance_payload_kihlndx5/ansible_ec2_instance_payload.zip/ansible_collections/amazon/aws/plugins/modules/ec2_instance.py", line 1834, in ensure_present
  File "/tmp/ansible_ec2_instance_payload_kihlndx5/ansible_ec2_instance_payload.zip/ansible_collections/amazon/aws/plugins/modules/ec2_instance.py", line 1883, in run_instances
  File "/tmp/ansible_ec2_instance_payload_kihlndx5/ansible_ec2_instance_payload.zip/ansible_collections/amazon/aws/plugins/module_utils/core.py", line 336, in deciding_wrapper
    return retrying_wrapper(*args, **kwargs)
  File "/tmp/ansible_ec2_instance_payload_kihlndx5/ansible_ec2_instance_payload.zip/ansible_collections/amazon/aws/plugins/module_utils/cloud.py", line 118, in _retry_wrapper
    return _retry_func(
  File "/tmp/ansible_ec2_instance_payload_kihlndx5/ansible_ec2_instance_payload.zip/ansible_collections/amazon/aws/plugins/module_utils/cloud.py", line 68, in _retry_func
    return func()
  File "/home/ubuntu/.local/lib/python3.10/site-packages/botocore/client.py", line 514, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/home/ubuntu/.local/lib/python3.10/site-packages/botocore/client.py", line 901, in _make_api_call
    request_dict = self._convert_to_request_dict(
  File "/home/ubuntu/.local/lib/python3.10/site-packages/botocore/client.py", line 962, in _convert_to_request_dict
    request_dict = self._serializer.serialize_to_request(
  File "/home/ubuntu/.local/lib/python3.10/site-packages/botocore/validate.py", line 381, in serialize_to_request
    raise ParamValidationError(report=report.generate_report())
botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid type for parameter TagSpecifications, value: None, type: <class 'NoneType'>, valid types: <class 'list'>, <class 'tuple'>
fatal: [local]: FAILED! => {
    "boto3_version": "1.24.89",
    "botocore_version": "1.27.89",
    "changed": false,
    "invocation": {
        "module_args": {
            "availability_zone": null,
            "aws_access_key": "<key>",
            "aws_ca_bundle": null,
            "aws_config": null,
            "aws_region": "ap-south-1",
            "aws_secret_key": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "count": 1,
            "cpu_credit_specification": null,
            "cpu_options": null,
            "debug_botocore_endpoint_logs": false,
            "detailed_monitoring": null,
            "ebs_optimized": null,
            "ec2_url": null,
            "exact_count": null,
            "filters": {
                "image-id": [
                    "ami-01216e7612243e0ef"
                ],
                "instance-state-name": [
                    "pending",
                    "running",
                    "stopping",
                    "stopped"
                ],
                "subnet-id": "subnet-0d919639655cf3bd0"
            },
            "image": null,
            "image_id": "ami-01216e7612243e0ef",
            "instance_ids": [],
            "instance_initiated_shutdown_behavior": null,
            "instance_role": null,
            "instance_type": "t2.micro",
            "key_name": "stackkeypair",
            "launch_template": null,
            "metadata_options": null,
            "name": null,
            "network": null,
            "placement_group": null,
            "profile": null,
            "purge_tags": false,
            "region": "ap-south-1",
            "security_group": null,
            "security_groups": [],
            "security_token": null,
            "state": "present",
            "tags": null,
            "tenancy": null,
            "termination_protection": null,
            "tower_callback": null,
            "user_data": null,
            "validate_certs": true,
            "volumes": null,
            "vpc_subnet_id": null,
            "wait": true,
            "wait_timeout": 600
        }
    },
    "msg": "Failed to create new EC2 instance: Parameter validation failed:\nInvalid type for parameter TagSpecifications, value: None, type: <class 'NoneType'>, valid types: <class 'list'>, <class 'tuple'>"
}

使用版本

  • ansible [core 2.13.4]
  • python version = 3.10.6 (main, Aug 10 2022, 11:40:04) [GCC 11.3.0]
  • jinja version = 3.0.3
  • boto3_version: "1.24.89"
  • botocore_version: "1.27.89"
  • amazon.aws 3.4.0

问题原因

这是amazon.aws 3.4.0模块与较高版本botocore(1.27.89)之间的兼容性问题。当未配置tags参数时,模块会将TagSpecifications设为None,但新版botocore要求该参数必须是list/tuple类型,不接受None值。而旧版ec2模块内部处理逻辑不同,会自动处理空标签的情况,因此能正常运行。

解决方法

方法1:显式添加空标签列表

在ec2_instance模块中添加tags: []参数,强制将TagSpecifications设为空列表,符合botocore的类型要求:

- name: provisioning Ec2 instance
  hosts: localhost
  connection: local
  tasks:
  - name: launching
    ec2_instance:
      key_name: stackkeypair
      image_id: ami-01216e7612243e0ef
      instance_type: t2.micro
      aws_region: ap-south-1
      wait: yes
      count: 1
      tags: []  # 显式设置空标签列表
      aws_access_key:  <Key given>
      aws_secret_key: < Key given>   

方法2:升级amazon.aws模块到兼容版本

amazon.aws 4.0.0及以上版本已修复该兼容性问题,执行以下命令升级模块:

ansible-galaxy collection install amazon.aws --upgrade

方法3:降级botocore版本

将botocore降级到1.26.x版本(与amazon.aws 3.4.0兼容),执行:

pip install botocore==1.26.89

内容的提问来源于stack exchange,提问作者Sai Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:01:09