instance id
Ec2 örneğinin içindeki ec2 örneğini nasıl bulabilirim ?
instance id
Ec2 örneğinin içindeki ec2 örneğini nasıl bulabilirim ?
Yanıtlar:
Konuyla ilgili EC2 belgelerine bakın .
Çalıştırmak:
wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
Bir komut dosyasından örnek kimliğine programlı erişime ihtiyacınız varsa,
die() { status=$1; shift; echo "FATAL: $*"; exit $status; }
EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
Daha gelişmiş bir kullanım örneği (örnek kimliğinin yanı sıra kullanılabilirlik bölgesi ve bölgesi vb. Alın):
EC2_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \"wget instance-id has failed: $?\"`"
test -n "$EC2_INSTANCE_ID" || die 'cannot obtain instance-id'
EC2_AVAIL_ZONE="`wget -q -O - http://169.254.169.254/latest/meta-data/placement/availability-zone || die \"wget availability-zone has failed: $?\"`"
test -n "$EC2_AVAIL_ZONE" || die 'cannot obtain availability-zone'
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed -e 's:\([0-9][0-9]*\)[a-z]*\$:\\1:'`"
Ayrıca kullanabilir curl
yerine wget
sizin platformda yüklü ne bağlı.
$
), bir veya daha fazla küçük harf izleyen bir veya daha fazla rakam bulun. Yalnızca rakamlarla değiştirin. (Backslash + parantez ile hatırlatılmaktadır bir alt, hatırlamak sed \1
.) Ben okumak için bu biraz daha kolay buldum - sadece ters eğik çizgiler tarafından gerekli olanlar sed şunlardır: EC2_REGION="$(echo "$EC2_AVAIL_ZONE" | sed -e 's:\([0-9][0-9]*\)[a-z]*$:\1:')"
.
http://instance-data/
yerine kullanarak ortadan kaldırabilirsiniz169.254.169.254
Amazon Linux AMI'lerde şunları yapabilirsiniz:
$ ec2-metadata -i
instance-id: i-1234567890abcdef0
Veya, Ubuntu ve diğer bazı linux tatlarında, ec2metadata --instance-id
(Bu komut ubuntu'ya varsayılan olarak yüklenmeyebilir, ancak ile ekleyebilirsiniz sudo apt-get install cloud-utils
)
Adından da anlaşılacağı gibi, diğer faydalı meta verileri almak için de komutu kullanabilirsiniz.
-
sonra ec2
. Öyleec2metadata --instance-id
ec2-metadata
, Ubuntu'da öyle görünüyor ec2metadata
.
Ubuntu'da şunları yapabilirsiniz:
sudo apt-get install cloud-utils
Ve sonra şunları yapabilirsiniz:
EC2_INSTANCE_ID=$(ec2metadata --instance-id)
Örnekle ilişkilendirilen meta verilerin çoğunu şu şekilde alabilirsiniz:
ec2metadata --help Sözdizimi: / usr / bin / ec2metadata [seçenekler] EC2 meta verilerini sorgulayın ve görüntüleyin. Herhangi bir seçenek belirtilmezse, tüm seçenekler görüntülenir Seçenekler: -h --help bu yardımı göster --kernel-id çekirdek kimliğini görüntüle --ramdisk-id ramdisk kimliğini görüntüle --reservasyon-id rezervasyon kimliğini göster --ami-id ami kimliğini göster --ami-launch-index ami başlatma dizinini görüntüler --ami-manifest-path ami manifest yolunu görüntüler --ancestor-ami-ids, ami atası kimliğini görüntüler --product-code'lar ami ile ilişkili ürün kodlarını görüntüler - kullanılabilirlik bölgesi, ami yerleşim bölgesini görüntüler --instance-id örnek kimliğini görüntüle --instance-type örnek türünü görüntüler --local-hostname yerel ana bilgisayar adını görüntüler --public-hostname genel ana bilgisayar adını görüntüler --local-ipv4 yerel ipv4 ip adresini görüntüler --public-ipv4 genel ipv4 ip adresini görüntüler --block-device-mapping blok cihaz kimliğini görüntüle --güvenlik grupları güvenlik gruplarını görüntüler --mac örnek mac adresini görüntüler --profile örnek profilini görüntüle --instance-action örnek eylemini görüntüle --public-keys, opensh genel anahtarlarını gösterir --user-data kullanıcı verilerini görüntüler (aslında meta verileri değil)
apt-get install
, bu yardımcı programı içermeyen 0.11-0ubuntu1 sürümünü alır. Daha sonra pakete eklendi .
/dynamic/instance-identity/document
Ayrıca yalnızca örnek kimliğinizden daha fazlasını sorgulamanız gerekiyorsa URL'yi kullanın .
wget -q -O - http://169.254.169.254/latest/dynamic/instance-identity/document
Bu size böyle bir JSON verisi sağlar - tek bir istekle .
{
"devpayProductCodes" : null,
"privateIp" : "10.1.2.3",
"region" : "us-east-1",
"kernelId" : "aki-12345678",
"ramdiskId" : null,
"availabilityZone" : "us-east-1a",
"accountId" : "123456789abc",
"version" : "2010-08-31",
"instanceId" : "i-12345678",
"billingProducts" : null,
"architecture" : "x86_64",
"imageId" : "ami-12345678",
"pendingTime" : "2014-01-23T45:01:23Z",
"instanceType" : "m1.small"
}
For .NET
People:
string instanceId = new StreamReader(
HttpWebRequest.Create("http://169.254.169.254/latest/meta-data/instance-id")
.GetResponse().GetResponseStream())
.ReadToEnd();
Powershell insanlar için:
(New-Object System.Net.WebClient).DownloadString("http://169.254.169.254/latest/meta-data/instance-id")
$instanceId=(Invoke-WebRequest -Uri 'http://169.254.169.254/latest/meta-data/instance-id').Content
Python için:
import boto.utils
region=boto.utils.get_instance_metadata()['local-hostname'].split('.')[1]
hangi tek astar aşağı kaynar:
python -c "import boto.utils; print boto.utils.get_instance_metadata()['local-hostname'].split('.')[1]"
Local_hostname yerine public_hostname kullanabilirsiniz veya:
boto.utils.get_instance_metadata()['placement']['availability-zone'][:-1]
new AWS.MetadataService().request('instance-id',function(error,data) { myInstanceId = data; })
Tüm ec2 makineleri için örnek kimliği dosyada bulunabilir:
/var/lib/cloud/data/instance-id
Aşağıdaki komutu çalıştırarak örnek kimliği de alabilirsiniz:
ec2metadata --instance-id
C:\ProgramData\Amazon\EC2-Windows\Launch\Log\Ec2Launch.log
id örneğini içerir, ancak bir sürü başka önemsiz öğeye de sahiptir.
Bu gönderiye bakın - verilen URL'deki IP adresinin sabit olduğunu (ilk başta beni karıştırdı), ancak döndürülen verilerin örneğinize özgü olduğunu unutmayın.
Ruby için:
require 'rubygems'
require 'aws-sdk'
require 'net/http'
metadata_endpoint = 'http://169.254.169.254/latest/meta-data/'
instance_id = Net::HTTP.get( URI.parse( metadata_endpoint + 'instance-id' ) )
ec2 = AWS::EC2.new()
instance = ec2.instances[instance_id]
Daha çağdaş bir çözüm.
Amazon Linux'tan ec2-metadata komutu zaten yüklü.
Terminalden
ec2-metadata -help
Size mevcut seçenekleri verecek
ec2-metadata -i
geri dönücek
instance-id: yourid
ec2-metadata
sizin ile motd
burada, dokümanlar: coderwall.com/p/hr_9pw/motds-on-amazon-amis
Sadece yaz:
ec2metadata --instance-id
Bunu deneyebilirsiniz:
#!/bin/bash
aws_instance=$(wget -q -O- http://169.254.169.254/latest/meta-data/instance-id)
aws_region=$(wget -q -O- http://169.254.169.254/latest/meta-data/hostname)
aws_region=${aws_region#*.}
aws_region=${aws_region%%.*}
aws_zone=`ec2-describe-instances $aws_instance --region $aws_region`
aws_zone=`expr match "$aws_zone" ".*\($aws_region[a-z]\)"`
Http # API'den EC2 meta verileri için yazdığım bir c # .net sınıfı. Gerektiği gibi işlevsellik ile oluşturacağım. İsterseniz onunla koşabilirsiniz.
using Amazon;
using System.Net;
namespace AT.AWS
{
public static class HttpMetaDataAPI
{
public static bool TryGetPublicIP(out string publicIP)
{
return TryGetMetaData("public-ipv4", out publicIP);
}
public static bool TryGetPrivateIP(out string privateIP)
{
return TryGetMetaData("local-ipv4", out privateIP);
}
public static bool TryGetAvailabilityZone(out string availabilityZone)
{
return TryGetMetaData("placement/availability-zone", out availabilityZone);
}
/// <summary>
/// Gets the url of a given AWS service, according to the name of the required service and the AWS Region that this machine is in
/// </summary>
/// <param name="serviceName">The service we are seeking (such as ec2, rds etc)</param>
/// <remarks>Each AWS service has a different endpoint url for each region</remarks>
/// <returns>True if the operation was succesful, otherwise false</returns>
public static bool TryGetServiceEndpointUrl(string serviceName, out string serviceEndpointStringUrl)
{
// start by figuring out what region this instance is in.
RegionEndpoint endpoint;
if (TryGetRegionEndpoint(out endpoint))
{
// now that we know the region, we can get details about the requested service in that region
var details = endpoint.GetEndpointForService(serviceName);
serviceEndpointStringUrl = (details.HTTPS ? "https://" : "http://") + details.Hostname;
return true;
}
// satisfy the compiler by assigning a value to serviceEndpointStringUrl
serviceEndpointStringUrl = null;
return false;
}
public static bool TryGetRegionEndpoint(out RegionEndpoint endpoint)
{
// we can get figure out the region end point from the availability zone
// that this instance is in, so we start by getting the availability zone:
string availabilityZone;
if (TryGetAvailabilityZone(out availabilityZone))
{
// name of the availability zone is <nameOfRegionEndpoint>[a|b|c etc]
// so just take the name of the availability zone and chop off the last letter
var nameOfRegionEndpoint = availabilityZone.Substring(0, availabilityZone.Length - 1);
endpoint = RegionEndpoint.GetBySystemName(nameOfRegionEndpoint);
return true;
}
// satisfy the compiler by assigning a value to endpoint
endpoint = RegionEndpoint.USWest2;
return false;
}
/// <summary>
/// Downloads instance metadata
/// </summary>
/// <returns>True if the operation was successful, false otherwise</returns>
/// <remarks>The operation will be unsuccessful if the machine running this code is not an AWS EC2 machine.</remarks>
static bool TryGetMetaData(string name, out string result)
{
result = null;
try { result = new WebClient().DownloadString("http://169.254.169.254/latest/meta-data/" + name); return true; }
catch { return false; }
}
/************************************************************
* MetaData keys.
* Use these keys to write more functions as you need them
* **********************************************************
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
instance-action
instance-id
instance-type
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
*************************************************************/
}
}
En son Java SDK'sı EC2MetadataUtils
:
Java dilinde:
import com.amazonaws.util.EC2MetadataUtils;
String myId = EC2MetadataUtils.getInstanceId();
Scala'da:
import com.amazonaws.util.EC2MetadataUtils
val myid = EC2MetadataUtils.getInstanceId
C ++ için (cURL kullanarak):
#include <curl/curl.h>
//// cURL to string
size_t curl_to_str(void *contents, size_t size, size_t nmemb, void *userp) {
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
};
//// Read Instance-id
curl_global_init(CURL_GLOBAL_ALL); // Initialize cURL
CURL *curl; // cURL handler
CURLcode res_code; // Result
string response;
curl = curl_easy_init(); // Initialize handler
curl_easy_setopt(curl, CURLOPT_URL, "http://169.254.169.254/latest/meta-data/instance-id");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_to_str);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
res_code = curl_easy_perform(curl); // Perform cURL
if (res_code != CURLE_OK) { }; // Error
curl_easy_cleanup(curl); // Cleanup handler
curl_global_cleanup(); // Cleanup cURL
Basitçe kontrol var/lib/cloud/instance
o işaret etmelidir, sembolik /var/lib/cloud/instances/{instance-id}
nerede {instance_id}
sizin örnek-kimliğidir.
Python'daki tüm örneklerin kimlik listesini almak istiyorsanız burada kod:
import boto3
ec2=boto3.client('ec2')
instance_information = ec2.describe_instances()
for reservation in instance_information['Reservations']:
for instance in reservation['Instances']:
print(instance['InstanceId'])
FWIW EC2 meta veri hizmetine erişim sağlamak için bir FUSE dosya sistemi yazdım: https://bitbucket.org/dgc/ec2mdfs . Bunu tüm özel AMI'lerde çalıştırıyorum; şu deyimi kullanmama izin veriyor: cat / ec2 / meta-data / ami-id
Go'da goamz paketini kullanabilirsiniz .
import (
"github.com/mitchellh/goamz/aws"
"log"
)
func getId() (id string) {
idBytes, err := aws.GetMetaData("instance-id")
if err != nil {
log.Fatalf("Error getting instance-id: %v.", err)
}
id = string(idBytes)
return id
}
İşte GetMetaData kaynağı.
Kullanıcıdan root olarak bahsettiğiniz soruda, bahsetmem gereken bir şey, örnek kimliğinin kullanıcıya bağlı olmamasıdır.
İçin Düğüm geliştiricileri,
var meta = new AWS.MetadataService();
meta.request("/latest/meta-data/instance-id", function(err, data){
console.log(data);
});
Örnek meta verilerini almak için şunu kullanın:
wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
Meta veri parametrelerinizi ileterek herhangi bir Meta veriyi GET almak için bir HTTP isteği yapabilirsiniz.
curl http://169.254.169.254/latest/meta-data/instance-id
veya
wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
Meta Veriler ve Kullanıcı Verileri almak için HTTP istekleri için faturalandırılmazsınız.
Başka
EC2 örneği Meta Verilerini belgelerde belirtildiği gibi çalışan bir EC2 örneğinden sorgulamak için curl kullanan basit bir bash betiği olan EC2 Örneği Meta Veri Sorgu Aracı'nı kullanabilirsiniz.
Aracı indirin:
$ wget http://s3.amazonaws.com/ec2metadata/ec2-metadata
şimdi gerekli verileri almak için komutu çalıştırın.
$ec2metadata -i
bakınız:
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
https://aws.amazon.com/items/1825?externalID=1825
Memnuniyetle yardım ettim.. :)
PHP için alternatif yaklaşım:
$instance = json_decode(file_get_contents('http://169.254.169.254/latest/dynamic/instance-identity/document'),true);
$id = $instance['instanceId'];
print_r($instance);
Bu, örnekle ilgili bir dizi veri sağlar, hepsi bir dizide güzelce paketlenir, harici bağımlılıklar yoktur. Benim için asla başarısız veya geciktirilmemiş bir istek olduğundan, bu şekilde güvenli olmalı, aksi takdirde curl () için giderdim
PHP için:
$instance = json_decode(file_get_contents('http://169.254.169.254/latest/dynamic/instance-identity/document));
$id = $instance['instanceId'];
@John başına düzenle
Bunu çalıştırın:
curl http://169.254.169.254/latest/meta-data/
Aws tarafından sağlanan farklı nitelik türlerini görebileceksiniz.
EC2 kaynağı ile ilgili tüm meta verilere EC2 örneği tarafından, aşağıdaki komutun çalıştırılmasıyla erişilebilir:
CURL:
http://169.254.169.254/<api-version>/meta-data/<metadata-requested>
Sizin durumunuz için: " meta veri istenen " örnek kimliği olmalıdır , " api sürümü " genellikle en yenidir kullanılabilecek .
Ek Not: Yukarıdaki komutu kullanarak aşağıdaki EC2 öznitelikleriyle ilgili bilgi de alabilirsiniz.
ami-id, ami-başlat-endeksi, ami-manifest-yolu, blok-cihaz-haritalama /, ana bilgisayar adı, iam /, örnek-eylem, örnek-kimliği, örnek-tipi, yerel-ana bilgisayar adı, local-ipv4, mac, metrikler /, ağ /, yerleşim /, profil, genel ana bilgisayar adı, genel ipv4, genel anahtarlar /, rezervasyon kimliği, güvenlik grupları, hizmetler /,
Daha fazla ayrıntı için lütfen şu bağlantıyı izleyin: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
Windows örneği için:
(wget http://169.254.169.254/latest/meta-data/instance-id).Content
veya
(ConvertFrom-Json (wget http://169.254.169.254/latest/dynamic/instance-identity/document).Content).instanceId
AWS elastik beanstalk eb cli çalıştırmak için eb tags --list
169.254.169.254
içinde/etc/hosts
sen, o yaparsa daha güvenli hissetmeniz gerekir ... bakımı.