编写获取AWS实例元数据并存入文件的脚本可否用YAML?求分步实现方法
关于是否支持YAML格式编写的说明
YAML本身是数据序列化语言,不具备独立执行能力,无法直接作为可运行的脚本使用。有两种符合YAML相关需求的实现场景是支持的:
- 使用Ansible Playbook实现需求,编写的Playbook本身就是YAML格式文件
- 使用Shell/Python等常规脚本语言编写执行逻辑,最终将获取到的元数据存储为YAML格式的本地文件
方案1:Shell脚本实现,元数据输出为YAML格式
- 步骤1:提前在EC2实例中安装依赖工具
curl和yq,Amazon Linux 2023系统可直接执行命令dnf install curl yq -y完成安装 - 步骤2:新建脚本文件
get_aws_metadata.sh,写入以下内容:
#!/bin/bash # 请求元数据服务v2接口的访问令牌 TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") # 拉取实例元数据并转换为YAML格式存储到本地 curl -s -H "X-aws-ec2-metadata-token: $TOKEN" "http://169.254.169.254/latest/dynamic/instance-identity/document" | yq -o yaml > ./ec2_metadata.yaml
- 步骤3:给脚本添加执行权限:
chmod +x get_aws_metadata.sh - 步骤4:执行脚本:
./get_aws_metadata.sh,执行完成后当前目录生成的ec2_metadata.yaml就是存储了实例元数据的YAML文件
方案2:YAML格式的Ansible Playbook实现
如果你需要编写的文件本身就是YAML格式,可采用该方案:
- 步骤1:确认控制端和目标EC2实例已安装Ansible,可执行
ansible --version验证安装状态 - 步骤2:新建YAML格式的Playbook文件
get_metadata.yml,写入以下内容:
--- - name: 采集AWS EC2实例元数据并存为本地YAML文件 hosts: localhost connection: local gather_facts: no tasks: - name: 获取元数据服务访问令牌 ansible.builtin.uri: url: http://169.254.169.254/latest/api/token method: PUT headers: X-aws-ec2-metadata-token-ttl-seconds: 21600 return_content: yes register: metadata_token - name: 拉取实例元数据 ansible.builtin.uri: url: http://169.254.169.254/latest/dynamic/instance-identity/document headers: X-aws-ec2-metadata-token: "{{ metadata_token.content }}" return_content: yes register: instance_metadata - name: 写入元数据到本地YAML文件 ansible.builtin.copy: content: "{{ instance_metadata.json | to_nice_yaml(indent=2) }}" dest: ./ec2_metadata.yaml
- 步骤3:执行Playbook:
ansible-playbook get_metadata.yml - 步骤4:执行完成后即可在当前目录查看生成的
ec2_metadata.yaml元数据文件
内容的提问来源于stack exchange,提问作者syam reddy
相关产品推荐
相关产品推荐

