예시: AMI 시작 인덱스 값 - Amazon Elastic Compute Cloud

예시: AMI 시작 인덱스 값

이 예제는 사용자 데이터 및 인스턴스 메타데이터를 사용하여 인스턴스를 구성하는 방법을 보여줍니다.

참고

이 섹션의 예에서는 IMDS의 IPv4 주소(169.254.169.254)를 사용합니다. IPv6 주소를 통해 EC2 인스턴스의 인스턴스 메타데이터를 검색하는 경우, 대신 IPv6 주소([fd00:ec2::254])를 활성화하고 사용해야 합니다. IMDS의 IPv6 주소는 IMDSv2 명령과 호환됩니다. IPv6 주소는 AWS Nitro 시스템에 구축된 인스턴스에서만 액세스할 수 있습니다.

Alice는 데이터베이스 AMI 인스턴스 4개를 시작하여 그 중 첫 번째 인스턴스는 원래 인스턴스의 역할을 하고 나머지 3개는 복제본의 역할을 하도록 하려고 합니다. 그러한 인스턴스는 시작되었을 때 각 복제본의 복제 전략에 대한 사용자 데이터가 추가될 수 있어야 합니다. Alice는 네 인스턴스 모두에서 이 데이터가 사용될 수 있다는 것을 알고 있기 때문에 각 인스턴스가 적용 가능한 부분을 인식할 수 있도록 하는 방식으로 사용자 데이터를 구축해야 합니다. Alice는 ami-launch-index 인스턴스 메타데이터 값을 이용하여 이를 수행할 수 있고 이 값은 각 인스턴스에서 공유합니다. 1개 이상의 인스턴스를 동시에 시작하는 경우 ami-launch-index는 인스턴스가 시작되는 순서를 나타냅니다. 첫 번째 인스턴스의 값은 0입니다.

Alice가 구성한 사용자 데이터는 다음과 같습니다.

replicate-every=1min | replicate-every=5min | replicate-every=10min

replicate-every=1min 데이터는 최초 복제 구성을 정의하고 replicate-every=5min는 두 번째 복제 구성을 정의하는 식으로 동작합니다. Alice는 서로 다른 인스턴스의 데이터 구분자로 파이프 기호(|)를 사용하는 ASCII 문자열로 이 데이터를 제공하려 합니다.

Alice는 run-instances 명령을 사용하여 4개의 인스턴스를 시작하고 사용자 데이터를 지정합니다.

aws ec2 run-instances \ --image-id ami-0abcdef1234567890 \ --count 4 \ --instance-type t2.micro \ --user-data "replicate-every=1min | replicate-every=5min | replicate-every=10min"

시작된 이후 모든 인스턴스는 다음과 같은 사용자 데이터 및 공통 메타데이터 사본을 갖습니다.

  • AMI ID: ami-0abcdef1234567890

  • 예약 ID: r-1234567890abcabc0

  • 퍼블릭 키: 없음

  • 보안 그룹 이름: 기본

  • 인스턴스 유형: t2.micro

그러나 각 인스턴스에는 고유한 특정 메타데이터가 있습니다.

인스턴스 1
Metadata
instance-id i-1234567890abcdef0
ami-launch-index 0
public-hostname ec2-203-0-113-25.compute-1.amazonaws.com
public-ipv4 67.202.51.223
local-hostname ip-10-251-50-12.ec2.internal
local-ipv4 10.251.50.35
인스턴스 2
Metadata
instance-id i-0598c7d356eba48d7
ami-launch-index 1
public-hostname ec2-67-202-51-224.compute-1.amazonaws.com
public-ipv4 67.202.51.224
local-hostname ip-10-251-50-36.ec2.internal
local-ipv4 10.251.50.36
인스턴스 3
Metadata
instance-id i-0ee992212549ce0e7
ami-launch-index 2
public-hostname ec2-67-202-51-225.compute-1.amazonaws.com
public-ipv4 67.202.51.225
local-hostname ip-10-251-50-37.ec2.internal
local-ipv4 10.251.50.37
인스턴스 4
Metadata
instance-id i-1234567890abcdef0
ami-launch-index 3
public-hostname ec2-67-202-51-226.compute-1.amazonaws.com
public-ipv4 67.202.51.226
local-hostname ip-10-251-50-38.ec2.internal
local-ipv4 10.251.50.38

Alice는 ami-launch-index 값을 사용하여 사용자 데이터의 어느 부분이 특정 인스턴스에 적용 가능한지를 결정할 수 있습니다.

  1. Alice는 인스턴스 중 하나에 접속한 다음 해당 인스턴스의 ami-launch-index를 검색하여 복제본인지 확인합니다.

    IMDSv2
    [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/meta-data/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-launch-index 2

    다음 단계의 경우 토큰이 만료되지 않았다고 가정하고 IMDSv2 요청에서 이전 IMDSv2 명령의 저장된 토큰을 사용합니다.

    IMDSv1
    [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-launch-index 2
  2. ami-launch-index를 변수로 저장합니다.

    IMDSv2
    [ec2-user ~]$ ami_launch_index=`curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/ami-launch-index`
    IMDSv1
    [ec2-user ~]$ ami_launch_index=`curl http://169.254.169.254/latest/meta-data/ami-launch-index`
  3. 사용자 데이터를 변수로 저장합니다.

    IMDSv2
    [ec2-user ~]$ user_data=`curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/user-data`
    IMDSv1
    [ec2-user ~]$ user_data=`curl http://169.254.169.254/latest/user-data`
  4. 마지막으로 Alice는 cut 명령을 사용하여 해당 인스턴스에 적용 가능한 사용자 데이터 부분을 추출합니다.

    IMDSv2
    [ec2-user ~]$ echo $user_data | cut -d"|" -f"$ami_launch_index" replicate-every=5min
    IMDSv1
    [ec2-user ~]$ echo $user_data | cut -d"|" -f"$ami_launch_index" replicate-every=5min