Como obter o endereço IP privado do EC2 depois de girar o AWS a partir da máquina local / em Jenkins fora da AWS

1

Suponha que já giramos o AWS usando o plug-in cloudformation do Jenkins fora da AWS e agora, como obter o endereço IP privado depois de girar o AWS na minha máquina / jenkins local usando algum método de API? Eu tentei o ruby aws-sdk, métodos REST API para obter o ip privado fora da AWS (no meu local) e estou ficando esgotado para a conexão. Aqui estão alguns exemplos que não produziram o endereço IP / objetos EC2 e obtendo o tempo limite -

usando o ruby aws-sdk

require 'rubygems'
require 'aws-sdk-v1'
require 'aws-sdk'
AWS.config(:region => "xxxxx",
           :access_key_id => "xxxxx",
           :secret_access_key => "xxxxx")
ec2 =  AWS::EC2.new(
    :region => "xxxxxx",
    :access_key_id => "xxxx",
    :secret_access_key => "xxxxxxx")
ec2.instances.each do |test|
  puts test.id
end

usando o cliente da API REST -

require 'rubygems'
require 'rest-client'
url = "https://ec2.amazonaws.com/?Action=DescribeNatGateways&ImageId=xxxxxxx&access_key_id=xxxxxx&secret_access_key=xxxxxxxx"
response=RestClient::Request.execute(:url =>url, :method => :get, :verify_ssl => false)
puts response

Tentou fazer o upload do arquivo de texto contido no endereço IP para S3 e depois lê-lo de volta -

  --------------cloudformation Json contains the following ---------
"wget -qO- http://169.254.169.254/latest/meta-data/local-pv4>>dockeriseleniumgrid_ip_address\n", "aws s3 cp dockeriseleniumgrid_ip_address s3://xxxxx/dockeriseleniumgrid_ip_address\n"

----------tried reading it from s3 and writing to local machine --------

    require 'aws/s3'
    S3ID = "xxxxx"
    S3KEY = "xxxx"
    # include AWS::S3
    AWS::S3::Base.establish_connection!(
        :access_key_id     => S3ID,
        :secret_access_key => S3KEY
    )
    bucket = AWS::S3::Bucket.find("dockeriseleniumgrid_ip_address")

    File.open("ip_address.txt", "w") do |f|
      f.write(bucket.objects[1].read)
    end

Sou novo na AWS e aprecio se alguém puder ajudar

    
por user176867 18.11.2016 / 21:12

1 resposta

0

aqui está um código de trabalho que pode ajudar os outros no futuro - Use a saída abaixo no arquivo json como parte do jenkins cloudformation

"Outputs": {
    "GridtoGetIP": {
      "Description": "IP Address",
      "Value": {
        "Fn::GetAtt": ["GridtoGetIP", "PrivateIp"]
      }
    }
  }

No Jenkins, você terá que fornecer o nome da pilha, por exemplo - nomeie-o como "GetPrivateIP" e recupere o IP usando ruby como

ENV['GetPrivateIP_GridtoGetIP']

Da mesma forma, você pode ler esta variável de ambiente em outras linguagens de programação !!!

    
por 02.12.2016 / 18:10