如何使用AWS Ruby SDK 3列出AWS账户中的所有VPC?
使用AWS Ruby SDK列出所有VPC的正确方法
前提准备
安装AWS SDK for Ruby v3:
gem install aws-sdk-ec2或者在Gemfile中添加:
gem 'aws-sdk-ec2'然后执行
bundle install配置AWS凭证:可通过以下方式之一:
- 设置环境变量
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY - 在
~/.aws/credentials文件中配置凭证 - 若在AWS EC2/EKS等资源上运行,直接使用IAM角色权限
- 设置环境变量
核心代码实现
使用Aws::EC2::Client的describe_vpcs方法即可获取账户下的VPC列表,示例代码:
require 'aws-sdk-ec2' # 初始化EC2客户端(若未指定区域,会使用默认配置或环境变量中的AWS_REGION) ec2_client = Aws::EC2::Client.new(region: 'us-east-1') # 调用describe_vpcs获取所有VPC response = ec2_client.describe_vpcs # 遍历并输出VPC信息 response.vpcs.each do |vpc| puts "VPC ID: #{vpc.vpc_id}" puts "CIDR块: #{vpc.cidr_block}" puts "状态: #{vpc.state}" puts "-------------------------" end
跨区域获取所有VPC
如果需要获取账户下所有区域的VPC,可先获取所有可用区域,再逐个区域调用:
require 'aws-sdk-ec2' # 先获取所有AWS区域 ec2_global = Aws::EC2::Client.new(region: 'us-east-1') regions = ec2_global.describe_regions.regions.map(&:region_name) regions.each do |region| puts "\n=== 区域: #{region} ===" ec2_client = Aws::EC2::Client.new(region: region) begin response = ec2_client.describe_vpcs if response.vpcs.empty? puts "该区域无VPC" else response.vpcs.each do |vpc| puts "VPC ID: #{vpc.vpc_id}, CIDR: #{vpc.cidr_block}" end end rescue Aws::EC2::Errors::AccessDenied puts "无该区域权限" end end
关键说明
describe_vpcs支持过滤条件,比如按标签、CIDR块等筛选,示例:response = ec2_client.describe_vpcs(filters: [{ name: 'tag:Name', values: ['prod-vpc'] }])- 确保你的AWS凭证拥有
ec2:DescribeVpcs权限,否则会返回权限错误。
内容的提问来源于stack exchange,提问作者Peter Ruan
相关产品推荐
相关产品推荐

