識別單一請求中啟動的每個執行個體 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

識別單一請求中啟動的每個執行個體

此範例示範如何使用使用者資料和執行個體中繼資料來設定 Amazon EC2執行個體。

注意

本節中的範例使用 IMDS: IPv4的地址169.254.169.254。如果您要透過 IPv6 地址擷取執行個體的EC2執行個體中繼資料,請務必啟用並使用IPv6地址:[fd00:ec2::254]。IPv6 的地址與 IMDSv2 命令IMDS相容。該IPv6地址只能在 IPv6支援的子網路 (雙堆疊或IPv6僅限 ) 中的 Nitro 型執行個體上存取。

Alice 想要啟動她最愛的資料庫的四個執行個體AMI,第一個執行個體做為原始執行個體,其餘三個執行個體做為複本。當她啟動這些執行個體時,她想要為每個複本新增關於複寫策略的使用者資料。她知道資料將會在四個執行個體上可用,因此她需要使用允許每個執行個體識別其適用部分的方式架構使用者資料。她可以使用 ami-launch-index 執行個體中繼資料值執行此作業,每一個執行個體的該值都是唯一的。如果您同時啟動一個以上的執行個體,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 命令啟動四個執行個體,指定使用者資料。

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

不過,每個執行個體都有唯一的中繼資料,如下表所示。

中繼資料 Value
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
中繼資料 Value
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
中繼資料 Value
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
中繼資料 Value
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. 她連線到其中一個執行個體,擷取該執行個體的 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