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']
同様に、他のプログラミング言語でもこの環境変数を読むことができます!