

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

# 來自 Amazon EMR 的 CloudWatch 事件和指標
<a name="emr-manage-cluster-cloudwatch"></a>

使用事件和指標來追蹤 Amazon EMR 叢集的活動和運作狀態。事件有助於監控叢集中的特定事件，例如叢集的狀態從「開始」變為「執行中」。指標有助於監控特定值，例如 HDFS 在叢集中所使用的可用磁碟空間百分比。

如需 CloudWatch Events 的詳細資訊，請參閱 [Amazon CloudWatch Events 使用者指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/)。如需 CloudWatch 指標的詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的[使用 Amazon CloudWatch 指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)和[建立 Amazon CloudWatch 警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。

**Topics**
+ [使用 CloudWatch 來監控 Amazon EMR 指標](UsingEMR_ViewingMetrics.md)
+ [透過 CloudWatch 監控 Amazon EMR 事件](emr-manage-cloudwatch-events.md)
+ [從 Amazon EMR 回應 CloudWatch 事件](emr-events-response.md)

# 使用 CloudWatch 來監控 Amazon EMR 指標
<a name="UsingEMR_ViewingMetrics"></a>

指標會每五分鐘更新一次，並自動收集和推送到每個 Amazon EMR 叢集的 CloudWatch。此間隔無法設定。在 CloudWatch 中報告的 Amazon EMR 指標不收取任何費用。這些五分鐘資料點指標會封存 63 天，之後會捨棄這些資料。

## 如何使用 Amazon EMR 指標？
<a name="UsingEMR_ViewingMetrics_HowDoI"></a>

下表顯示 Amazon EMR 報告的指標常見用法。這些是協助您開始的建議，而不是完整清單。若需 Amazon EMR 報告的指標完整清單，請參閱 [CloudWatch 中的 Amazon EMR 報告的指標](#UsingEMR_ViewingMetrics_MetricsReported)。


****  

| 運作方式？ | 相關指標 | 
| --- | --- | 
| 追蹤我的叢集進度 | 查看 RunningMapTasks、RemainingMapTasks、RunningReduceTasks，和 RemainingReduceTasks 指標。 | 
| 偵測閒置叢集 | IsIdle 指標會追蹤叢集是否處於活動狀態，而非目前正在執行的任務。當叢集已閒置一段指定時間 (例如 30 分鐘) 時，您可以設置警示以將其觸發。 | 
| 偵測節點何時耗盡儲存空間 | MRUnhealthyNodes 指標會追蹤一個或多個核心節點或任務節點何時耗盡本機磁碟儲存空間並轉換為 UNHEALTHY YARN 狀態。例如，核心節點或任務節點的磁碟空間不足，將無法執行任務。 | 
| 偵測叢集何時耗盡儲存空間 | 該 HDFSUtilization 指標會監控叢集的合併 HDFS 容量，並且可能需要調整叢集大小才能新增更多核心節點。例如，HDFS 使用率很高，可能會影響作業和叢集運作狀態。 | 
| 偵測叢集何時在容量減少的情況下執行 | MRLostNodes 指標會追蹤一個或多個核心節點或任務節點無法與主節點通訊。例如，主節點無法存取核心節點或任務節點。 | 

如需詳細資訊，請參閱 [Amazon EMR 叢集終止 NO\$1SLAVE\$1LEFT 和核心節點 FAILED\$1BY\$1MASTER](emr-cluster-NO_SLAVE_LEFT-FAILED_BY_MASTER.md) 和 [AWSSupport-AnalyzeEMRLogs](https://docs.aws.amazon.com//systems-manager-automation-runbooks/latest/userguide/automation-awssupport-analyzeemrlogs.html)。

## 存取 Amazon EMR 的 CloudWatch 指標
<a name="UsingEMR_ViewingMetrics_Access"></a>

可以使用 Amazon EMR 主控台或 CloudWatch 主控台來檢視 Amazon EMR 向 CloudWatch 報告的指標。也可以使用 CloudWatch CLI 命令 `[mon-get-stats](https://docs.aws.amazon.com/AmazonCloudWatch/latest/cli/cli-mon-get-stats.html)` 或 CloudWatch `[GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)` API 來擷取指標。如需有關使用 CloudWatch 來檢視或擷取 Amazon EMR 指標的詳細資訊，請參閱 [Amazon CloudWatch 使用者指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/)。

------
#### [ Console ]

**使用主控台檢視指標**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格的 **EMR on EC2** 下，選擇**叢集**，然後選擇您要檢視其指標的叢集。這會開啟叢集詳細資訊頁面。

1. 選取叢集詳細資訊頁面中的**監控**索引標籤。選擇**叢集狀態**、**節點狀態**或**輸入和輸出**選項中的任何一個，載入有關叢集進度和運作狀態的報告。

1. 選擇要檢視的指標後，可以放大每個圖形。若要篩選圖形的時間範圍，請選取預先填入的選項或選擇**自訂**。

------

## CloudWatch 中的 Amazon EMR 報告的指標
<a name="UsingEMR_ViewingMetrics_MetricsReported"></a>

下表列出 Amazon EMR 在主控台中報告並推送至 CloudWatch 的指標。

### Amazon EMR 指標
<a name="emr-metrics-reported"></a>

Amazon EMR 會將多個指標的資料傳送到 CloudWatch。所有 Amazon EMR 叢集每隔五分鐘自動傳送一次指標。指標將封存兩週，之後即會捨棄資料。

`AWS/ElasticMapReduce` 命名空間包含下列指標。

**注意**  
Amazon EMR 從叢集中提取指標。如果叢集無法連接，則不會報告指標，除非叢集再次可用。

以下指標可用於執行 Hadoop 2.x 版本的叢集。


| 指標 | Description | 
| --- | --- | 
| 叢集狀態 | 
| IsIdle  | 指出叢集不再執行工作，但仍然處於作用中狀態並會產生費用。如果未執行任何任務，而且未執行任何工作，則會設為 1，否則設為 0。每隔五分鐘檢查一次此值，值 1 表示叢集只在檢查時為閒置狀態，而不是整個五分鐘都閒置。為了避免誤判，此值已為 1 且持續多個連續 5 分鐘檢查時，您應該發出警示。例如，如果此值已為 1 且持續 30 分鐘 (含) 以上，則您可以對此值發出警示。 使用案例：監控叢集效能 單位：*布林值*  | 
| ContainerAllocated  | ResourceManager 所配置的資源容器數目。 使用案例：監控叢集進度 單位：*計數*  | 
| ContainerReserved  | 保留容器數目。 使用案例：監控叢集進度 單位：*計數*  | 
| ContainerPending  | 佇列中尚未配置的容器數目。 使用案例：監控叢集進度 單位：*計數*  | 
| ContainerPendingRatio  | 擱置中容器與已配置容器的比率 (ContainerPendingRatio = ContainerPending / ContainerAllocated)。如果 ContainerAllocated = 0，則 ContainerPendingRatio = ContainerPending。ContainerPendingRatio 的值代表數字，而不是百分比。此值適用於根據容器配置行為來調整叢集資源。 單位：*計數*  | 
| AppsCompleted  | 提交給已完成 YARN 的應用程式數目。 使用案例：監控叢集進度 單位：*計數*  | 
| AppsFailed  | 提交給無法完成之 YARN 的應用程式數目。 使用案例：監控叢集進度、監控叢集運作狀態 單位：*計數*  | 
| AppsKilled  | 提交給已刪除 YARN 的應用程式數目。 使用案例：監控叢集進度、監控叢集運作狀態 單位：*計數*  | 
| AppsPending  | 提交給處於擱置中狀態之 YARN 的應用程式數目。 使用案例：監控叢集進度 單位：*計數*  | 
| AppsRunning  | 提交給執行中 YARN 的應用程式數目。 使用案例：監控叢集進度 單位：*計數*  | 
| AppsSubmitted  | 提交給 YARN 的應用程式數目。 使用案例：監控叢集進度 單位：*計數*  | 
| 節點狀態 | 
| CoreNodesRunning  | 運作中核心節點數目。只有在對應的執行個體群組存在時，才會報告此指標的資料點。 使用案例：監控叢集運作狀態 單位：*計數*  | 
| CoreNodesPending  | 等待進行指派的核心節點數目。所有要求的核心節點可能都無法立即可用；此指標報告擱置中要求。只有在對應的執行個體群組存在時，才會報告此指標的資料點。 使用案例：監控叢集運作狀態 單位：*計數*  | 
| LiveDataNodes  | 將接收來自 Hadoop 之工作的資料節點百分比。 使用案例：監控叢集運作狀態 單位：百分比**  | 
| MRTotalNodes  | 目前可供 MapReduce 工作使用的節點數目。相當於 YARN 指標 `mapred.resourcemanager.TotalNodes`。 使用案例：監控叢集進度 單位：*計數* 注意：MRTotalNodes 只會計數系統中目前作用中的節點。YARN 會自動從此計數中移除終止的節點，並停止追蹤它們，因此不會在 MRTotalNodes 指標中考慮它們。  | 
| MRActiveNodes  | 目前執行 MapReduce 任務或工作的節點數目。相當於 YARN 指標 `mapred.resourcemanager.NoOfActiveNodes`。 使用案例：監控叢集進度 單位：*計數*  | 
| MRLostNodes  | 配置給已標記為 LOST 狀態之 MapReduce 的節點數目。相當於 YARN 指標 `mapred.resourcemanager.NoOfLostNodes`。 使用案例：監控叢集運作狀態、監控叢集進度 單位：*計數*  | 
| MRUnhealthyNodes  | 可供標記為 UNHEALTHY 狀態之 MapReduce 工作使用的節點數目。相當於 YARN 指標 `mapred.resourcemanager.NoOfUnhealthyNodes`。 使用案例：監控叢集進度 單位：*計數*  | 
| MRDecommissionedNodes  | 配置給已標記為 DECOMMISSIONED 狀態之 MapReduce 應用程式的節點數目。相當於 YARN 指標 `mapred.resourcemanager.NoOfDecommissionedNodes`。 使用案例：監控叢集運作狀態、監控叢集進度 單位：*計數*  | 
| MRRebootedNodes  | 可供已重新啟動與標記為 REBOOTED 狀態之 MapReduce 使用的節點數目。相當於 YARN 指標 `mapred.resourcemanager.NoOfRebootedNodes`。 使用案例：監控叢集運作狀態、監控叢集進度 單位：*計數*  | 
| MultiMasterInstanceGroupNodesRunning  | 執行中主節點的數量。 使用案例：監控主節點故障情形和替換狀況 單位：*計數*  | 
| MultiMasterInstanceGroupNodesRunningPercentage  | 超過所請求主節點執行個體計數的主節點百分比。 使用案例：監控主節點故障情形和替換狀況 單位：百分比**  | 
| MultiMasterInstanceGroupNodesRequested  | 請求的主節點數量。 使用案例：監控主節點故障情形和替換狀況 單位：*計數*  | 
| IO | 
| S3BytesWritten  | 寫入至 Amazon S3 的位元組數目。此指標只會彙整 MapReduce 作業，並不適用於 Amazon EMR 上的其他作業負載。 使用案例：分析叢集效能、監控叢集進度 單位：*計數*  | 
| S3BytesRead  | 讀取自 Amazon S3 的位元組數目。此指標只會彙整 MapReduce 作業，並不適用於 Amazon EMR 上的其他作業負載。 使用案例：分析叢集效能、監控叢集進度 單位：*計數*  | 
| HDFSUtilization  | 目前使用中 HDFS 儲存體百分比。 使用案例：分析叢集效能 單位：百分比**  | 
| HDFSBytesRead  | 讀取自 HDFS 的位元組數目。此指標只會彙整 MapReduce 作業，並不適用於 Amazon EMR 上的其他作業負載。 使用案例：分析叢集效能、監控叢集進度 單位：*計數*  | 
| HDFSBytesWritten  | 寫入至 HDFS 的位元組數目。此指標只會彙整 MapReduce 作業，並不適用於 Amazon EMR 上的其他作業負載。 使用案例：分析叢集效能、監控叢集進度 單位：*計數*  | 
| MissingBlocks  | HDFS 在其中沒有複本的區塊數目。這些可能是毀損區塊。 使用案例：監控叢集運作狀態 單位：*計數*  | 
| CorruptBlocks  | HDFS 報告為毀損的區塊數目。 使用案例：監控叢集運作狀態 單位：*計數*  | 
| TotalLoad  | 並行資料傳送總次數。 使用案例：監控叢集運作狀態 單位：*計數*  | 
| MemoryTotalMB  | 叢集中的總記憶體量。 使用案例：監控叢集進度 單位：*計數*  | 
| MemoryReservedMB  | 保留記憶體數量。 使用案例：監控叢集進度 單位：*計數*  | 
| MemoryAvailableMB  | 可供配置的記憶體數量。 使用案例：監控叢集進度 單位：*計數*  | 
| YARNMemoryAvailablePercentage  | 可供 YARN 使用的剩餘記憶體百分比 (YARNMemoryAvailablePercentage = MemoryAvailableMB / MemoryTotalMB)。此值適用於根據 YARN 記憶體用量來調整叢集資源。 單位：百分比**  | 
| MemoryAllocatedMB  | 已配置給叢集的記憶體數量。 使用案例：監控叢集進度 單位：*計數*  | 
| PendingDeletionBlocks  | 標記進行刪除的區塊數目。 使用案例：監控叢集進度、監控叢集運作狀態 單位：*計數*  | 
| UnderReplicatedBlocks  | 需要複寫一或多次的區塊數目。 使用案例：監控叢集進度、監控叢集運作狀態 單位：*計數*  | 
| DfsPendingReplicationBlocks  | 區塊複寫狀態：正在複寫的區塊、複寫要求存留期，以及失敗的複寫要求。 使用案例：監控叢集進度、監控叢集運作狀態 單位：*計數*  | 
| CapacityRemainingGB  | 剩餘 HDFS 磁碟容量的數量。 使用案例：監控叢集進度、監控叢集運作狀態 單位：*計數*  | 

下列是 Hadoop 1 指標：


| 指標 | Description | 
| --- | --- | 
| 叢集狀態 | 
| IsIdle  | 指出叢集不再執行工作，但仍然處於作用中狀態並會產生費用。如果未執行任何任務，而且未執行任何工作，則會設為 1，否則設為 0。每隔五分鐘檢查一次此值，值 1 表示叢集只在檢查時為閒置狀態，而不是整個五分鐘都閒置。為了避免誤判，此值已為 1 且持續多個連續 5 分鐘檢查時，您應該發出警示。例如，如果此值已為 1 且持續 30 分鐘 (含) 以上，則您可以對此值發出警示。 使用案例：監控叢集效能 單位：*布林值*  | 
| JobsRunning  | 叢集中目前正在執行的工作數目。 使用案例：監控叢集運作狀態 單位：*計數*  | 
| JobsFailed  | 叢集中失敗的工作數目。 使用案例：監控叢集運作狀態 單位：*計數*  | 
| 對應/降低 | 
| MapTasksRunning  | 每個工作的執行中對應任務數目。如果您已安裝排程器，並且有多個工作正在執行，則會產生多個圖形。 使用案例：監控叢集進度 單位：*計數*  | 
| MapTasksRemaining  | 每個工作的剩餘對應任務數目。如果您已安裝排程器，並且有多個工作正在執行，則會產生多個圖形。剩餘對應任務就是未處於下列任何狀態的任務：執行中、已刪除或已完成。 使用案例：監控叢集進度 單位：*計數*  | 
| MapSlotsOpen  | 未使用的對應任務容量。這計算為指定叢集的對應任務數目上限，小於目前在該叢集中執行的對應任務總數。 使用案例：分析叢集效能 單位：*計數*  | 
| RemainingMapTasksPerSlot  | 剩餘對應任務總數與叢集中可用對應槽總數的比率。 使用案例：分析叢集效能 單位：*比率*  | 
| ReduceTasksRunning  | 每個工作的執行中降低任務數目。如果您已安裝排程器，並且有多個工作正在執行，則會產生多個圖形。 使用案例：監控叢集進度 單位：*計數*  | 
| ReduceTasksRemaining  | 每個工作的剩餘降低任務數目。如果您已安裝排程器，並且有多個工作正在執行，則會產生多個圖形。 使用案例：監控叢集進度 單位：*計數*  | 
| ReduceSlotsOpen  | 未使用的降低任務容量。這計算為指定叢集的降低任務容量上限，小於目前在該叢集中執行的降低任務總數。 使用案例：分析叢集效能 單位：*計數*  | 
| 節點狀態 | 
| CoreNodesRunning  | 運作中核心節點數目。只有在對應的執行個體群組存在時，才會報告此指標的資料點。 使用案例：監控叢集運作狀態 單位：*計數*  | 
| CoreNodesPending  | 等待進行指派的核心節點數目。所有要求的核心節點可能都無法立即可用；此指標報告擱置中要求。只有在對應的執行個體群組存在時，才會報告此指標的資料點。 使用案例：監控叢集運作狀態 單位：*計數*  | 
| LiveDataNodes  | 將接收來自 Hadoop 之工作的資料節點百分比。 使用案例：監控叢集運作狀態 單位：百分比**  | 
| TaskNodesRunning  | 運作中任務節點數目。只有在對應的執行個體群組存在時，才會報告此指標的資料點。 使用案例：監控叢集運作狀態 單位：*計數*  | 
| TaskNodesPending  | 等待指派的任務節點數目。所有要求的任務節點可能都無法立即可用；此指標報告擱置中要求。只有在對應的執行個體群組存在時，才會報告此指標的資料點。 使用案例：監控叢集運作狀態 單位：*計數*  | 
| LiveTaskTrackers  | 運作中任務追蹤器百分比。 使用案例：監控叢集運作狀態 單位：百分比**  | 
| IO | 
| S3BytesWritten  | 寫入至 Amazon S3 的位元組數目。此指標只會彙整 MapReduce 作業，並不適用於 Amazon EMR 上的其他作業負載。 使用案例：分析叢集效能、監控叢集進度 單位：*計數*  | 
| S3BytesRead  | 讀取自 Amazon S3 的位元組數目。此指標只會彙整 MapReduce 作業，並不適用於 Amazon EMR 上的其他作業負載。 使用案例：分析叢集效能、監控叢集進度 單位：*計數*  | 
| HDFSUtilization  | 目前使用中 HDFS 儲存體百分比。 使用案例：分析叢集效能 單位：百分比**  | 
| HDFSBytesRead  | 讀取自 HDFS 的位元組數目。 使用案例：分析叢集效能、監控叢集進度 單位：*計數*  | 
| HDFSBytesWritten  | 寫入至 HDFS 的位元組數目。 使用案例：分析叢集效能、監控叢集進度 單位：*計數*  | 
| MissingBlocks  | HDFS 在其中沒有複本的區塊數目。這些可能是毀損區塊。 使用案例：監控叢集運作狀態 單位：*計數*  | 
| TotalLoad  | 叢集中所有 DataNodes 所報告的目前讀取者與寫入者總數。 使用案例：診斷高 I/O 可能造成工作執行效能不佳的程度。執行 DataNode 協助程式的工作者節點也必須執行對應與降低任務。一段時間持續具有高 TotalLoad 值，可能表示高 I/O 或為效能不佳的影響因素。此值偶而爆增為正常現象，不一定表示發生問題。 單位：*計數*  | 

#### 叢集容量指標
<a name="emr-metrics-managed-scaling"></a>

下列指標可指出叢集的目前或目標容量。只有在啟用受管擴展或自動終止後，才能使用這些指標。

對於由執行個體機群組成的叢集，叢集容量指標會搭配 `Units` 測量。對於由執行個體群組組成的叢集，叢集容量指標則搭配 `Nodes` 或 `VCPU`，根據受管擴展原則中使用的單位類型為單位進行測量。如需詳細資訊，請參閱《Amazon EMR 管理指南》**中的[使用 EMR 受管擴展](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-scaling.html)。


| 指標 | Description | 
| --- | --- | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html) | 叢集中單位/節點/vCPU 的目標總數，由受管擴展判定。 單位：*計數*  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html)  | 執行中執行個體內的目前可用單位/節點/vCPU 總數。叢集如被要求調整大小，則在此叢集加入新執行個體或移除執行個體之後，此指標將隨之更新。 單位：*計數*  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html)  | 叢集中 CORE 單位/節點/vCPU 的目標數，由受管擴展判定。 單位：*計數*  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html)  | 叢集中正在執行的 CORE 單位/節點/vCPU 的目前數目。 單位：*計數*  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html)  | 叢集中 TASK 單位/節點/vCPU 的目標數，由受管擴展判定。 單位：*計數*  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html)  | 叢集中正在執行的 TASK 單位/節點/vCPU 的目前數目。 單位：*計數*  | 

