AWS 메타데이터: EC2 인스턴스가 스팟인지 확인하세요.

AWS 메타데이터: EC2 인스턴스가 스팟인지 확인하세요.

거기에AWS 메타데이터에 요청을 보내는 EC2 인스턴스에 대한 일부 정보를 제공하는 서비스입니다 http://169.254.169.254/. 인스턴스가 "Spot"인지 "On Demand"인지 해당 메타데이터에서 알 수 있는 방법이 있는지 궁금합니다.

답변1

메타데이터 내부에서는 정보를 사용할 수 없습니다.

그러나 메타데이터에서 인스턴스 ID를 가져온 다음 ec2-describe-instances를 호출하여 인스턴스에 대한 인스턴스 정보를 얻을 수 있습니다. 해당 인스턴스 설명 안에는 스팟 인스턴스 요청 ID가 있습니다. 비어 있으면 스팟 인스턴스가 아니며, 그렇지 않으면 스팟 인스턴스입니다.

답변2

나는 그들이 메타데이터에 이 정보를 가지고 있다고 믿지 않습니다.

스팟 인스턴스로 시작하는 인스턴스에 대해 다른 프로필을 할당하고 프로필 이름을 사용하여 인스턴스 유형을 결정할 수 있습니다. 이것이 깨끗하거나 실행 가능한 솔루션처럼 보이지 않으면 언제든지 메타 데이터에서 인스턴스 ID를 가져온 다음 ec2-describe-spot-instance-requests --filter instance-id=<instanceid>명령이 빈 값을 반환하면 인스턴스가 스팟 인스턴스가 아닌 경우 명령을 실행하고 명령이 데이터와 함께 반환되면 명령을 실행할 수 있습니다. 스팟 인스턴스.

답변3

나는 이것이 매우 오래된 것이라는 것을 알고 있지만 누군가가 하나의 라이너를 원한다면:

aws ec2 describe-spot-instance-requests \
  --filters Name=instance-id,Values="$(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id)" \
  --region us-east-1 | \
  jq -r '.SpotInstanceRequests | if length > 0 then "spot" else "normal" end'

--region그에 따라 조정

https://gist.github.com/urjitbhatia/c5af8a3d53661cb3d4e896feae23fc1d

답변4

세월이 지나면서 상황이 변한 것 같아서 이제는 작동합니다.

# a spot instance
$ curl -s --fail http://169.254.169.254/latest/meta-data/instance-life-cycle
spot
# a normal instance
$ curl -s --fail http://169.254.169.254/latest/meta-data/instance-life-cycle
on-demand

관련 정보