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

如何批量将多台EC2实例从IMDSv1迁移至IMDSv2?

批量更新AWS EC2实例元数据选项的方法

当然有无需逐个指定--instance-id就能批量更新数百台EC2实例的方法,以下是几种实用方案:

1. AWS CLI + Shell 脚本

这是轻量且无需额外工具的方案,先筛选目标实例再批量执行修改:

# 获取符合条件的实例ID(示例:运行中、带Production标签的实例)
INSTANCE_IDS=$(aws ec2 describe-instances \
  --filters "Name=instance-state-name,Values=running" "Name=tag:Environment,Values=Production" \
  --query "Reservations[*].Instances[*].InstanceId" \
  --output text)

# 循环修改元数据选项
for INSTANCE in $INSTANCE_IDS; do
  aws ec2 modify-instance-metadata-options \
    --instance-id $INSTANCE \
    --http-tokens required \
    --http-endpoint enabled
done

你可以调整--filters参数来精准筛选实例(比如按实例类型、VPC),并修改--http-tokens和--http-endpoint为实际需要的配置。

2. AWS Systems Manager 自动化文档

无需编写代码,直接通过控制台批量操作:

  • 进入AWS Systems Manager控制台的自动化页面,点击执行自动化
  • 搜索并选择AWS-ModifyInstanceMetadataOptions官方文档
  • 在输入参数中,通过标签、资源组或手动输入列表指定目标实例,设置元数据选项参数
  • 执行后SSM会自动批量处理所有目标实例

3. Python Boto3 脚本

适合需要复杂逻辑(如分批次、错误重试)的场景:

import boto3

ec2 = boto3.client('ec2')

# 获取目标实例
response = ec2.describe_instances(
    Filters=[
        {'Name': 'instance-state-name', 'Values': ['running']},
        {'Name': 'tag:Team', 'Values': ['DevOps']}
    ]
)

instance_ids = [inst['InstanceId'] for res in response['Reservations'] for inst in res['Instances']]

# 分批次修改(避免API请求限制)
for batch in [instance_ids[i:i+20] for i in range(0, len(instance_ids), 20)]:
    for instance_id in batch:
        try:
            ec2.modify_instance_metadata_options(
                InstanceId=instance_id,
                HttpTokens='required',
                HttpEndpoint='enabled'
            )
            print(f"Updated {instance_id} successfully")
        except Exception as e:
            print(f"Failed to update {instance_id}: {str(e)}")

关于Ansible的补充

用Ansible完全不算大题小做——如果你的环境已经在用Ansible管理基础设施,编写playbook反而更规范、易维护:

- name: Update EC2 instance metadata options
  hosts: localhost
  gather_facts: no
  tasks:
    - name: Fetch target EC2 instances
      amazon.aws.ec2_instance_info:
        filters:
          instance-state-name: running
          tag:Environment: Production
      register: ec2_instances

    - name: Modify metadata settings
      amazon.aws.ec2_instance_metadata:
        instance_id: "{{ item.instance_id }}"
        http_tokens: required
        http_endpoint: enabled
      loop: "{{ ec2_instances.instances }}"

这个playbook可以集成到你的自动化流水线中,后续调整配置或扩展筛选条件都很方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:25:28