當您使用自動終止政策啟用自動終止時，Amazon EMR 會以一分鐘的精細度發出以下指標。部分指標僅適用於 Amazon EMR 6.4.0 及更新的版本。若要進一步了解自動終止，請參閱 [使用自動終止政策進行 Amazon EMR 叢集清除](emr-auto-termination-policy.md)。


****  

| 指標 | Description | 
| --- | --- | 
| TotalNotebookKernels | 叢集上的執行中和閒置筆記本核心的總數。此指標僅適用於 Amazon EMR 6.4.0 及更新的版本。 | 
| AutoTerminationIsClusterIdle | 指出叢集是否在使用中。**0** 值表示叢集正由下列其中一個元件使用：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/UsingEMR_ViewingMetrics.html) **1** 值表示叢集處於閒置狀態。Amazon EMR 會檢查叢集是否持續閒置 (`AutoTerminationIsClusterIdle` = 1)。當叢集的閒置時間等於自動終止政策中的 `IdleTimeout` 值時，Amazon EMR 會終止叢集。  | 

### Amazon EMR 指標的維度
<a name="emr-metrics-dimensions"></a>

可使用下表中的任何一個維度來篩選 Amazon EMR 資料。


| 維度  | Description  | 
| --- | --- | 
| JobFlowId | 與叢集 ID 相同，它是叢集的唯一識別符，格式為 j-XXXXXXXXXXXXX。在 Amazon EMR 主控台中按一下叢集即可尋找此值。 | 

