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

时间:2015-08-28 17:53:04

标签: ruby shell amazon-web-services amazon-ec2 aws-sdk

我的AWS Linux盒子上设置了弹性IP切换功能。我知道用于切换IP地址的shell命令。但是我不知道如何在Ruby中做到这一点。

这是shell命令......

  1. 获取实例ID:

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

  2. 分配弹性IP:

    aws ec2 allocate-address

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

    aws ec2 associate-address --instance-id INSTANCE_ID_HERE --allocation-id ALLOCATION_ID_HERE

  4. 如何使用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 个答案:

答案 0 :(得分:1)

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

2)使用allocate_address-instance

3)使用associate_address

for 2)和3)你需要使用AWS Ruby SDK。您在cmd行中执行的操作与api调用的内容之间几乎有1:1的映射