http://169.254.169.254/latest/meta-data/placement/availability-zone
오고 마지막 문자를 제거하십시오.
http://169.254.169.254/latest/meta-data/placement/availability-zone
오고 마지막 문자를 제거하십시오.
답변:
해당 URL ( http://169.254.169.254/latest/dynamic/instance-identity/document )이 더 이상 작동하지 않는 것 같습니다. 사용하려고하면 404가 나타납니다. 그래도 작동하는 다음 코드가 있습니다.
EC2_AVAIL_ZONE=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
EC2_REGION="`echo \"$EC2_AVAIL_ZONE\" | sed 's/[a-z]$//'`"
도움이 되었기를 바랍니다.
편집 :sed
의견을 기반으로 개선
ec2-metadata
이 API의 래퍼 일 뿐이지 만 본질적으로 동일한 작업을 수행합니다.
sed 's/[a-z]$//
이를 달성하는 또 다른 방법이 있습니다.
REGION=`curl http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}'`
echo $REGION
us-east-1
404 - Not Found
찾으려고합니다 . GET
us-east-1a
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | jq -r .region
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | awk -F\" '/region/ {print $4}'
ec2-metadata --availability-zone | sed 's/.$//'
데비안 기반 시스템의 경우 명령에는 대시가 없습니다.
ec2metadata --availability-zone | sed 's/.$//'
ec2-metadata --availability-zone | sed 's/placement: \(.*\).$/\1/'
ec2-metadata
기본적으로 사용 가능한 것이 아닌 것 같습니다-설치 지침을 포함시킬 수 있습니까?
정규 표현식을 피하려면 다음을 사용하여 파이썬으로 할 수있는 한 줄짜리입니다.
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | python -c "import json,sys; print json.loads(sys.stdin.read())['region']"
ec2-metadata를 사용할 수 있습니다 :
ec2-metadata -z | grep -Po "(us|sa|eu|ap)-(north|south|central)?(east|west)?-[0-9]+"
eu-central-1
망했어.
central
처음에 답을 쓸 때 존재하지 않았습니다. 지금 추가되었습니다.
awk '{split($2,arr,"-"); print arr[1]"-"arr[2]}'
AZ 이름의 처음 두 구성 요소 만 유지합니다.
eu-west-1
, eu-west-2
그리고 eu-west-3
(이 또한 us-west-1
과 us-west-2
) @OP : 단지 매칭 '[a-z][a-z]-[a-z]*-[0-9][0-9]*'
안전한 것 (기본 정규식입니다, 그것은 확장 RE으로 단축 할 수있다). (현재 정규식은 ca
지역, af
지역 및 지역에서 중단 될 것입니다 me
)
내가 찾은 가장 쉬운
curl -s 169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/.$//'
매우 간단한 하나의 라이너
export AVAILABILITY_ZONE=`wget -qO- http://instance-data/latest/meta-data/placement/availability-zone`
export REGION_ID=${AVAILABILITY_ZONE:0:${#AVAILABILITY_ZONE} - 1}
curl: (6) Could not resolve host: instance-data; Name or service not known
오류입니다.
AWS Java SDK를 사용할 수있는 경우 현재 지역 이름 (예 : "us-east-1", "eu-west-1")을 반환하는 방법이 있습니다.
이것이 내가 찾은 가장 깨끗한 솔루션입니다.
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p'
예 :
export REGION=$(curl -s http://169.254.169.254/latest/dynamic/instance-identity/document |sed -n 's/ "region" : "\(.*\)"/\1/p')
https://unix.stackexchange.com/a/144330/135640 덕분에 bash 4.2 이상을 사용하면 가용 영역에서 마지막 문자를 제거 할 수 있습니다.
$ region=`curl -s 169.254.169.254/latest/meta-data/placement/availability-zone`
$ region=${region::-1}
$ echo $region
us-east-1
이는 AWS가 리전에 추가 된 가용 영역에 대해 단일 문자를 계속 사용한다고 가정합니다.
region=${region%?}
또는 Ubuntu 또는이 도구를 요구 사항으로 만들지 말고 간단히 수행하십시오.
: "${EBS_VOLUME_AVAILABILITY_ZONE:=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)}"
: ${EBS_VOLUME_REGION:="${EBS_VOLUME_AVAILABILITY_ZONE%%*([![:digit:]])}"}
이것은 eu-central-1과 다양한 문자 영역에서 작동합니다. (위의 sed 답변에 답변 할 충분한 담당자가 없습니다)
ec2-metadata --availability-zone | sed 's/[a-z]$//'
ec2metadata --availability-zone | sed 's/.$//'
대시 해야합니다
JS를 사용하여 지역을 얻으려는 경우 다음과 같이 작동합니다.
meta.request("/latest/meta-data/placement/availability-zone",function(err,data){
if(err)
console.log(err);
else{
console.log(data);
str = data.substring(0, data.length - 1);
AWS.config.update({region:str});
ec2 = new AWS.EC2();
}
});
이것은 메타 데이터 API 호출에 대한 응답으로 AWS DOCS에서 찾은 매핑이었습니다.
eu-west-1a :eu-west-1
eu-west-1b :eu-west-1
eu-west-1c :eu-west-1
us-east-1a :us-east-1
us-east-1b :us-east-1
us-east-1c :us-east-1
us-east-1d :us-east-1
ap-northeast-1a :ap-northeast-1
ap-northeast-1b :ap-northeast-1
us-west-1a :us-west-1
us-west-1b :us-west-1
us-west-1c :us-west-1
ap-southeast-1a :ap-southeast-1
ap-southeast-1b :ap-southeast-1
egrep 만 사용하는 방법으로 추가 도구를 설치하지 않고도 대부분의 Linux 인스턴스에서 작동합니다. 현재 모든 AWS 리전 목록과 비교하여 테스트했으며 모두 일치합니다.
curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]'
region=$(curl http://169.254.169.254/latest/meta-data/placement/availability-zone | egrep -o '(\w)+-(\w)+-[0-9]')
이 컬 요청을 사용하여 인스턴스 영역을 얻을 수 있습니다
$ curl http://169.254.169.254/latest/meta-data/placement/region
us-east-1