# 透過 CloudWatch 監控 Amazon EMR 事件
<a name="emr-manage-cloudwatch-events"></a>

Amazon EMR 會追蹤事件，並在 Amazon EMR 主控台中將相關資訊保留最多七天。當叢集、執行個體群組、執行個體機群、自動擴展政策或步驟的狀態發生變更時，Amazon EMR 會記錄事件。事件會擷取事件發生的日期和時間、受影響元素的詳細資料，以及其他重要資料點。

下表會列出 Amazon EMR 事件，以及該事件指示的狀態或狀態變更、事件嚴重性、事件類型、事件代碼和事件訊息。Amazon EMR 將事件表示為 JSON 物件，並自動將它們傳送至事件串流。當您使用 CloudWatch Events 為事件處理設定規則時，JSON 物件尤其重要，因為規則要試圖符合 JSON 物件中的模式。如需詳細資訊，請參閱《Amazon CloudWatch Events 使用者指南》**中的[事件與事件模式](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html)以及 [Amazon EMR 事件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html#emr_event_type)。

**注意**  
EMR 會定期使用事件碼 **EC2 佈建來發出事件 - 執行個體容量不足**。當您的 Amazon EMR 叢集在叢集建立或調整大小操作期間遇到執行個體機群或執行個體群組的 Amazon EMR 容量不足錯誤時，就會發生這些事件。事件可能不會包含您提供的所有執行個體類型和 AZs，因為 EMR 只包含自上次發出容量不足事件以來嘗試在 中佈建容量的執行個體類型和 AZs。如需如何回應這些事件的資訊，請參閱[回應 Amazon EMR 叢集的執行個體容量不足事件](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-events-response-insuff-capacity.html)。

## 叢集啟動事件
<a name="emr-cloudwatch-cluster-events"></a>


| 狀態或狀態變更 | 嚴重性 | 事件類型 | 事件代碼 | 訊息 | 
| --- | --- | --- | --- | --- | 
| CREATING | WARN | EMR 執行個體機群佈建 | EC2 佈建 - 執行個體容量不足 | 我們無法為執行個體機群 InstanceFleetID 建立 Amazon EMR 叢集 ClusterId (ClusterName)。Amazon EC2 在可用區域 [AvailabilityZone1, AvaliabilityZone2] 中執行個體類型 [Instancetype1, Instancetype2] 的 Spot 容量不足且執行個體類型 [Instancetype3, Instancetype4] 的隨需容量不足。如需有關如何回應此事件的詳細資訊，請參閱這裡的[文件](emr-EC2_INSUFFICIENT_CAPACITY-error.md)。 | 
| CREATING | WARN | EMR 執行個體群組佈建 | EC2 佈建 - 執行個體容量不足 | 我們無法ClusterId (ClusterName)為執行個體群組 Amazon EC2 建立 Amazon EMR InstanceGroupID 叢集，在可用區域 [Instancetype3, Instancetype4]中執行個體類型的 Spot 容量不足[Instancetype1, Instancetype2]，執行個體類型的隨需容量不足[AvailabilityZone1, AvaliabilityZone2]。如需有關如何回應此事件的詳細資訊，請參閱這裡的[文件](emr-EC2_INSUFFICIENT_CAPACITY-error.md)。 | 
| CREATING | WARN | EMR 執行個體機群佈建 | EC2 佈建 - 子網路中的可用地址不足 | 我們無法建立您為執行個體機群請求ClusterId (ClusterName)的 Amazon EMR 叢集，InstanceFleetID因為指定的子網路[Subnet1, Subnet2]不包含足夠的可用私有 IP 地址，無法滿足您的請求。使用 DescribeSubnets操作來查看子網路中有多少 IP 地址可用 （未使用）。如需如何回應此事件的資訊，請參閱 [Amazon EC2 API 的錯誤碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html) | 
| CREATING | WARN | EMR 執行個體群組佈建 | EC2 佈建 - 子網路中的可用地址不足 | 我們無法建立您為執行個體群組請求ClusterId (ClusterName)的 Amazon EMR 叢集，InstanceGroupID因為指定的子網路[Subnet1, Subnet2]不包含足夠的可用私有 IP 地址，無法滿足您的請求。使用 DescribeSubnets操作來查看子網路中有多少 IP 地址可用 （未使用）。如需如何回應此事件的資訊，請參閱 [Amazon EC2 API 的錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html) | 
| CREATING  | WARN  | EMR 執行個體機群佈建  | EC2 佈建 – 超過 vCPU 限制  | Amazon EMR 叢集InstanceFleetID中的 佈建ClusterId (ClusterName)會延遲，因為您已達到指派給 中執行中執行個體的 vCPUs（虛擬處理單元） 數量限制account (accountId)。如需詳細資訊，請參閱 [Amazon EC2 API 的錯誤碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)  | 
| CREATING  | WARN  | EMR 執行個體群組佈建  | EC2 佈建 – 超過 vCPU 限制  | Amazon EMR 叢集InstanceGroupID中執行個體群組的佈建ClusterId會延遲，因為您已達到指派給帳戶 中執行中執行個體vCPUs （虛擬處理單元） 數量限制(accountId)。如需詳細資訊，[Amazon EC2 API 的錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)  | 
| CREATING  | WARN  | EMR 執行個體機群佈建  | EC2 佈建 – 超過 Spot 執行個體計數限制  | Amazon EMR 叢集InstanceFleetID中執行個體機群的佈建ClusterID (ClusterName)會延遲，因為您已達到可在 中啟動的 Spot 執行個體數量限制account (accountId)。如需詳細資訊，請參閱 [Amazon EC2 API 的錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| CREATING  | WARN  | EMR 執行個體群組佈建  | EC2 佈建 – 超過 Spot 執行個體計數限制  | Amazon EMR 叢集InstanceGroupID中執行個體群組的佈建ClusterID (ClusterName)會延遲，因為您已達到可在 中啟動的 Spot 執行個體數量限制account (accountId)。如需詳細資訊，請參閱 [Amazon EC2 API 的錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| CREATING  | WARN  | EMR 執行個體機群佈建  | EC2 佈建 – 超過執行個體限制  | Amazon EMR 叢集InstanceFleetID中執行個體機群的佈建ClusterId (ClusterName)會延遲，因為您已達到可在 中同時執行的執行個體數量限制account (accountID)。如需 Amazon EC2 服務限制的詳細資訊，請參閱 [Amazon EC2 API 的錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| CREATING  | WARN  | EMR 執行個體群組佈建  | EC2 佈建 – 超過執行個體限制  | Amazon EMR 叢集InstanceGroupID中執行個體群組的佈建ClusterId (ClusterName)會延遲，因為您已達到可在 中同時執行的執行個體數量限制account (accountID)。如需 Amazon EC2 服務限制的詳細資訊，請參閱 [Amazon EC2 API 的錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| CREATING | WARN | EMR 執行個體群組佈建 | *無* | Amazon EMR 叢集 `ClusterId (ClusterName)` 建立於 `Time` 並且可供使用。 - 或 -  Amazon EMR 叢集 `ClusterId (ClusterName)` 已於 `Time` 完成執行所有待定步驟。  處於 `WAITING` 狀態的叢集可能仍在處理作業。   | 
| STARTING  | INFO  | EMR 叢集狀態變更  | *無*  | 已於 `Time` 請求 Amazon EMR 叢集 `ClusterId (ClusterName)`，並且正在建立中。  | 
| STARTING  | INFO  | EMR 叢集狀態變更  | *無*  |  僅適用於具有 Amazon EC2 內部選擇的執行個體機群組態和多個可用區域的叢集。  正在區域 (`AvailabilityZoneID`) 中建立 Amazon EMR 叢集 `ClusterId (ClusterName)`，該區域是從指定的可用區域選項中選擇的。  | 
| STARTING  | INFO  | EMR 叢集狀態變更  | *無*  | Amazon EMR 叢集 `ClusterId (ClusterName)` 於 `Time` 開始執行步驟。  | 
| WAITING  | INFO  | EMR 叢集狀態變更  | *無*  | Amazon EMR 叢集 `ClusterId (ClusterName)` 建立於 `Time` 並且可供使用。 - 或 -  Amazon EMR 叢集 `ClusterId (ClusterName)` 已於 `Time` 完成執行所有待定步驟。  處於 `WAITING` 狀態的叢集可能仍在處理作業。   | 

**注意**  
當您的 EMR 叢集在叢集建立或調整操作期間，遇到來自 Amazon EC2 的執行個體機群或執行個體群組的容量不足錯誤時，具有事件代碼 `EC2 provisioning - Insufficient Instance Capacity` 的事件會定期發出。如需有關如何回應這些事件的詳細資訊，請參閱 [回應 Amazon EMR 叢集執行個體容量不足事件](emr-events-response-insuff-capacity.md)。

## 叢集終止事件
<a name="emr-cloudwatch-cluster-termination-events"></a>


| 狀態或狀態變更 | 嚴重性 | 事件類型 | 事件代碼 | 訊息 | 
| --- | --- | --- | --- | --- | 
| TERMINATED  | 嚴重程度依狀態更改原因而定，如下所示： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ManagementGuide/emr-manage-cloudwatch-events.html)  | EMR 叢集狀態變更  | *無*  | Amazon EMR 叢集 `ClusterId (ClusterName)` 已於 `Time` 因 `StateChangeReason:Code` 原因而終止。  | 
| TERMINATED\$1WITH\$1ERRORS  | CRITICAL  | EMR 叢集狀態變更  | *無*  | Amazon EMR 叢集 `ClusterId (ClusterName)` 已於 `Time` 因 `StateChangeReason:Code` 原因而終止，且出現錯誤。  | 
| TERMINATED\$1WITH\$1ERRORS  | CRITICAL  | EMR 叢集狀態變更  | *無*  | Amazon EMR 叢集 `ClusterId (ClusterName)` 已於 `Time` 因 `StateChangeReason:Code` 原因而終止，且出現錯誤。  | 

## 執行個體機群狀態變更事件
<a name="emr-cloudwatch-instance-fleet-events"></a>

**注意**  
執行個體機群組態只能在 Amazon EMR 4.8.0 版及更新版本 (不含 5.0.0 和 5.0.3 版) 中使用。


****  

| 狀態或狀態變更 | 嚴重性 | 事件類型 | 事件代碼 | 訊息 | 
| --- | --- | --- | --- | --- | 
| 從 `PROVISIONING` 到 `WAITING`  | INFO  |  | 無 | Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體機群 `InstanceFleetID` 的佈建已完成。佈建開始於 `Time` 並花費了 `Num` 分鐘。執行個體機群現在擁有 `Num` 的隨需容量和 `Num` 的 Spot 容量。目標隨需容量為 `Num`，而目標 Spot 容量為 `Num`。  | 
| 從 `WAITING` 到 `RESIZING`  | INFO  |  | 無 | Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體機群 `InstanceFleetID` 的調整大小開始於 `Time`。執行個體機群正在從隨需容量 `Num` 調整到目標 `Num`，從 Spot 容量 `Num` 調整到目標 `Num`。  | 
| 從 `RESIZING` 到 `WAITING`  | INFO  |  | 無 | Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體機群 `InstanceFleetID` 的規模調整操作已完成。規模調整於 `Time` 開始並花費 `Num` 分鐘。執行個體機群現在擁有 `Num` 的隨需容量和 `Num` 的 Spot 容量。目標隨需容量為 `Num`，而目標 Spot 容量為 `Num`。  | 
| 從 `RESIZING` 到 `WAITING`  | INFO  |  | 無 | Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體機群 `InstanceFleetID` 的規模調整操作已逾時且停止。規模調整於 `Time` 開始並於 `Num` 分鐘後停止。執行個體機群現在擁有 `Num` 的隨需容量和 `Num` 的 Spot 容量。目標隨需容量為 `Num`，而目標 Spot 容量為 `Num`。  | 
| SUSPENDED  | ERROR  |  | 無 | Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體機群 `InstanceFleetID` 於 `Time` 中止，原因為：`ReasonDesc`。  | 
| RESIZING  | WARNING  |  | 無 | Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體機群 `InstanceFleetID` 的規模調整操作停止，原因為：`ReasonDesc`。  | 
| `WAITING` 或 `Running`  | INFO  |  | 無 | Amazon EMR 在可用區域 `AvailabilityZone` 中新增 Spot 容量時，Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體機群 `InstanceFleetID` 的規模調整操作無法完成。我們已取消佈建額外 Spot 容量的請求。如需建議的動作，請檢查 [Amazon EMR 叢集的可用區域彈性](emr-flexibility.md) 並再試一次。  | 
| `WAITING` 或 `Running`  | INFO  |  | 無 | Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體機群 `InstanceFleetID` 的規模調整操作由 `Entity` 於 `Time` 啟動。  | 

## 執行個體機群重新設定事件
<a name="emr-cloudwatch-instance-fleet-events-reconfig"></a>


****  

| 狀態或狀態變更 | 嚴重性 | 訊息 | 
| --- | --- | --- | 
| 請求的執行個體機群重新設定  | INFO  | 使用者已請求在 Amazon EMR 叢集 `ClusterId`() `InstanceFleetID`中重新設定執行個體機群`ClusterName`。  | 
| 執行個體機群重新設定開始  | INFO  | Amazon EMR 已在 的 Amazon EMR 叢集 `ClusterId`(`ClusterName`) `InstanceFleetID`中啟動執行個體機群的重新設定`Time`。  | 
| 執行個體機群重新設定已完成  | INFO  | Amazon EMR 已完成在 Amazon EMR 叢集 `ClusterId`() `InstanceFleetID`中重新設定執行個體機群`ClusterName`。  | 
| 執行個體機群重新設定失敗  | WARNING  | Amazon EMR 無法在 的 Amazon EMR 叢集 `ClusterId`(`ClusterName`) `InstanceFleetID`中重新設定執行個體機群`Time`。重新設定失敗，因為 `Reason`。  | 
| 執行個體機群重新設定還原開始  | INFO  | Amazon EMR 正在將 Amazon EMR 叢集 `ClusterId`(`ClusterName`) `InstanceFleetID`中的執行個體機群還原為先前的成功組態。  | 
| 執行個體機群重新設定還原已完成  | INFO  | Amazon EMR 已完成將 Amazon EMR 叢集 `ClusterId`(`ClusterName`) `InstanceFleetID`中的執行個體機群還原為先前的成功組態。  | 
| 執行個體機群重新設定還原失敗  | CRITICAL  | Amazon EMR 無法將 Amazon EMR 叢集 `ClusterId`(`ClusterName`) `InstanceFleetID`中的執行個體機群還原為先前在 成功的組態`Time`。由於 ，重新設定還原失敗`Reason`。  | 
| 執行個體機群重新設定還原已封鎖  | INFO  | Amazon EMR 暫時封鎖 Amazon EMR 叢集 `ClusterId`(`ClusterName`) `InstanceFleetID` 中的執行個體機群，`Time`因為執行個體機群處於 `State` 狀態。  | 

## 執行個體機群規模調整事件
<a name="emr-cloudwatch-instance-fleet-resize-events"></a>


****  

| 事件類型 | 嚴重性 | 事件代碼 | 訊息 | 
| --- | --- | --- | --- | 
| EMR 執行個體機群調整大小   | ERROR | Spot 佈建逾時  | 在可用區域 `AvailabilityZone` 中取得 Spot 容量時，Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體機群 `InstanceFleetID` 的規模調整操作無法完成。我們現在已取消您的請求，並停止嘗試佈建任何額外的 Spot 容量，並且執行個體機群已佈建 `num` 的 Spot 容量。目標 Spot 容量為 `num`。如需詳細資訊和建議的動作，請檢查[此處](emr-flexibility.md)的文件頁面，然後再試一次。  | 
| EMR 執行個體機群調整大小   | ERROR | 隨選佈建逾時  | 在可用區域 `AvailabilityZone` 中取得隨需容量時，Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體機群 `InstanceFleetID` 的規模調整操作無法完成。我們現在已取消您的請求，並停止嘗試佈建任何額外的隨需容量，並且執行個體機群已佈建 `num` 的隨需容量。目標隨需容量為 `num`。如需詳細資訊和建議的動作，請檢查[此處](emr-flexibility.md)的文件頁面，然後再試一次。  | 
| EMR 執行個體機群調整大小   | WARNING | EC2 佈建 - 執行個體容量不足 | 我們無法完成 EMR 叢集 `ClusterId (ClusterName)` 中執行個體機群 `InstanceFleetID` 的規模調整操作，因為 Amazon EC2 在可用區域 `[AvailabilityZone1]` 中執行個體類型 `[Instancetype1, Instancetype2]` 的 Spot 容量不足且執行個體類型 `[Instancetype3, Instancetype4]` 的隨需容量不足。到目前為止，執行個體機群已佈建 `num` 的隨需容量，且目標隨需容為 `num`。已佈建的 Spot 容量為 `num`，且目標 Spot 容量為 `num`。如需有關如何回應此事件的詳細資訊，請參閱這裡的[文件](emr-EC2_INSUFFICIENT_CAPACITY-error.md)。  | 
| EMR 執行個體機群調整大小   | WARNING | Spot 佈建逾時 - 繼續調整大小  | 對於可用區域 `AvailabilityZone` 中 `[Instancetype1, Instancetype2]` 的 Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體機群 ID `InstanceFleetID`，我們仍在為於 `time` 啟動的執行個體機群規模調整操作佈建 Spot 容量。針對於 `time` 啟動的先前的規模調整操作，逾時期限已過期，因此 Amazon EMR 在將請求的 `num` 個執行個體中的 `num` 個新增到執行個體機群後，會停止佈建 Spot 容量。如需詳細資訊，請查看[此處](emr-flexibility.md)的文件頁面。 | 
| EMR 執行個體機群調整大小   | WARNING | 隨選佈建逾時 - 繼續調整大小  | 對於可用區域 `AvailabilityZone` 中 `[Instancetype1, Instancetype2]` 的 Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體機群 ID `InstanceFleetID`，我們仍在為於 `time` 啟動的執行個體機群規模調整操作佈建隨需容量。針對於 `time` 啟動的先前的規模調整操作，逾時期限已過期，因此 Amazon EMR 在將請求的 `num` 個執行個體中的 `num` 個新增到執行個體機群後，會停止佈建隨需容量。如需詳細資訊，請查看[此處](emr-flexibility.md)的文件頁面。 | 
| EMR 執行個體機群調整大小   | WARNING | EC2 佈建 - 子網路中的可用地址不足  | 我們無法完成 Amazon EMR 叢集InstanceFleetID中執行個體機群的調整大小操作，ClusterId (ClusterName)因為指定的子網路 【Subnet1、Subnet2】 不包含足夠的可用私有 IP 地址，無法滿足您的請求。使用 DescribeSubnets操作來檢視子網路中有多少 IP 地址可用 （未使用）。如需如何回應此事件的資訊，請參閱 [Amazon EC2 API 的錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| EMR 執行個體機群調整大小   | WARNING | EC2 佈建 - 超過 vCPU 限制  | Amazon EMR 叢集InstanceFleetID中執行個體機群的調整大小ClusterName會延遲，因為您已達到指派給 中執行中執行個體vCPUs （虛擬處理單元） 數量限制account (accountId)。如需詳細資訊，請參閱 [Amazon EC2 API 的錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| EMR 執行個體機群調整大小  | WARNING | EC2 佈建 - 超過 Spot 執行個體計數限制  | Amazon EMR 叢集InstanceFleetID中執行個體機群的佈建ClusterID (ClusterName)會延遲，因為您已達到可在 中啟動的 Spot 執行個體數量限制account (accountId)。如需詳細資訊，請參閱 [Amazon EC2 API 的錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| EMR 執行個體機群調整大小   | WARNING | EC2 佈建 - 超過執行個體限制  | Amazon EMR 叢集InstanceFleetID中執行個體機群的佈建ClusterID (ClusterName)會延遲，因為您已達到可在 中執行的隨需執行個體數量限制account (accountId)。如需 [Amazon EC2 API 錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)的詳細資訊。 | 

**注意**  
當 Amazon EMR 在逾時到期後停止佈建機群的 Spot 或隨需容量時，就會發出佈建逾時事件。如需有關如何回應這些事件的詳細資訊，請參閱 [回應 Amazon EMR 叢集執行個體機群調整大小逾時事件](emr-events-response-timeout-events.md)。

## 執行個體群組事件
<a name="emr-cloudwatch-instance-group-events"></a>


****  

| 事件類型 | 嚴重性 | 事件代碼 | 訊息 | 
| --- | --- | --- | --- | 
| 從 `RESIZING` 到 `Running`  | INFO  | 無 | Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體群組 `InstanceGroupID` 的規模調整操作已完成。它現在有 `Num` 個執行個體。規模調整於 `Time` 開始並花費 `Num` 分鐘完成。  | 
| 從 `RUNNING` 到 `RESIZING`  | INFO  | 無 | Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體群組 `InstanceGroupID` 的規模調整開始於 `Time`。將執行個體計數從 `Num` 調整為 `Num`。  | 
| SUSPENDED  | ERROR  | 無 | Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體群組 `InstanceGroupID` 於 `Time` 中止，原因為：`ReasonDesc`。  | 
| RESIZING  | WARNING  | 無 | Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體群組 `InstanceGroupID` 的規模調整操作停止，原因為：`ReasonDesc`。  | 
| EMR 執行個體群組調整大小   | WARNING | EC2 佈建 - 執行個體容量不足 | 對於 EMR 叢集 `ClusterId (ClusterName)` 中的執行個體群組 `InstanceGroupID`，我們無法完成開始於 `time` 的規模調整操作，因為 Amazon EC2 在可用區域 `[AvailabilityZone1]` 中的執行個體類型 `[Instancetype]` 的 `Spot/On Demand` 容量不足。到目前為止，執行個體群組的執行中執行個體計數為 `num`，請求的執行個體計數為 `num`。如需有關如何回應此事件的詳細資訊，請參閱這裡的[文件](emr-EC2_INSUFFICIENT_CAPACITY-error.md)。  | 
| EMR 執行個體群組調整大小   | WARNING | EC2 佈建 - 子網路中的可用地址不足  | 我們無法完成 Amazon EMR 叢集InstanceGroupID中執行個體群組的調整大小操作，ClusterId (ClusterName)因為指定的子網路 【Subnet1、Subnet2】 不包含足夠的可用私有 IP 地址，無法滿足您的請求。使用 DescribeSubnets操作來檢視子網路中有多少 IP 地址可用 （未使用）。如需如何回應此事件的資訊，請參閱 [Amazon EC2 API 的錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| EMR 執行個體群組調整大小   | WARNING | EC2 佈建 - 超過 vCPU 限制  | Amazon EMR 叢集InstanceGroupID中執行個體群組的調整大小ClusterName會延遲，因為您已達到指派給 中執行中執行個體的 vCPUs （虛擬處理單元） 數量限制account (accountId)。如需詳細資訊，請參閱 [Amazon EC2 API 的錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| EMR 執行個體群組調整大小   | WARNING | EC2 佈建 - 超過 Spot 執行個體計數限制  | Amazon EMR 叢集InstanceGroupID中執行個體群組的佈建ClusterID (ClusterName)會延遲，因為您已達到可在 中啟動的 Spot 執行個體數量限制account (accountId)。如需詳細資訊，請參閱 [Amazon EC2 API 的錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)。 | 
| EMR 執行個體群組調整大小   | WARNING | EC2 佈建 - 超過執行個體限制  | Amazon EMR 叢集InstanceGroupID中執行個體群組的佈建ClusterID (ClusterName)會延遲，因為您已達到可在 中執行的隨需執行個體數量限制account (accountId)。如需 [Amazon EC2 API 錯誤代碼](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)的詳細資訊。 | 
| 從 `RUNNING` 到 `RESIZING`  | INFO  | 無 | Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體群組 `InstanceGroupID` 的規模調整由 `Entity` 於 `Time` 啟動。  | 

**注意**  
對於 Amazon EMR 版本 5.21.0 及更高版本，您可以覆寫叢集組態，並且為執行中叢集的每個執行個體群組指定額外組態分類。您可以使用 Amazon EMR 主控台、 AWS Command Line Interface (AWS CLI) 或 AWS SDK 來執行此操作。如需詳細資訊，請參閱[為執行中叢集的執行個體群組提供組態](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-running-cluster.html)。

下表會列出重新設定操作的 Amazon EMR 事件，以及該事件的狀態或狀態變更、事件嚴重性以及事件訊息。


****  

| 狀態或狀態變更 | 嚴重性 | 訊息 | 
| --- | --- | --- | 
| RUNNING  | INFO  | Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體群組 `InstanceGroupID` 的重新設定由使用者於 `Time` 啟動。請求的組態版本為 `Num`。  | 
| 從 `RECONFIGURING` 到 `Running` | INFO  | Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體群組 `InstanceGroupID` 的重新設定操作已完成。重新設定於 `Time` 開始並花費 `Num` 分鐘完成。目前的組態版本為 `Num`。  | 
| 從 `RUNNING` 到 `RECONFIGURING` in  | INFO  | Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體群組 `InstanceGroupID` 的重新設定開始於 `Time`。將版本編號 `Num` 設定為版本編號 `Num`。  | 
| RESIZING  | INFO  | 針對 Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體群組 `InstanceGroupID` 的組態版本 `Num` 的重新設定操作於 `Time` 暫時中止，因為執行個體群組處於 `State` 狀態。  | 
| RECONFIGURING  | INFO  | 針對 Amazon EMR 叢集 ClusterId (ClusterName) 中執行個體群組 InstanceGroupID 的執行個體計數 Num 的調整大小操作於 Time 暫時中止，因為執行個體群組處於 State 狀態。 | 
| RECONFIGURING  | WARNING  | Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體群組 `InstanceGroupID` 的重新設定操作於 `Time` 失敗，並花費 `Num` 分鐘才失敗。失敗的組態版本為 `Num`。  | 
| RECONFIGURING  | INFO  | 對於 Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體群組 `InstanceGroupID`，組態將於 `Time` 還原到先前的成功版本編號 `Num`。新的組態版本為 `Num`。  | 
| 從 `RECONFIGURING` 到 `Running` | INFO  | 對於 Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體群組 `InstanceGroupID`，組態已於 `Time` 成功還原到先前的成功版本編號 `Num`。新的組態版本為 `Num`。  | 
| 從 `RECONFIGURING` 到 `SUSPENDED`  | CRITICAL  | 對於 Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體群組 `InstanceGroupID`，無法於 `Time` 還原到先前的成功版本編號 `Num`。  | 

## 自動擴展政策事件
<a name="emr-cloudwatch-autoscale-events"></a>


****  

| 狀態或狀態變更 | 嚴重性 | 訊息 | 
| --- | --- | --- | 
| PENDING  | INFO  | 自動擴展政策已於 `Time` 新增至 Amazon EMR 叢集 `ClusterId (ClusterName)` 中的執行個體群組 `InstanceGroupID`。該政策正在等待附件。 - 或 -  Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體群組 `InstanceGroupID` 的自動擴展政策已於 `Time` 更新。該政策正在等待附件。  | 
| ATTACHED  | INFO  | Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體群組 `InstanceGroupID` 的自動擴展政策已於 `Time` 附接。  | 
| `DETACHED`  | INFO  | Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體群組 `InstanceGroupID` 的自動擴展政策已於 `Time` 分離。  | 
| FAILED  | ERROR  | Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體群組 `InstanceGroupID` 的自動擴展政策無法附接並於 `Time` 失敗。 - 或 -  Amazon EMR 叢集 `ClusterId (ClusterName)` 中執行個體群組 `InstanceGroupID` 的自動擴展政策無法分離並於 `Time` 失敗。  | 

## 步驟事件
<a name="emr-cloudwatch-step-events"></a>


****  

| 狀態或狀態變更 | 嚴重性 | 訊息 | 
| --- | --- | --- | 
| PENDING  | INFO  | 步驟 `StepID (StepName)` 已於 `Time` 新增到 Amazon EMR 叢集 `ClusterId (ClusterName)`，並且正在等待執行。  | 
| CANCEL\$1PENDING  | WARN  | Amazon EMR 叢集 `ClusterId (ClusterName)` 中的步驟 `StepID (StepName)` 已於 `Time` 取消並且正在等待取消。  | 
| RUNNING  | INFO  | Amazon EMR 叢集 `ClusterId (ClusterName)` 中的步驟 `StepID (StepName)` 已於 `Time` 開始執行。  | 
| COMPLETED  | INFO  | Amazon EMR 叢集 `ClusterId (ClusterName)` 中的步驟 `StepID (StepName)` 已於 `Time` 完成執行。步驟於 `Time` 開始執行並花費 `Num` 分鐘完成。  | 
| CANCELLED  | WARN  | Amazon EMR 叢集 `ClusterId (ClusterName)` 中的叢集步驟 `StepID (StepName)` 的取消請求已於 `Time` 成功，此步驟現已取消。  | 
| FAILED  | ERROR  | Amazon EMR 叢集 `ClusterId (ClusterName)` 中的步驟 `StepID (StepName)` 已於 `Time` 失敗。  | 

## 運作狀態不佳的節點替換事件
<a name="emr-cloudwatch-unhealthy-node-replacement-events"></a>


| 事件類型 | 嚴重性 | 事件代碼 | 訊息 | 
| --- | --- | --- | --- | 
| Amazon EMR 運作狀態不佳的節點替換 | INFO | 偵測到運作狀態不佳的核心節點 | Amazon EMR 已識別 Amazon EMR 叢集`[instanceID (InstanceName)]``InstanceGroup/Fleet`中 的核心執行個體`clusterID (ClusterName)`為 `UNHEALTHY`。Amazon EMR 會嘗試復原或正常取代`UNHEALTHY`執行個體。  | 
| Amazon EMR 運作狀態不佳的節點替換 | INFO | 核心節點運作狀態不佳 - 停用取代 | Amazon EMR 已識別 Amazon EMR 叢集`[instanceID (InstanceName)]``InstanceGroup/Fleet`中 的核心執行個體`(clusterID) (ClusterName)`為 `UNHEALTHY`。在您的叢集中開啟正常運作狀態不佳的核心節點替換，讓 Amazon EMR 在無法復原執行個體時正常替換`UNHEALTHY`執行個體。  | 
| Amazon EMR 運作狀態不佳的節點替換 | WARN | 未取代運作狀態不佳的核心節點 | `clusterID (ClusterName)` 由於*原因*，Amazon EMR 無法取代 Amazon EMR 叢集`[instanceID (InstanceName)]``InstanceGroup/Fleet`中 `UNHEALTHY`的核心執行個體。 Amazon EMR 無法取代核心節點的原因取決於您的案例。例如，Amazon EMR 無法刪除節點的一個原因是因為叢集沒有任何剩餘的核心節點。  | 
| Amazon EMR 運作狀態不佳的節點替換 | INFO | 復原運作狀態不佳的核心節點 | Amazon EMR 已復原 Amazon EMR 叢集`InstanceGroup/Fleet`中 `[instanceID (InstanceName)]` `UNHEALTHY`的核心執行個體 `clusterID (ClusterName)`  | 

如需狀況不良節點取代的詳細資訊，請參閱[取代狀況不良節點](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-node-replacement.html)。

## 使用 Amazon EMR 主控台檢視事件
<a name="emr-events-console"></a>

對於每個叢集，您可以在詳細資訊窗格中查看簡單的事件清單，該清單以遞減順序列出出現的事件。您也可以以遞減順序檢視區域中全部叢集所出現的所有事件。

如果您不希望使用者查看區域的所有叢集事件，請為 `"Effect": "Deny"` 動作新增拒絕許可 (`elasticmapreduce:ViewEventsFromAllClustersInConsole`) 描述到連接至使用者的政策。

**使用主控台檢視區域中所有叢集的事件**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中的 **EMR on EC2** 下，選擇**事件**。

**使用主控台檢視特定叢集的事件**

1. 登入 AWS 管理主控台，並在 https：//[https://console.aws.amazon.com/emr](https://console.aws.amazon.com/emr) 開啟 Amazon EMR 主控台。

1. 在左側導覽窗格中的 **EMR on EC2** 下方，選擇**叢集**，然後選擇一個叢集。

1. 若要檢視所有事件，請選取叢集詳細資訊頁面上的**事件**索引標籤。

# 從 Amazon EMR 回應 CloudWatch 事件
<a name="emr-events-response"></a>

本章節描述了您可以對 Amazon EMR 以 [CloudWatch 事件訊息](emr-manage-cloudwatch-events.md)形式發出的可操作事件做出回應的各種方式。您可以回應事件的方式包括建立規則、設定警示和其他回應。以下各節包含程序的連結，以及建議的常見偶數回應。

**Topics**
+ [使用 CloudWatch 建立 Amazon EMR 事件的規則](emr-events-cloudwatch-console.md)
+ [從 Amazon EMR 在 CloudWatch 指標上設定警示](UsingEMR_ViewingMetrics_Alarm.md)
+ [回應 Amazon EMR 叢集執行個體容量不足事件](emr-events-response-insuff-capacity.md)
+ [回應 Amazon EMR 叢集執行個體機群調整大小逾時事件](emr-events-response-timeout-events.md)

# 使用 CloudWatch 建立 Amazon EMR 事件的規則
<a name="emr-events-cloudwatch-console"></a>

Amazon EMR 會自動將事件傳送至 CloudWatch 事件串流。您可以根據指定模式建立符合事件的規則，並轉傳該事件至目標以採取動作，例如傳送一封電子郵件通知。模式與事件 JSON 物件相符合。如需有關 Amazon EMR 事件的詳細資訊，請參閱《Amazon CloudWatch Events 使用者指南》**中的 [Amazon EMR 事件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html#emr_event_type)。

如需有關設定 CloudWatch 事件規則的詳細資訊，請參閱[建立由事件觸發的 CloudWatch 規則](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/Create-CloudWatch-Events-Rule.html)。

# 從 Amazon EMR 在 CloudWatch 指標上設定警示
<a name="UsingEMR_ViewingMetrics_Alarm"></a>

Amazon EMR 將指標推送至 Amazon CloudWatch。作為回應，您可以使用 CloudWatch 在 Amazon EMR 指標上設定警示。例如，可以在 CloudWatch 中設定警示，每當 HDFS 使用率超過 80% 時傳送電子郵件給您。如需詳細指引，請參閱《Amazon CloudWatch 使用者指南》**中的[建立或編輯 CloudWatch 警示](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ConsoleAlarms.html)。

# 回應 Amazon EMR 叢集執行個體容量不足事件
<a name="emr-events-response-insuff-capacity"></a>

## 概觀
<a name="emr-events-response-insuff-capacity-overview"></a>

當選取的可用區域沒有足夠的容量來滿足叢集啟動或調整大小請求時，Amazon EMR 叢集會傳回事件代碼 `EC2 provisioning - Insufficient Instance Capacity`。如果 Amazon EMR 重複發生容量不足的例外狀況，且無法滿足叢集啟動或叢集調整大小操作的佈建請求，則事件會與執行個體群組和執行個體機群一起定期發出。

本頁描述了在 EMR 叢集發生此事件類型時，如何對其做出最佳回應。

## 容量不足事件的建議回應
<a name="emr-events-response-insuff-capacity-rec"></a>

建議您使用下列其中一種方式回應容量不足事件：
+ 等待容量恢復。容量經常變化，因此容量不足例外狀況可以自行恢復。一旦 Amazon EC2 容量變得可用，叢集就會開始或完成調整大小。
+ 或者，也可終止叢集，修改執行個體類型組態，以及使用更新後的叢集組態請求建立新叢集。如需詳細資訊，請參閱[Amazon EMR 叢集的可用區域彈性](emr-flexibility.md)。

也可以為容量不足事件設定規則或自動回應，如下一節所述。

## 從容量不足事件中自動復原
<a name="emr-events-response-insuff-capacity-ex"></a>

可以建置自動化來回應 Amazon EMR 事件，例如具有事件代碼 `EC2 provisioning - Insufficient Instance Capacity` 的事件。例如，下列 AWS Lambda 函數會終止具有使用隨需執行個體之執行個體群組的 EMR 叢集，然後使用包含與原始請求不同執行個體類型的執行個體群組建立新的 EMR 叢集。

下列情況會觸發自動化程序：
+ 主要節點或核心節點的容量不足事件已經發出超過 20 分鐘。
+ 叢集不處於**就緒**或**等待中**狀態。如需有關 EMR 叢集狀態的詳細資訊，請參閱 [了解叢集生命週期](emr-overview.md#emr-overview-cluster-lifecycle)。

**注意**  
當您針對容量不足例外狀況建置自動化程序時，應考慮容量不足事件可復原。容量通常會變化，而且叢集會在 Amazon EC2 容量變得可用後立即繼續調整大小或開始操作。

**Example 回應容量不足事件的函數**  

```
// Lambda code with Python 3.10 and handler is lambda_function.lambda_handler
// Note: related IAM role requires permission to use Amazon EMR

import json
import boto3
import datetime
from datetime import timezone

INSUFFICIENT_CAPACITY_EXCEPTION_DETAIL_TYPE = "EMR Instance Group Provisioning"
INSUFFICIENT_CAPACITY_EXCEPTION_EVENT_CODE = (
    "EC2 provisioning - Insufficient Instance Capacity"
)
ALLOWED_INSTANCE_TYPES_TO_USE = [
    "m5.xlarge",
    "c5.xlarge",
    "m5.4xlarge",
    "m5.2xlarge",
    "t3.xlarge",
]
CLUSTER_START_ACCEPTABLE_STATES = ["WAITING", "RUNNING"]
CLUSTER_START_SLA = 20

CLIENT = boto3.client("emr", region_name="us-east-1")

# checks if the incoming event is 'EMR Instance Fleet Provisioning' with eventCode 'EC2 provisioning - Insufficient Instance Capacity'
def is_insufficient_capacity_event(event):
    if not event["detail"]:
        return False
    else:
        return (
            event["detail-type"] == INSUFFICIENT_CAPACITY_EXCEPTION_DETAIL_TYPE
            and event["detail"]["eventCode"]
            == INSUFFICIENT_CAPACITY_EXCEPTION_EVENT_CODE
        )


# checks if the cluster is eligible for termination
def is_cluster_eligible_for_termination(event, describeClusterResponse):
    # instanceGroupType could be CORE, MASTER OR TASK
    instanceGroupType = event["detail"]["instanceGroupType"]
    clusterCreationTime = describeClusterResponse["Cluster"]["Status"]["Timeline"][
        "CreationDateTime"
    ]
    clusterState = describeClusterResponse["Cluster"]["Status"]["State"]

    now = datetime.datetime.now()
    now = now.replace(tzinfo=timezone.utc)
    isClusterStartSlaBreached = clusterCreationTime < now - datetime.timedelta(
        minutes=CLUSTER_START_SLA
    )

    # Check if instance group receiving Insufficient capacity exception is CORE or PRIMARY (MASTER),
    # and it's been more than 20 minutes since cluster was created but the cluster state and the cluster state is not updated to RUNNING or WAITING
    if (
        (instanceGroupType == "CORE" or instanceGroupType == "MASTER")
        and isClusterStartSlaBreached
        and clusterState not in CLUSTER_START_ACCEPTABLE_STATES
    ):
        return True
    else:
        return False


# Choose item from the list except the exempt value
def choice_excluding(exempt):
    for i in ALLOWED_INSTANCE_TYPES_TO_USE:
        if i != exempt:
            return i


# Create a new cluster by choosing different InstanceType.
def create_cluster(event):
    # instanceGroupType cloud be CORE, MASTER OR TASK
    instanceGroupType = event["detail"]["instanceGroupType"]

    # Following two lines assumes that the customer that created the cluster already knows which instance types they use in original request
    instanceTypesFromOriginalRequestMaster = "m5.xlarge"
    instanceTypesFromOriginalRequestCore = "m5.xlarge"

    # Select new instance types to include in the new createCluster request
    instanceTypeForMaster = (
        instanceTypesFromOriginalRequestMaster
        if instanceGroupType != "MASTER"
        else choice_excluding(instanceTypesFromOriginalRequestMaster)
    )
    instanceTypeForCore = (
        instanceTypesFromOriginalRequestCore
        if instanceGroupType != "CORE"
        else choice_excluding(instanceTypesFromOriginalRequestCore)
    )

    print("Starting to create cluster...")
    instances = {
        "InstanceGroups": [
            {
                "InstanceRole": "MASTER",
                "InstanceCount": 1,
                "InstanceType": instanceTypeForMaster,
                "Market": "ON_DEMAND",
                "Name": "Master",
            },
            {
                "InstanceRole": "CORE",
                "InstanceCount": 1,
                "InstanceType": instanceTypeForCore,
                "Market": "ON_DEMAND",
                "Name": "Core",
            },
        ]
    }
    response = CLIENT.run_job_flow(
        Name="Test Cluster",
        Instances=instances,
        VisibleToAllUsers=True,
        JobFlowRole="EMR_EC2_DefaultRole",
        ServiceRole="EMR_DefaultRole",
        ReleaseLabel="emr-6.10.0",
    )

    return response["JobFlowId"]


# Terminated the cluster using clusterId received in an event
def terminate_cluster(event):
    print("Trying to terminate cluster, clusterId: " + event["detail"]["clusterId"])
    response = CLIENT.terminate_job_flows(JobFlowIds=[event["detail"]["clusterId"]])
    print(f"Terminate cluster response: {response}")


def describe_cluster(event):
    response = CLIENT.describe_cluster(ClusterId=event["detail"]["clusterId"])
    return response


def lambda_handler(event, context):
    if is_insufficient_capacity_event(event):
        print(
            "Received insufficient capacity event for instanceGroup, clusterId: "
            + event["detail"]["clusterId"]
        )

        describeClusterResponse = describe_cluster(event)

        shouldTerminateCluster = is_cluster_eligible_for_termination(
            event, describeClusterResponse
        )
        if shouldTerminateCluster:
            terminate_cluster(event)

            clusterId = create_cluster(event)
            print("Created a new cluster, clusterId: " + clusterId)
        else:
            print(
                "Cluster is not eligible for termination, clusterId: "
                + event["detail"]["clusterId"]
            )

    else:
        print("Received event is not insufficient capacity event, skipping")
```

# 回應 Amazon EMR 叢集執行個體機群調整大小逾時事件
<a name="emr-events-response-timeout-events"></a>

## 概觀
<a name="emr-events-response-timeout-events-overview"></a>

Amazon EMR 叢集會在執行個體機群叢集的調整大小操作時發出[事件](emr-manage-cloudwatch-events.md#emr-cloudwatch-instance-fleet-resize-events)。當 Amazon EMR 在逾時到期後停止佈建機群的 Spot 或隨需容量時，就會發出佈建逾時事件。逾時持續時間可由使用者設定，作為執行個體機群[調整大小規格](https://docs.aws.amazon.com/emr/latest/APIReference/API_InstanceFleetResizingSpecifications.html)的一部分。對於相同執行個體機群的連續調整大小，當目前調整大小操作的逾時到期時，Amazon EMR 會發出 `Spot provisioning timeout - continuing resize` 或 `On-Demand provisioning timeout - continuing resize` 事件。然後，它開始為機群的下一個調整大小操作佈建容量。

## 回應執行個體機群調整大小逾時事件
<a name="emr-events-response-timeout-events-rec"></a>

建議您使用下列其中一種方法來回應佈建逾時事件：
+ 重新檢視[調整大小規格](https://docs.aws.amazon.com/emr/latest/APIReference/API_InstanceFleetResizingSpecifications.html)，然後重試調整大小操作。隨著容量頻繁變化，一旦 Amazon EC2 容量變為可用，叢集就會成功調整大小。對於要求更嚴格 SLA 的作業的逾時持續時間，建議客戶設定較低的值。
+ 或者，您也可以：
  + 根據[執行個體和可用區域彈性的最佳實務](emr-flexibility.md#emr-flexibility-types)，啟動具有多樣化執行個體類型的新叢集，或者
  + 啟動具有隨需容量的叢集
+ 對於佈建逾時，繼續調整大小事件，您還可以等待處理調整大小操作。Amazon EMR 將繼續依序處理針對機群觸發的調整大小操作，並遵守設定的調整大小規格。

也可以為此事件設定規則或自動回應，如下一節所述。

## 從佈建逾時事件中自動復原
<a name="emr-events-response-timeout-events-ex"></a>

可以建置自動化來回應具有 `Spot Provisioning timeout` 事件代碼的 Amazon EMR 事件。例如，下列 AWS Lambda 函數會終止 EMR 叢集，它具有使用任務節點的 Spot 執行個體的執行個體機群，然後建立新的 EMR 叢集，其執行個體機群包含比原始請求更多樣化的執行個體類型。在此範例中，針對任務節點發出的 `Spot Provisioning timeout` 事件將觸發 Lambda 函數的執行。

**Example 用於回應 `Spot Provisioning timeout` 事件的範例函數**  

```
// Lambda code with Python 3.10 and handler is lambda_function.lambda_handler
// Note: related IAM role requires permission to use Amazon EMR
 
import json
import boto3
import datetime
from datetime import timezone
 
SPOT_PROVISIONING_TIMEOUT_EXCEPTION_DETAIL_TYPE = "EMR Instance Fleet Resize"
SPOT_PROVISIONING_TIMEOUT_EXCEPTION_EVENT_CODE = (
    "Spot Provisioning timeout"
)
 
CLIENT = boto3.client("emr", region_name="us-east-1")
 
# checks if the incoming event is 'EMR Instance Fleet Resize' with eventCode 'Spot provisioning timeout'
def is_spot_provisioning_timeout_event(event):
    if not event["detail"]:
        return False
    else:
        return (
            event["detail-type"] == SPOT_PROVISIONING_TIMEOUT_EXCEPTION_DETAIL_TYPE
            and event["detail"]["eventCode"]
            == SPOT_PROVISIONING_TIMEOUT_EXCEPTION_EVENT_CODE
        )
 
 
# checks if the cluster is eligible for termination
def is_cluster_eligible_for_termination(event, describeClusterResponse):
    # instanceFleetType could be CORE, MASTER OR TASK
    instanceFleetType = event["detail"]["instanceFleetType"]
 
    # Check if instance fleet receiving Spot provisioning timeout event is TASK
    if (instanceFleetType == "TASK"):
        return True
    else:
        return False
 
 
# create a new cluster by choosing different InstanceType.
def create_cluster(event):
    # instanceFleetType cloud be CORE, MASTER OR TASK
    instanceFleetType = event["detail"]["instanceFleetType"]
 
    # the following two lines assumes that the customer that created the cluster already knows which instance types they use in original request
    instanceTypesFromOriginalRequestMaster = "m5.xlarge"
    instanceTypesFromOriginalRequestCore = "m5.xlarge"
   
    # select new instance types to include in the new createCluster request
    instanceTypesForTask = [
        "m5.xlarge",
        "m5.2xlarge",
        "m5.4xlarge",
        "m5.8xlarge",
        "m5.12xlarge"
    ]
    
    print("Starting to create cluster...")
    instances = {
        "InstanceFleets": [
            {
                "InstanceFleetType":"MASTER",
                "TargetOnDemandCapacity":1,
                "TargetSpotCapacity":0,
                "InstanceTypeConfigs":[
                    {
                        'InstanceType': instanceTypesFromOriginalRequestMaster,
                        "WeightedCapacity":1,
                    }
                ]
            },
            {
                "InstanceFleetType":"CORE",
                "TargetOnDemandCapacity":1,
                "TargetSpotCapacity":0,
                "InstanceTypeConfigs":[
                    {
                        'InstanceType': instanceTypesFromOriginalRequestCore,
                        "WeightedCapacity":1,
                    }
                ]
            },
            {
                "InstanceFleetType":"TASK",
                "TargetOnDemandCapacity":0,
                "TargetSpotCapacity":100,
                "LaunchSpecifications":{},
                "InstanceTypeConfigs":[
                    {
                        'InstanceType': instanceTypesForTask[0],
                        "WeightedCapacity":1,
                    },
                    {
                        'InstanceType': instanceTypesForTask[1],
                        "WeightedCapacity":2,
                    },
                    {
                        'InstanceType': instanceTypesForTask[2],
                        "WeightedCapacity":4,
                    },
                    {
                        'InstanceType': instanceTypesForTask[3],
                        "WeightedCapacity":8,
                    },
                    {
                        'InstanceType': instanceTypesForTask[4],
                        "WeightedCapacity":12,
                    }
                ],
                "ResizeSpecifications": {
                    "SpotResizeSpecification": {
                        "TimeoutDurationMinutes": 30
                    }
                }
            }
        ]
    }
    response = CLIENT.run_job_flow(
        Name="Test Cluster",
        Instances=instances,
        VisibleToAllUsers=True,
        JobFlowRole="EMR_EC2_DefaultRole",
        ServiceRole="EMR_DefaultRole",
        ReleaseLabel="emr-6.10.0",
    )
 
    return response["JobFlowId"]
 
 
# terminated the cluster using clusterId received in an event
def terminate_cluster(event):
    print("Trying to terminate cluster, clusterId: " + event["detail"]["clusterId"])
    response = CLIENT.terminate_job_flows(JobFlowIds=[event["detail"]["clusterId"]])
    print(f"Terminate cluster response: {response}")
 
 
def describe_cluster(event):
    response = CLIENT.describe_cluster(ClusterId=event["detail"]["clusterId"])
    return response
 
 
def lambda_handler(event, context):
    if is_spot_provisioning_timeout_event(event):
        print(
            "Received spot provisioning timeout event for instanceFleet, clusterId: "
            + event["detail"]["clusterId"]
        )
 
        describeClusterResponse = describe_cluster(event)
 
        shouldTerminateCluster = is_cluster_eligible_for_termination(
            event, describeClusterResponse
        )
        if shouldTerminateCluster:
            terminate_cluster(event)
 
            clusterId = create_cluster(event)
            print("Created a new cluster, clusterId: " + clusterId)
        else:
            print(
                "Cluster is not eligible for termination, clusterId: "
                + event["detail"]["clusterId"]
            )
 
    else:
        print("Received event is not spot provisioning timeout event, skipping")
```