Linux 實例:AMI 啟動指數值 - Amazon Elastic Compute Cloud

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

Linux 實例:AMI 啟動指數值

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

注意

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

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