

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

# 透過執行個體中繼資料擷取目標生命週期狀態
<a name="retrieving-target-lifecycle-state-through-imds"></a>

您啟動的每個 Auto Scaling 執行個體都會經歷多個生命週期狀態。若要調用執行個體中的自訂動作，以便對特定的生命週期狀態轉換採取行動，您必須透過執行個體中繼資料擷取目標生命週期狀態。

例如，您可能需要一種機制來從執行個體內部偵測執行個體終止，以便在執行個體終止之前在其上執行某些程式碼。您可以撰寫程式碼，直接從執行個體輪詢執行個體的生命週期狀態來完成此操作。然後，您可以在 Auto Scaling 群組新增 lifecycle hook，讓執行個體保持運作，直到您的程式碼傳送 **complete-lifecycle-action** 命令以繼續操作。

Auto Scaling 執行個體生命週期具有兩個主穩定狀態 `InService` 和 `Terminated`，以及兩個副穩定狀態 `Detached` 和 `Standby`。如果使用暖集區，則生命週期還有四個額外的穩定狀態：`Warmed:Hibernated`、`Warmed:Running`、`Warmed:Stopped` 以及 `Warmed:Terminated`。

當執行個體準備轉移至上述穩定狀態之一時，Amazon EC2 Auto Scaling 會更新執行個體中繼資料項目 `autoscaling/target-lifecycle-state` 的值。若要從執行個體內獲取目標生命週期狀態，您必須使用執行個體中繼資料服務從執行個體中繼資料中進行擷取。

**注意**  
*執行個體中繼資料*是有關 Amazon EC2 執行個體的資料，可供應用程式用來查詢執行個體資訊。*執行個體中繼資料服務*是一種執行個體上的元件，可供本機程式碼用來存取執行個體中繼資料。本機程式碼可以包括在執行個體上執行的使用者資料指令碼或應用程式。

本機程式碼可使用下列兩種方法之一，從執行中執行個體存取執行個體中繼資料：執行個體中繼資料服務第 1 版 (IMDSv1) 或執行個體中繼資料服務第 2 版 (IMDSv2)。IMDSv2 會使用工作階段導向的請求，並減緩可能用來嘗試存取執行個體中繼資料的幾種漏洞。如需這兩種方法的詳細資訊，請參閱《Amazon EC[IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)2。 *Amazon EC2 *

------
#### [ IMDSv2 ]

```
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state
```

------
#### [ IMDSv1 ]

```
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/autoscaling/target-lifecycle-state
```

------

以下為範例輸出。

```
InService
```

目標生命週期狀態是執行個體正要轉移到的狀態。目前的生命週期狀態是執行個體現在所處的狀態。在生命週期動作完成並且執行個體完成向目標生命週期狀態的轉移後，這二者可能相同。您無法從執行個體中繼資料中擷取執行個體目前的生命週期狀態。

Amazon EC2 Auto Scaling 於 2022 年 3 月 10 日開始生成目標生命週期狀態。如果您的執行個體在該日期之後轉換至目標生命週期狀態之一，則執行個體中繼資料中會出現目標生命週期狀態項目。否則，便會不出現，並且您會收到 HTTP 404 錯誤。

如需擷取執行個體中繼資料的詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[擷取執行個體中繼資料](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)。

有關介紹如何在使用目標生命週期狀態的使用者資料指令碼中使用自訂動作建立 lifecycle hook 的教學課程，請參閱 [教學課程：使用資料指令碼和執行個體中繼資料來擷取生命週期狀態](tutorial-lifecycle-hook-instance-metadata.md)。

**重要**  
為了確保您可以盡快調用自訂動作，您的本機程式碼應該經常輪詢 IMDS，並在發生錯誤時重試。