Ruby aws-sdk 사용

Ruby aws-sdk 사용

AWS 외부 Jenkins의 cloudformation 플러그인을 사용하여 AWS를 가동했다고 가정합니다. 이제 API 방법을 사용하여 내 로컬 컴퓨터/jenkins에서 AWS를 가동한 후 개인 IP 주소를 얻는 방법은 무엇입니까? AWS 외부(내 로컬)에서 프라이빗 IP를 얻기 위해 Ruby ​​aws-sdk, REST API 메서드를 사용해 보았지만 연결 시간이 초과되었습니다. 다음은 IP 주소/EC2 객체가 생성되지 않고 시간 초과되는 몇 가지 예입니다.

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

REST API 클라이언트 사용 -

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

IP 주소가 포함된 텍스트 파일을 S3에 업로드한 다음 다시 읽어보세요.

  --------------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

저는 AWS를 처음 사용합니다. 누구든지 도움을 주시면 감사하겠습니다.

답변1

다음은 나중에 다른 사람들에게 도움이 될 수 있는 작업 코드입니다. jenkins cloudformation의 일부로 json 파일에서 다음 출력을 사용하세요.

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

Jenkins에서는 스택 이름을 제공해야 합니다. 예를 들어 이름을 "GetPrivateIP"로 지정한 다음 Ruby를 사용하여 IP를 검색합니다.

ENV['GetPrivateIP_GridtoGetIP']

마찬가지로, 다른 프로그래밍 언어에서도 이 환경 변수를 읽을 수 있습니다!

관련 정보