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

使用Ansible部署EC2实例时遭遇MetadataOptions参数未识别错误

EC2实例创建报错:MetadataOptions参数未识别的解决方案

问题根源

从错误栈和日志可以明确:

  • Ansible的ec2模块调用了旧版boto库(boto.ec2.connection)而非boto3来发起EC2 API请求
  • 环境中同时存在新版本的boto3/botocore,导致旧boto库错误地向AWS API传递了MetadataOptions这个新增参数
  • 目标AWS区域的EC2 API端点不支持该参数,因此返回UnknownParameter错误

解决办法

1. 替换为boto3驱动的ec2_instance模块

弃用旧的ec2模块,改用amazon.aws.ec2_instance模块(基于boto3,无兼容问题),修改创建实例的任务代码:

- name: creating Bastion Host
  amazon.aws.ec2_instance:
    name: "Bastion_host"
    key_name: vprofile-key
    region: "{{region}}"
    instance_type: t2.micro
    image_id: "{{bastion_ami}}"
    security_group: "{{BastionSG_out.group_id}}"
    vpc_subnet_id: "{{pubsub1id}}"
    wait: yes
    wait_timeout: 300
    tags:
      Project: Vprofile
      Owner: DevOps Team
    exact_count: 1
    count_tag:
      Name: "Bastion_host"

2. 升级AWS集合与Ansible版本

Ansible 2.10的ec2模块存在兼容性问题,升级到新版本集合和Ansible:

# 升级amazon.aws官方集合
ansible-galaxy collection install amazon.aws --upgrade
# 升级Ansible到稳定版本
sudo apt update && sudo apt install ansible --upgrade

3. 卸载旧版boto库

如果不需要旧boto库,直接卸载它,强制Ansible使用boto3:

sudo pip3 uninstall boto -y

4. 临时指定兼容的EC2 API版本(应急方案)

如果无法升级或卸载,可通过环境变量指定旧版EC2 API,避免触发该参数:

- name: creating Bastion Host
  ec2:
    key_name: vprofile-key
    region: "{{region}}"
    instance_type: t2.micro
    image: "{{bastion_ami}}"
    group_id: "{{BastionSG_out.group_id}}"
    vpc_subnet_id: "{{pubsub1id}}"
    wait: yes
    wait_timeout: 300
    instance_tags:
      Name: "Bastion_host"
      Project: Vprofile
      Owner: DevOps Team
    exact_count: 1
    count_tag: Name
  environment:
    EC2_API_VERSION: "2016-11-15"

验证

修改后执行playbook确认修复:

ansible-playbook bastion-instance.yml -vvv

内容的提问来源于stack exchange,提问作者Ohad Elias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:32:02