如何在 Ruby aws-sdk 中复制这些 shell 命令以切换弹性 IP?

How do I replicate these shell commands in Ruby aws-sdk for switching elastic IPs?

我在我的 AWS Linux 盒子上设置了弹性 IP 切换。我知道 shell 命令来切换 IP 地址。但我不知道如何在 Ruby.

中执行此操作

这是 shell 命令...

  1. 获取实例 ID:

    wget -O - 'http://MY.AWS.IP.HERE/latest/meta-data/instance-id' 2>/dev/null

  2. 分配弹性IP:

    aws ec2 分配地址

  3. 将弹性 IP 与此实例相关联。使用从步骤 1 和 2 返回的实例和分配 ID。

    aws ec2 关联地址 --instance-id INSTANCE_ID_HERE --allocation-id ALLOCATION_ID_HERE

如何使用 Ruby 的 aws-sdk gem 执行这些操作?

更新

这是我的代码

require 'aws-sdk'
require 'json'
require 'pp'

region = 'REGION NAME'
aws_access_key_id = 'SECRET KEY ID'
aws_secret_access_key = 'SECRET ACCESS KEY'
credentials = Aws::Credentials.new(aws_access_key_id, aws_secret_access_key)
client = Aws::EC2::Client.new(
    region: region,
    credentials: credentials
)
pp client
p '==='

describeAddresses = `aws ec2 describe-addresses`
awsHash = JSON.parse(describeAddresses)
pp awsHash
p '==='

getInstanceID = `wget -O - 'http://MY.AWS.IP.HERE/latest/meta-data/instance-id' 2>/dev/null`
instanceID = getInstanceID.split("\n")[-1]
pp instanceID
p '==='

resp = client.allocate_address({
  domain: "vpc", # accepts vpc, standard
})
pp resp
p '==='

resp2 = client.associate_address({
    instance_id: instanceID,
    allocation_id: resp['allocation_id'],
    allow_reassociation: true#,
})
pp resp2
p '==='

更改了 IP,但现在我在执行代码时被 XShell 踢出。但那是针对不同的问题。

1) 你可以在 ruby 中直接发出命令并获取输出 or 你可以使用 httpclient or 其他可以做 http 请求的库

2) 使用allocate_address-instance

3) 使用associate_address

对于 2) 和 3) 您需要使用 AWS Ruby SDK。您在 cmd 行中所做的事情与 api 调用之间几乎存在 1:1 映射