

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

# Amazon EKS
<a name="automation-ref-eks"></a>

 AWS Systems Manager 自動化為 Amazon Elastic Kubernetes Service 提供預先定義的 Runbook。如需有關執行手冊的詳細資訊，請參閱 [Working with runbooks](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-documents.html)。如需如何檢視 Runbook 內容的詳細資訊，請參閱 [檢視 Runbook 內容](automation-runbook-reference.md#view-automation-json)。

**Topics**
+ [`AWS-CreateEKSClusterWithFargateProfile`](aws-createeksclusterwithfargateprofile.md)
+ [`AWS-CreateEKSClusterWithNodegroup`](aws-createeksclusterwithnodegroup.md)
+ [`AWS-DeleteEKSCluster`](automation-aws-deleteekscluster.md)
+ [`AWS-MigrateToNewEKSSelfManagedNodeGroup`](aws-migratetoneweksselfmanagedlinuxnodegroup.md)
+ [`AWSPremiumSupport-TroubleshootEKSCluster`](automation-awspremiumsupport-troubleshootekscluster.md)
+ [`AWSSupport-TroubleshootEKSWorkerNode`](automation-awssupport-troubleshooteksworkernode.md)
+ [`AWS-UpdateEKSCluster`](automation-updateekscluster.md)
+ [`AWS-UpdateEKSManagedNodeGroup`](aws-updateeksmanagednodegroup.md)
+ [`AWS-UpdateEKSSelfManagedLinuxNodeGroups`](aws-updateeksselfmanagedlinuxnodegroup.md)
+ [`AWSSupport-CollectEKSLinuxNodeStatistics`](automation-awssupport-collectekslinuxnodestatistics.md)
+ [`AWSSupport-CollectEKSInstanceLogs`](automation-awssupport-collecteksinstancelogs.md)
+ [`AWSSupport-SetupK8sApiProxyForEKS`](automation-awssupport-setupk8sapiproxyforeks.md)
+ [`AWSSupport-TroubleshootEbsCsiDriversForEks`](automation-awssupport-troubleshoot-ebs-csi-drivers-for-eks.md)
+ [`AWSSupport-TroubleshootEKSALBControllerIssues`](automation-awssupport-troubleshoot-eks-alb-controller-issues.md)

# `AWS-CreateEKSClusterWithFargateProfile`
<a name="aws-createeksclusterwithfargateprofile"></a>

 **Description** 

 `AWS-CreateEKSClusterWithFargateProfile` Runbook 會使用 建立 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集 AWS Fargate。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-CreateEKSClusterWithFargateProfile) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux、macOS、 Windows

**參數**
+ AutomationAssumeRole

  類型：字串

  描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
+ ClusterName

  類型：字串

  描述：（必要） 叢集的唯一名稱。
+ ClusterRoleArn

  類型：字串

  描述：（必要） IAM 角色的 ARN，提供 Kubernetes 控制平面代表您呼叫 AWS API 操作的許可。
+ FargateProfileName

  類型：字串

  描述：（必要） Fargate 設定檔的名稱。
+ FargateProfileRoleArn

  類型：字串

  描述：（必要） Amazon EKS Pod 執行 IAM 角色的 ARN。
+ FargateProfileSelectors

  類型：字串

  描述：（必要） 將 Pod 與 Fargate 設定檔比對的選取器。
+ SubnetIds

  類型：StringList

  描述：（必要） 您要用於 Amazon EKS 叢集IDs。Amazon EKS 會在這些子網路中建立彈性網路介面，以便在節點與 Kubernetes 控制平面之間進行通訊。您必須指定至少兩個子網路 ID。
+ EKSEndpointPrivateAccess

  類型：布林值

  預設：True

  描述：（選用） 將此值設為 `True`，以允許叢集 Kubernetes API 伺服器端點的私有存取。如果您啟用私有存取，叢集 VPC 中的 Kubernetes API 請求將使用私有 VPC 端點。如果您停用私有存取，且叢集中有節點或 Pod，則請確保 `publicAccessCidrs`包含與節點或 Fargate AWS Fargate Pod 通訊所需的 CIDR 區塊。
+ EKSEndpointPublicAccess

  類型：布林值

  預設：False

  描述：（選用） 將此值設定為 `False`，以停用對叢集 Kubernetes API 伺服器端點的公開存取。如果您停用公有存取，叢集的 Kubernetes API 伺服器只能從啟動它的 VPC 內接收請求。
+ PublicAccessCIDRs

  類型：StringList

  描述：（選用） 允許存取叢集公有 Kubernetes API 伺服器端點的 CIDR 區塊。從您指定的 CIDR 區塊之外的地址與端點的通訊遭拒。如果您已停用私有端點存取，且叢集中有節點或 Fargate Pod，則請確定您指定必要的 CIDR 區塊。
+ SecurityGroupIds

  類型：StringList

  描述：（選用） 指定一或多個安全群組，以與 Amazon EKS 在您帳戶中建立的彈性網路介面建立關聯。

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+ `ssm:GetAutomationExecution`
+ `ssm:StartAutomationExecution`
+ `ec2:DescribeRouteTables`
+ `ec2:DescribeSubnets`
+ `ec2:DescribeVpcs`
+ `eks:CreateCluster`
+ `eks:CreateFargateProfile`
+ `eks:DescribeCluster`
+ `eks:DescribeFargateProfile`
+ `iam:CreateServiceLinkedRole`
+ `iam:GetRole`
+ `iam:ListAttachedRolePolicies`
+ `iam:PassRole`

 **文件步驟** 
+ CreateEKSCluster (aws：executeAwsApi) - 建立 Amazon EKS 叢集。
+ VerifyEKSClusterIsActive (aws：waitForAwsResourceProperty) - 驗證叢集狀態為 `ACTIVE`。
+ CreateFargateProfile (aws：executeAwsApi) - 為叢集建立 Fargate。
+ VerifyFargateProfileIsActive (aws：waitForAwsResourceProperty) - 驗證 Fargate 設定檔狀態為 `ACTIVE`。

 **輸出** 

 `CreateEKSCluster.CreateClusterResponse`   
描述：從 `CreateCluster` API 呼叫收到的回應。

 `CreateFargateProfile.CreateFargateProfileResponse`   
描述：從 `CreateFargateProfile` API 呼叫收到的回應。

# `AWS-CreateEKSClusterWithNodegroup`
<a name="aws-createeksclusterwithnodegroup"></a>

 **Description** 

 `AWS-CreateEKSClusterWithNodegroup` Runbook 會使用節點群組建立容量的 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-CreateEKSClusterWithNodegroup) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux、macOS、 Windows

**參數**
+ AutomationAssumeRole

  類型：字串

  描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
+ ClusterName

  類型：字串

  描述：（必要） 叢集的唯一名稱。
+ ClusterRoleArn

  類型：字串

  描述：（必要） IAM 角色的 ARN，提供 Kubernetes 控制平面代表您呼叫 AWS API 操作的許可。
+ NodegroupName

  類型：字串

  描述：（必要） 節點群組的唯一名稱。
+ NodegroupRoleArn

  類型：字串

  描述：（必要） 要與您的節點群組建立關聯的 IAM 角色 ARN。Amazon EKS 工作者節點 kubelet 協助程式會代表您呼叫 AWS APIs。節點透過 IAM 執行個體描述檔和關聯的政策，取得這些 API 呼叫的許可。啟動節點並在叢集中註冊之前，您必須先為那些節點建立啟動時要使用的 IAM 角色。
+ SubnetIds

  類型：StringList

  描述：（必要） 您要用於 Amazon EKS 叢集IDs。Amazon EKS 會在這些子網路中建立彈性網路介面，以便在節點與 Kubernetes 控制平面之間進行通訊。您必須指定至少兩個子網路 ID。
+ EKSEndpointPrivateAccess

  類型：布林值

  預設：True

  描述：（選用） 將此值設為 `True`，以允許叢集 Kubernetes API 伺服器端點的私有存取。如果您啟用私有存取，叢集 VPC 中的 Kubernetes API 請求將使用私有 VPC 端點。如果您停用私有存取，且叢集中有節點或 AWS Fargate Pod，則請確保 `publicAccessCidrs`包含與節點或 Fargate Pod 通訊所需的 CIDR 區塊。
+ EKSEndpointPublicAccess

  類型：布林值

  預設：False

  描述：（選用） 將此值設定為 `False`，以停用對叢集 Kubernetes API 伺服器端點的公開存取。如果您停用公有存取，叢集的 Kubernetes API 伺服器只能從啟動它的 VPC 內接收請求。
+ PublicAccessCIDRs

  類型：StringList

  描述：（選用） 允許存取叢集公有 Kubernetes API 伺服器端點的 CIDR 區塊。從您指定的 CIDR 區塊之外的地址與端點的通訊遭拒。如果您已停用私有端點存取，且叢集中有節點或 Fargate Pod，則請確定您指定必要的 CIDR 區塊。
+ SecurityGroupIds

  類型：StringList

  描述：（選用） 指定一或多個安全群組，以與 Amazon EKS 在您帳戶中建立的彈性網路介面建立關聯。

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+ `ssm:StartAutomationExecution`
+ `ssm:GetAutomationExecution`
+ `ec2:DescribeSubnets`
+ `eks:CreateCluster`
+ `eks:CreateNodegroup`
+ `eks:DescribeCluster`
+ `eks:DescribeNodegroup`
+ `iam:CreateServiceLinkedRole`
+ `iam:GetRole`
+ `iam:ListAttachedRolePolicies`
+ `iam:PassRole`

 **文件步驟** 
+ CreateEKSCluster (aws：executeAwsApi) - 建立 Amazon EKS 叢集。
+ VerifyEKSClusterIsActive (aws：waitForAwsResourceProperty) - 驗證叢集狀態為 `ACTIVE`。
+ CreateNodegroup (aws：executeAwsApi) - 建立叢集的節點群組。
+ VerifyNodegroupIsActive (aws：waitForAwsResourceProperty) - 驗證節點群組狀態為 `ACTIVE`。

 **輸出** 
+ `CreateEKSCluster.CreateClusterResponse`：從 `CreateCluster` API 呼叫收到的回應。
+ `CreateNodegroup.CreateNodegroupResponse`：從 `CreateNodegroup` API 呼叫收到的回應。

# `AWS-DeleteEKSCluster`
<a name="automation-aws-deleteekscluster"></a>

 **Description** 

 此 Runbook 會刪除與 Amazon EKS 叢集相關聯的資源，包括節點群組和 Fargate 設定檔。或者，您可以選擇刪除所有自我管理節點、用於建立節點的 CloudFormation 堆疊，以及叢集的 VPC CloudFormation 堆疊。如需刪除叢集的詳細資訊，請參閱《*Amazon EKS 使用者指南*》中的[刪除叢集](https://docs.aws.amazon.com/eks/latest/userguide/delete-cluster.html)。

**注意**  
 如果您的叢集中有與負載平衡器相關聯的作用中服務，您必須先刪除這些服務，才能刪除叢集。如果沒有，系統就無法刪除負載平衡器。執行 `AWS-DeleteEKSCluster` Runbook 之前，請使用下列程序來尋找和刪除 服務。

**在叢集中尋找和刪除服務**

1.  安裝 Kubernetes 命令列公用程式 `kubectl` 。如需詳細資訊，請參閱《*Amazon EKS 使用者指南*》中的[安裝 kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)。

1. 執行下列命令，列出叢集中執行的所有 服務。

   ```
   kubectl get svc --all-namespaces
   ```

1. 執行下列命令來刪除任何具有相關聯 EXTERNAL-IP 值的服務。這些服務由負載平衡器提供，您必須在 Kubernetes 中刪除它們，以便正確釋放負載平衡器和相關聯的資源。

   ```
                           kubectl delete svc
                           service-name
   ```

 您現在可以執行 `AWS-DeleteEKSCluster` Runbook。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-DeleteEKSCluster) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux、macOS、 Windows

**參數**
+ AutomationAssumeRole

  類型：字串

  描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
+ EKSClusterName

  類型：字串

  描述：（必要） 要刪除的 Amazon EKS 叢集名稱。
+ VPCCloudFormationStack

  類型：字串

  描述：（選用）要刪除之 EKS 叢集的 VPC CloudFormation 堆疊名稱。這會刪除 VPC 的 CloudFormation 堆疊和堆疊建立的任何資源。
+ VPCCloudFormationStackRole

  類型：字串

  描述：（選用） CloudFormation 擔任刪除 VPC CloudFormation 堆疊之 IAM 角色的 ARN。 CloudFormation 會使用角色的登入資料代表您進行呼叫。
+ SelfManagedNodeStacks

  類型：字串

  描述：（選用） 自我管理節點的 CloudFormation 堆疊名稱逗號分隔清單，這會刪除自我管理節點的 CloudFormation 堆疊。
+ SelfManagedNodeStacksRole

  類型：字串

  描述：（選用） CloudFormation 擔任刪除自我管理節點 Stacks 之 IAM 角色的 ARN。 CloudFormation 會使用角色的登入資料代表您進行呼叫。

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+  `sts:AssumeRole` 
+  `eks:ListNodegroups` 
+  `eks:DeleteNodegroup` 
+  `eks:ListFargateProfiles` 
+  `eks:DeleteFargateProfile` 
+  `eks:DeleteCluster` 
+  `cfn:DescribeStacks` 
+  `cfn:DeleteStack` 

 **文件步驟** 
+  `aws:executeScript` - DeleteNodeGroups：尋找和刪除 EKS 叢集中的所有節點群組。
+  `aws:executeScript` - DeleteFargateProfiles：尋找和刪除 EKS 叢集中的所有 Fargate 設定檔。
+  `aws:executeScript` - DeleteSelfManagedNodes：刪除所有自我管理節點和用於建立節點的 CloudFormation 堆疊。
+  `aws:executeScript` - DeleteEKSCluster：刪除 EKS 叢集。
+  `aws:executeScript` - DeleteVPCCloudFormationStack：刪除 VPC CloudFormation 堆疊。

# `AWS-MigrateToNewEKSSelfManagedNodeGroup`
<a name="aws-migratetoneweksselfmanagedlinuxnodegroup"></a>

 **Description** 

 `AWS-MigrateToNewEKSSelfManagedNodeGroup` Runbook 可協助您建立新的 Amazon Elastic Kubernetes Service (Amazon EKS) Linux 節點群組，以將現有應用程式遷移至其中。如需詳細資訊，請參閱《**Amazon EKS 使用者指南**》中的[遷移至新的節點群組](https://docs.aws.amazon.com/eks/latest/userguide/migrate-stack.html)。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-MigrateToNewEKSSelfManagedLinuxNodeGroup) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux

**參數**
+ AutomationAssumeRole

  類型：字串

  描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
+ OldStackName

  類型：字串

  描述：（必要） 現有 CloudFormation 堆疊的名稱或堆疊 ID。
+ NewStackName

  類型：字串

  描述：（選用） 為新節點群組建立的新 CloudFormation 堆疊名稱。如果您未指定此參數的值，則會使用 格式建立堆疊名稱：`NewNodeGroup-ClusterName-AutomationExecutionID`。
+ ClusterControlPlaneSecurityGroup

  類型：字串

  描述：（選用） 您希望節點用來與 Amazon EKS 控制平面通訊的安全群組 ID。如果您未指定此參數的值，則會使用現有 CloudFormation 堆疊中指定的安全群組。
+ NodeInstanceType

  類型：字串

  描述：（選用） 您要用於新節點群組的執行個體類型。如果您未指定此參數的值，則會使用現有 CloudFormation 堆疊中指定的執行個體類型。
+ NodeGroupName

  類型：字串

  描述：（選用） 新節點群組的名稱。如果您未指定此參數的值，則會使用現有 CloudFormation 堆疊中指定的節點群組名稱。
+ NodeAutoScalingGroupDesiredCapacity

  類型：字串

  描述：（選用） 建立新堆疊時要擴展到的所需節點數量。此數字必須大於或等於 `NodeAutoScalingGroupMinSize`值，且小於或等於 `NodeAutoScalingGroupMaxSize`。如果您未指定此參數的值，則會使用現有 CloudFormation 堆疊中指定的節點群組所需容量。
+ NodeAutoScalingGroupMaxSize

  類型：字串

  描述：（選用） 節點群組可向外擴展的節點數量上限。如果您未指定此參數的值，則會使用現有 CloudFormation 堆疊中指定的節點群組大小上限。
+ NodeAutoScalingGroupMinSize

  類型：字串

  描述：（選用） 節點群組可以擴展到的節點數量下限。如果您未指定此參數的值，則會使用現有 CloudFormation 堆疊中指定的節點群組大小下限。
+ NodeImageId

  類型：字串

  描述：（選用） 您希望節點群組使用的 Amazon Machine Image(AMI) ID。
+ NodeImageIdSSMParam

  類型：字串

  描述：（選用） 您希望節點群組使用的 AMI的公有 Systems Manager 參數。
+ NodeVolumeSize

  類型：字串

  描述：（選用） GiB 中節點的根磁碟區大小。如果您未指定此參數的值，則會使用現有 CloudFormation 堆疊中指定的節點磁碟區大小。
+ NodeVolumeType

  類型：字串

  描述：（選用） 您要用於節點根磁碟區的 Amazon EBS 磁碟區類型。如果您未指定此參數的值，則會使用現有 CloudFormation 堆疊中指定的磁碟區類型。
+ KeyName

  類型：字串

  描述：（選用） 您要指派給節點的金鑰對。如果您未指定此參數的值，則會使用現有 CloudFormation 堆疊中指定的金鑰對。
+ 子網路

  類型：StringList

  描述：（選用） 您希望用於新節點群組的子網路 IDs 逗號分隔清單。如果您未指定此參數的值，則會使用現有 CloudFormation 堆疊中指定的子網路。
+ DisableIMDSv1

  類型：布林值

  描述：（選用） 指定 `true`以停用執行個體中繼資料服務第 1 版 (IMDSv1)。根據預設，節點支援 IMDSv1 和 IMDSv2。
+ BootstrapArguments

  類型：字串

  描述：（選用） 您要傳遞至節點引導指令碼的其他引數。

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+ `ssm:StartAutomationExecution`
+ `ssm:GetAutomationExecution`
+ `ssm:GetParameters`
+ `autoscaling:CreateAutoScalingGroup`
+ `autoscaling:CreateOrUpdateTags`
+ `autoscaling:DeleteTags`
+ `autoscaling:DescribeAutoScalingGroups`
+ `autoscaling:DescribeScalingActivities`
+ `autoscaling:DescribeScheduledActions`
+ `autoscaling:SetDesiredCapacity`
+ `autoscaling:TerminateInstanceInAutoScalingGroup`
+ `autoscaling:UpdateAutoScalingGroup`
+ `cloudformation:CreateStack`
+ `cloudformation:DescribeStackResource`
+ `cloudformation:DescribeStacks`
+ `cloudformation:UpdateStack`
+ `ec2:AuthorizeSecurityGroupEgress`
+ `ec2:AuthorizeSecurityGroupIngress`
+ `ec2:CreateLaunchTemplateVersion`
+ `ec2:CreateLaunchTemplate`
+ `ec2:CreateSecurityGroup`
+ `ec2:CreateTags`
+ `ec2:DeleteLaunchTemplate`
+ `ec2:DeleteSecurityGroup`
+ `ec2:DescribeAvailabilityZones`
+ `ec2:DescribeImages`
+ `ec2:DescribeInstanceAttribute`
+ `ec2:DescribeInstanceStatus`
+ `ec2:DescribeInstances`
+ `ec2:DescribeKeyPairs`
+ `ec2:DescribeLaunchTemplateVersions`
+ `ec2:DescribeLaunchTemplates`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeSubnets`
+ `ec2:DescribeVpcs`
+ `ec2:RevokeSecurityGroupEgress`
+ `ec2:RevokeSecurityGroupIngress`
+ `ec2:RunInstances`
+ `ec2:TerminateInstances`
+ `iam:AddRoleToInstanceProfile`
+ `iam:AttachRolePolicy`
+ `iam:CreateInstanceProfile`
+ `iam:CreateRole`
+ `iam:GetInstanceProfile`
+ `iam:GetRole`
+ `iam:PassRole`

 **文件步驟** 
+ DetermineParameterValuesForNewNodeGroup (aws：executeScript) - 收集用於新節點群組的參數值。
+ CreateStack (aws：createStack) - 為新節點群組建立 CloudFormation 堆疊。
+ GetNewStackNodeInstanceRole (aws：executeAwsApi) - 取得節點執行個體角色。
+ GetNewStackSecurityGroup (aws：executeAwsApi) - 步驟取得節點安全群組。
+ AddIngressRulesToNewNodeSecurityGroup (aws：executeAwsApi) - 將輸入規則新增至新建立的安全群組，以便接受從指派給您先前節點群組的流量。
+ AddIngressRulesToOldNodeSecurityGroup (aws：executeAwsApi) - 將輸入規則新增至先前的安全群組，使其可以接受來自指派給新建立節點群組的流量。
+ VerifyStackComplete (aws：assertAwsResourceProperty) - 驗證新堆疊狀態為 `CREATE_COMPLETE`。

 **輸出** 

DetermineParameterValuesForNewNodeGroup.NewStackParameters - 用來建立新堆疊的參數。

GetNewStackNodeInstanceRole.NewNodeInstanceRole - 新節點群組的節點執行個體角色。

GetNewStackSecurityGroup.NewNodeSecurityGroup - 新節點群組的安全群組 ID。

DetermineParameterValuesForNewNodeGroup.NewStackName - 新節點群組的 CloudFormation 堆疊名稱。

CreateStack.StackId - 新節點群組的 CloudFormation 堆疊 ID。

# `AWSPremiumSupport-TroubleshootEKSCluster`
<a name="automation-awspremiumsupport-troubleshootekscluster"></a>

 **Description** 

 `AWSPremiumSupport-TroubleshootEKSCluster` Runbook 會診斷 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集、基礎基礎設施的常見問題，並提供建議的修補步驟。

**重要**  
存取 `AWSPremiumSupport-*` Runbook 需要 Business \$1 Support、Enterprise Support 或 Unified Operations Subscription。如需詳細資訊，請參閱[比較 AWS 支援 計劃](https://aws.amazon.com/premiumsupport/plans/)。

 如果您指定 `S3BucketName` 參數的值，自動化會評估您指定之 Amazon Simple Storage Service (Amazon S3) 儲存貯體的政策狀態。為了協助保護從 EC2 執行個體收集之日誌的安全性，如果政策狀態`isPublic`設定為 `true` ，或存取控制清單 (ACL) 將`READ|WRITE`許可授予 `All Users` Amazon S3 預先定義的群組，則不會上傳日誌。如需 Amazon S3 預先定義群組的詳細資訊，請參閱[《Amazon Simple Storage Service 使用者指南》中的 Amazon S3 預先定義群組](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#specifying-grantee-predefined-groups)。 **

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSPremiumSupport-TroubleshootEKSCluster) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux、macOS、 Windows

**參數**
+ AutomationAssumeRole

  類型：字串

  描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
+ ClusterName

  類型：字串

  描述：（必要） 您要疑難排解的 Amazon EKS 叢集名稱。
+ S3BucketName

  類型：字串

  描述：（必要） 應上傳 Runbook 產生報告之私有 Amazon S3 儲存貯體的名稱。

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+  `ssm:StartAutomationExecution` 
+  `ssm:GetAutomationExecution` 
+  `ec2:DescribeInstances` 
+  `ec2:DescribeInstanceTypes` 
+  `ec2:DescribeSubnets` 
+  `ec2:DescribeSecurityGroups` 
+  `ec2:DescribeRouteTables` 
+  `ec2:DescribeNatGateways` 
+  `ec2:DescribeVpcs` 
+  `ec2:DescribeNetworkAcls` 
+  `iam:GetInstanceProfile` 
+  `iam:ListInstanceProfiles` 
+  `iam:ListAttachedRolePolicies` 
+  `eks:DescribeCluster` 
+  `eks:ListNodegroups` 
+  `eks:DescribeNodegroup` 
+  `autoscaling:DescribeAutoScalingGroups` 

 此外，連接至啟動自動化之使用者或角色的 AWS Identity and Access Management (IAM) 政策必須允許對下列公有 AWS Systems Manager 參數執行 `ssm:GetParameter`操作，以取得工作者節點的最新建議 Amazon EKS Amazon Machine Image(AMI)。
+  `arn:aws:ssm:::parameter/aws/service/eks/optimized-ami/*/amazon-linux-2/recommended/image_id` 
+  `arn:aws:ssm:::parameter/aws/service/ami-windows-latest/Windows_Server-2019-English-Core-EKS_Optimized-*/image_id` 
+  `arn:aws:ssm:::parameter/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-EKS_Optimized-*/image_id` 
+  `arn:aws:ssm:::parameter/aws/service/ami-windows-latest/Windows_Server-1909-English-Core-EKS_Optimized-*/image_id` 
+  `arn:aws:ssm:::parameter/aws/service/eks/optimized-ami/*/amazon-linux-2-gpu/recommended/image_id` 

若要將 Runbook 產生的報告上傳至 Amazon S3 儲存貯體，您指定的 Amazon S3 儲存貯體需要下列許可。
+  `s3:GetBucketPolicyStatus` 
+  `s3:GetBucketAcl` 
+  `s3:PutObject` 

 **文件步驟** 
+  `aws:executeAwsApi` - 收集指定 Amazon EKS 叢集的詳細資訊。
+  `aws:executeScript` - 收集 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體、Auto Scaling 群組、 AMI和 Amazon EC2 GPU 圖形執行個體類型的詳細資訊。
+  `aws:executeScript` - 收集 Amazon EKS 叢集的虛擬私有雲端 (VPC)、子網路、網路位址轉譯 (NAT) 閘道、子網路路由、安全群組和網路存取控制清單 (ACLs) 的詳細資訊。
+  `aws:executeScript` - 收集已連接 IAM 執行個體描述檔和角色政策的詳細資訊。
+  `aws:executeScript` - 收集您在 `S3BucketName` 參數中指定的 Amazon S3 儲存貯體詳細資訊。
+  `aws:executeScript` - 將 Amazon VPC 子網路分類為公有或私有。
+  `aws:executeScript` - 檢查 Amazon VPC 子網路是否有 Amazon EKS 叢集所需的標籤。
+  `aws:executeScript` - 檢查 Amazon VPC 子網路是否有 Elastic Load Balancing 子網路所需的標籤。
+  `aws:executeScript` - 檢查工作者節點 Amazon EC2 執行個體是否使用最新的 Amazon EKS 最佳化 AMI 
+  `aws:executeScript` - 檢查連接至工作者節點的 Amazon VPC 安全群組是否需要標籤。
+  `aws:executeScript` - 檢查 Amazon EKS 叢集和工作者節點 Amazon VPC 安全群組規則是否有建議傳入 Amazon EKS 叢集的規則。
+  `aws:executeScript` - 檢查 Amazon EKS 叢集和工作者節點 Amazon VPC 安全群組規則是否有從 Amazon EKS 叢集的建議輸出規則。
+  `aws:executeScript` - 檢查 Amazon VPC 子網路的網路 ACL 組態。
+  `aws:executeScript` - 檢查工作者節點 Amazon EC2 執行個體是否有所需的受管政策。
+  `aws:executeScript` - 檢查 Auto Scaling 群組是否具有叢集自動擴展所需的標籤。
+  `aws:executeScript` - 檢查工作者節點 Amazon EC2 執行個體是否已連線至網際網路。
+  `aws:executeScript` - 根據先前步驟的輸出產生報告。如果為 `S3BucketName` 參數指定值，產生的報告會上傳到 Amazon S3 儲存貯體。

# `AWSSupport-TroubleshootEKSWorkerNode`
<a name="automation-awssupport-troubleshooteksworkernode"></a>

 **Description** 

 `AWSSupport-TroubleshootEKSWorkerNode` Runbook 會分析 Amazon Elastic Compute Cloud (Amazon EC2) 工作者節點和 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集，以協助您識別和疑難排解防止工作者節點加入叢集的常見原因。Runbook 會輸出指引，協助您解決任何已識別的問題。

**重要**  
 若要成功執行此自動化，Amazon EC2 工作者節點的狀態必須為 `running` ，Amazon EKS 叢集狀態必須為 `ACTIVE` 。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEKSWorkerNode) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux

**參數**
+ AutomationAssumeRole

  類型：字串

  描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
+ ClusterName

  類型：字串

  描述：（必要） Amazon EKS 叢集的名稱。
+ WorkerID

  類型：字串

  描述：（必要） 無法加入叢集的 Amazon EC2 工作者節點 ID。

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+  `ec2:DescribeDhcpOptions` 
+  `ec2:DescribeImages` 
+  `ec2:DescribeInstanceAttribute` 
+  `ec2:DescribeInstances` 
+  `ec2:DescribeInstanceStatus` 
+  `ec2:DescribeNatGateways` 
+  `ec2:DescribeNetworkAcls` 
+  `ec2:DescribeNetworkInterfaces` 
+  `ec2:DescribeRouteTables` 
+  `ec2:DescribeSecurityGroups` 
+  `ec2:DescribeSubnets` 
+  `ec2:DescribeVpcAttribute` 
+  `ec2:DescribeVpcEndpoints` 
+  `ec2:DescribeVpcs` 
+  `eks:DescribeCluster` 
+  `iam:GetInstanceProfile` 
+  `iam:GetRole` 
+  `iam:ListAttachedRolePolicies` 
+  `ssm:DescribeInstanceInformation` 
+  `ssm:ListCommandInvocations` 
+  `ssm:ListCommands` 
+  `ssm:SendCommand` 

 **文件步驟** 
+  `aws:assertAwsResourceProperty` - 確認您在 `ClusterName` 參數中指定的 Amazon EKS 叢集存在且處於 `ACTIVE` 狀態。
+  `aws:assertAwsResourceProperty` - 確認您在 `WorkerID` 參數中指定的 Amazon EC2 工作者節點存在且處於 `running` 狀態。
+  `aws:executeScript` - 執行 Python 指令碼，以協助識別工作者節點無法加入叢集的可能原因。

# `AWS-UpdateEKSCluster`
<a name="automation-updateekscluster"></a>

 **Description** 

 `AWS-UpdateEKSCluster` Runbook 可協助您將 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集更新為您想要使用的 Kubernetes 版本。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-UpdateEKSCluster) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux、macOS、 Windows

**參數**
+ AutomationAssumeRole

  類型：字串

  描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
+ ClusterName

  類型：字串

  描述：（必要） Amazon EKS 叢集的名稱。
+ 版本

  類型：字串

  描述：（必要） 您要更新叢集的 Kubernetes 版本。

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+  `eks:DescribeUpdate` 
+  `eks:UpdateClusterVersion` 

 **文件步驟** 
+  `aws:executeAwsApi` - 更新 Amazon EKS 叢集所使用的 Kubernetes 版本。
+  `aws:waitForAwsResourceProperty` - 等待更新狀態為 `Successful`。

# `AWS-UpdateEKSManagedNodeGroup`
<a name="aws-updateeksmanagednodegroup"></a>

 **Description** 

`AWS-UpdateEKSManagedNodeGroup` Runbook 可協助您更新 Amazon Elastic Kubernetes Service (Amazon EKS) 受管節點群組。您可以選擇 `Version`或 `Configuration`更新。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-UpdateEKSManagedNodeGroup) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux、macOS、 Windows

**參數**
+ AutomationAssumeRole

  類型：字串

  描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
+ ClusterName

  類型：字串

  描述：（必要） 您要更新其節點群組的叢集名稱。
+ NodeGroupName

  類型：字串

  描述：（必要） 要更新的節點群組名稱。
+ UpdateType

  類型：字串

  有效值：更新節點群組版本 \$1 更新節點群組組態

  預設：更新節點群組版本

  描述：（必要） 您要在節點群組上執行的更新類型。

下列參數僅適用於`Version`更新類型：
+ AMIReleaseVersion

  類型：字串

  描述：（選用） 您要使用的 Amazon EKS AMI 最佳化版本。根據預設會使用最新版本。
+ ForceUpgrade

  類型：布林值

  描述：（選用） 如果為 true，則更新不會失敗，以回應 Pod 中斷預算違規。
+ KubernetesVersion

  類型：字串

  描述：（選用） 要更新節點群組的 Kubernetes 版本。
+ LaunchTemplateId

  類型：字串

  描述：（選用） 啟動範本的 ID。
+ LaunchTemplateName

  類型：字串

  描述：（選用） 啟動範本的名稱。
+ LaunchTemplateVersion

  類型：字串

  描述：（選用） Amazon Elastic Compute Cloud (Amazon EC2) 啟動範本版本。此參數只有在節點群組是從啟動範本建立時才有效。

下列參數僅適用於`Configuration`更新類型：
+ AddOrUpdateNodeGroupLabels

  類型：StringMap

  描述：（選用） 您要新增或更新的 Kubernetes 標籤。
+ AddOrUpdateKubernetesTaintsEffect

  類型：StringList

  描述：（選用） 您要新增或更新的 Kubernetes 污點。
+ MaxUnavailableNodeGroups

  類型：整數

  預設：0

  描述：（選用） 在版本更新期間一次無法使用的節點數量上限。
+ MaxUnavailablePercentageNodeGroup

  類型：整數

  預設：0

  描述：（選用） 版本更新期間無法使用的節點百分比。
+ NodeGroupDesiredSize

  類型：整數

  預設：0

  描述：（選用） 受管節點群組應維護的節點數量。
+ NodeGroupMaxSize

  類型：整數

  預設：0

  描述：（選用） 受管節點群組可向外擴展的節點數量上限。
+ NodeGroupMinSize

  類型：整數

  預設：0

  描述：（選用） 受管節點群組可縮減的節點數量下限。
+ RemoveKubernetesTaintsEffect

  類型：StringList

  描述：（選用） 您要移除的 Kubernetes 污點。
+ RemoveNodeGroupLabels

  類型：StringList

  描述：（選用） 您想要移除的以逗號分隔的標籤清單。

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+  `eks:UpdateNodegroupConfig` 
+  `eks:UpdateNodegroupVersion` 

 **文件步驟** 
+  `aws:executeScript` - 根據您為 Runbook 輸入參數指定的值更新 Amazon EKS 叢集節點群組。
+  `aws:waitForAwsResourceProperty` - 等待叢集更新狀態為 `Successful`。

# `AWS-UpdateEKSSelfManagedLinuxNodeGroups`
<a name="aws-updateeksselfmanagedlinuxnodegroup"></a>

 **Description** 

`AWS-UpdateEKSSelfManagedLinuxNodeGroups` Runbook 會使用 AWS CloudFormation 堆疊更新 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集中的自我管理受管節點群組。

如果您的叢集使用自動擴展，建議您先將部署縮減至兩個複本，再使用此 Runbook。

**將部署擴展至兩個複本**

1.  安裝 Kubernetes 命令列公用程式 `kubectl`。如需詳細資訊，請參閱*《Amazon EKS 使用者指南》*中的[安裝 kubectl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)。

1. 執行下列命令。

   ```
   kubectl scale deployments/cluster-autoscaler --replicas=2 -n kube-system
   ```

1. 執行 `AWS-UpdateEKSSelfManagedLinuxNodeGroups` Runbook。

1. 執行下列命令，將部署擴展回所需的複本數量。

   ```
   kubectl scale deployments/cluster-autoscaler --replicas=number -n kube-system
   ```

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWS-UpdateEKSSelfManagedLinuxNodeGroups) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux、macOS、 Windows

**參數**
+ AutomationAssumeRole

  類型：字串

  描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
+ ClusterName

  類型：字串

  描述：（必要） Amazon EKS 叢集的名稱。
+ NodeGroupName

  類型：字串

  描述：（必要） 受管節點群組的名稱。
+ ClusterControlPlaneSecurityGroup

  類型：字串

  描述：（必要） 控制平面安全群組的 ID。
+ DisableIMDSv1

  類型：布林值

  描述：（選用） 決定您是否要允許執行個體中繼資料服務第 1 版 (IMDSv1) 和 IMDSv2。
+ KeyName

  類型：字串

  描述：（選用） 執行個體的金鑰名稱。
+ NodeAutoScalingGroupDesiredCapacity

  類型：字串

  描述：（選用） 節點群組應維護的節點數量。
+ NodeAutoScalingGroupMaxSize

  類型：字串

  描述：（選用） 節點群組可向外擴展的節點數量上限。
+ NodeAutoScalingGroupMinSize

  類型：字串

  描述：（選用） 節點群組可以擴展到的節點數量下限。
+ NodeInstanceType

  類型：字串

  預設：t3.large

  描述：（選用） 您要用於節點群組的執行個體類型。
+ NodeImageId

  類型：字串

  描述：（選用） 您希望節點群組使用的 Amazon Machine Image(AMI) ID。
+ NodeImageIdSSMParam

  類型：字串

  預設：/aws/service/eks/optimized-ami/1.21/amazon-linux-2/recommended/image\$1id

  描述：（選用） 您希望節點群組使用的 AMI的公有 Systems Manager 參數。
+ StackName

  類型：字串

  描述：（必要） 用於更新節點群組的 CloudFormation 堆疊名稱。
+ 子網路

  類型：字串

  描述：（必要） 您希望叢集使用的子網路 IDs 的逗號分隔清單。
+ VpcId

  類型：字串

  預設：Default

  描述：（必要） 部署叢集的虛擬私有雲端 (VPC)。

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+  `eks:CreateCluster` 
+  `eks:CreateNodegroup` 
+  `eks:DeleteNodegroup` 
+  `eks:DeleteCluster` 
+  `eks:DescribeCluster` 
+  `eks:DescribeNodegroup` 
+  `eks:ListClusters` 
+  `eks:ListNodegroups` 
+  `eks:UpdateClusterConfig` 
+  `eks:UpdateNodegroupConfig` 

 **文件步驟** 
+  `aws:executeScript` - 根據您為 Runbook 輸入參數指定的值更新 Amazon EKS 叢集節點群組。
+  `aws:waitForAwsResourceProperty` - 等待堆疊 CloudFormation 更新狀態傳回。

# `AWSSupport-CollectEKSLinuxNodeStatistics`
<a name="automation-awssupport-collectekslinuxnodestatistics"></a>

 **Description** 

`AWSSupport-CollectEKSLinuxNodeStatistics` Runbook 會從屬於 Amazon EKS 叢集的 Amazon EC2 執行個體，以及指定容器 ID 時，從執行個體上執行的`containerd`容器收集 Linux 統計資料。Amazon EC2 執行個體必須由 管理 AWS Systems Manager。

收集的主機層級 Linux 統計資料包括：
+ 作業系統資訊。
+ 網路介面統計資料 - 來自 `ethtool`和 `/sys/class/net/interface/statistics`目錄。
+ 檔案描述項計數。
+ 暫時性連接埠計數。
+ `iptables` 規則傾印。
+ 檢查完整的連線資料表。

容器層級 Linux 統計資料包括：
+ 識別符資訊 - 映像 URI 和標籤。
+ 網路介面統計資料 - 來自 `ethtool`和 `/sys/class/net/interface/statistics`目錄。
+ 如果已填入 `NetworkTargets` 參數，則追蹤路由和 DNS 結果。
+ 封包擷取分析計數 - TCP 重新傳輸、無序封包等。

Runbook 會從各種 Linux 發行版本收集資料，包括 Amazon Linux 2、Amazon Linux 2023 和 Debian/Ubuntu。它使用來自 Amazon ECR 公有圖庫的下列映像的最新版本：
+ `amazon-ecs-network-sidecar` 映像，以取得疑難排解工具的存取權。
+ `aws-cli` 影像，將統計資料報告 JSON 檔案和封包擷取檔案上傳至指定的 Amazon S3 儲存貯體。

**重要**  
此 Runbook 不支援 Fargate 執行個體。如果執行個體在執行期間關閉或中斷連線，此 Runbook 可能會失敗。

 **如何運作？** 

Runbook 會執行下列動作：
+ 驗證目標 Amazon S3 儲存貯體未授予公有讀取或寫入存取權。
+ 確保目標 Amazon EC2 執行個體由 Systems Manager 管理，且處於執行中狀態。
+ 驗證執行個體是否正在執行 Linux 作業系統。
+ 從 Amazon EC2 執行個體收集完整的 Linux 統計資料，也可以選擇從指定的容器收集。
+ 將收集到的統計資料上傳至指定的 Amazon S3 儲存貯體。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-CollectEKSLinuxNodeStatistics) 

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。

`AutomationAssumeRole` 參數需要下列動作：
+ `s3:GetAccountPublicAccessBlock`
+ `s3:GetBucketPublicAccessBlock`
+ `s3:GetBucketAcl`
+ `s3:GetBucketPolicyStatus`
+ `s3:GetBucketLocation`
+ `s3:GetEncryptionConfiguration`
+ `s3:PutObject`
+ `ssm:DescribeInstanceInformation`
+ `ssm:SendCommand`
+ `ssm:GetCommandInvocation`
+ `ec2:DescribeInstances`

IAM 政策範例：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetAccountPublicAccessBlock"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketPublicAccessBlock",
                "s3:GetBucketAcl",
                "s3:GetBucketPolicyStatus",
                "s3:GetBucketLocation",
                "s3:GetEncryptionConfiguration"
            ],
            "Resource": "arn:aws:s3:::S3_BUCKET_NAME"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::S3_BUCKET_NAME/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeInstanceInformation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:document/AWS-RunShellScript",
                "arn:aws:ec2:*:111122223333:instance/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetCommandInvocation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        }
    ]
}
```

 **指示** 

請依照下列步驟設定自動化：

1. 在文件下的 Systems Manager [https://console.aws.amazon.com/systems-manager/documents/AWSSupport-CollectEKSLinuxNodeStatistics/description](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-CollectEKSLinuxNodeStatistics/description)中導覽至 。

1. 選擇 Execute automation (執行自動化)。

1. 針對輸入參數，輸入下列內容：
   + **AutomationAssumeRole （選用）：**

     IAM 角色的 Amazon Resource Name (ARN)，允許 Systems Manager Automation 代表您執行動作。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
   + **InstanceId （必要）：**

     要收集統計資料的 Amazon EC2 執行個體 ID。
   + **S3BucketName （必要）：**

     Amazon S3 儲存貯體的名稱，可將 Amazon EC2 執行個體的 JSON 輸出匯出為 檔案。
   + **S3KeyPrefix （選用）：**

     從 Amazon EC2 執行個體將 JSON 輸出匯出為 檔案的 Amazon S3 金鑰字首 （子資料夾）。 Amazon EC2 預設：`AWSSupport-CollectEKSLinuxNodeStatistics`。
   + **S3BucketOwnerRoleArn （選用）：**

     IAM 角色的 ARN，具有取得 Amazon S3 儲存貯體和帳戶區塊公開存取設定、儲存貯體加密組態、儲存貯體 ACLs、儲存貯體政策狀態，以及將物件上傳至儲存貯體的許可。如果未指定此參數，則 Runbook 會使用 `AutomationAssumeRole`（如果指定） 或啟動此 Runbook 的使用者 （如果`AutomationAssumeRole`未指定）。
   + **S3BucketOwnerAccount （選用）：**

     擁有 Amazon S3 儲存貯體 AWS 的帳戶。如果您未指定此參數，則 Runbook 會假設儲存貯體位於此帳戶中。
   + **ContainerId （選用）：**

     在指定 Amazon EC2 執行個體上執行的容器 ID。
   + **NetworkTargets （選用）：**

     以逗號分隔的 IPv4 地址和/或 DNS 名稱清單，用於測試 DNS 解析，以及使用 traceroute 的連線。

1. 選取執行。

1. 自動化會啟動。

1. 文件會執行下列步驟：
   + **`CheckBucketAccess`**:

     檢查目標 Amazon S3 儲存貯體是否可能授予其物件的讀取和/或寫入公開存取權。
   + **`AssertInstanceIsSSMManaged`**:

     確保目標 Amazon EC2 執行個體由 Systems Manager 管理，否則自動化會結束。
   + **`VerifyInstanceState`**:

     在嘗試收集統計資料之前，驗證 Amazon EC2 執行個體是否處於執行中狀態。
   + **`BranchOnVerifyLinuxInstance`**:

     在繼續之前，驗證執行個體是否為 Linux 執行個體。
   + **`BranchOnVerifyInstanceRunning`**:

     在繼續之前，確認執行個體處於執行中狀態。
   + **`CollectEKSLinuxNodeStatistics`**:

     從 Amazon EC2 執行個體收集完整的 Linux 統計資料，包括作業系統資訊、網路介面統計資料、檔案描述項、暫時性連接埠、防火牆規則，以及選用的容器層級統計資料。
   + **`GenerateStatisticsOutputS3Uri`**:

     將完整的 Amazon S3 URI 產生到 Linux 統計資料檔案，以做為自動化文件的輸出。

1. 完成後，請檢閱輸出區段以取得執行的詳細結果。

**參考**

Systems Manager Automation
+ [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-CollectEKSLinuxNodeStatistics/description)
+ [執行自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [設定 自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [支援自動化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)

# `AWSSupport-CollectEKSInstanceLogs`
<a name="automation-awssupport-collecteksinstancelogs"></a>

 **Description** 

 `AWSSupport-CollectEKSInstanceLogs` Runbook 會從 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體收集作業系統和 Amazon Elastic Kubernetes Service (Amazon EKS) 相關日誌檔案，以協助您疑難排解常見問題。當自動化收集相關的日誌檔案時，會變更檔案系統結構，包括建立暫時目錄、將日誌檔案複製到暫時目錄，以及將日誌檔案壓縮至封存。此活動可能會導致 Amazon EC2 執行個體`CPUUtilization`增加。如需 `CPUUtilization` 的詳細資訊，請參閱《*Amazon CloudWatch 使用者指南*》中的[執行個體指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/viewing_metrics_with_cloudwatch.html#ec2-cloudwatch-metrics)。

 如果您指定 `LogDestination` 參數的值，自動化會評估您指定之 Amazon Simple Storage Service (Amazon S3) 儲存貯體的政策狀態。為了協助保護從 Amazon EC2 執行個體收集之日誌的安全性，如果政策狀態`isPublic`設定為 `true` ，或存取控制清單 (ACL) 將`READ|WRITE`許可授予 `All Users` Amazon S3 預先定義的群組，則不會上傳日誌。如需 Amazon S3 預先定義群組的詳細資訊，請參閱[《Amazon Simple Storage Service 使用者指南》中的 Amazon S3 預先定義群組](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#specifying-grantee-predefined-groups)。 **

**注意**  
此自動化需要在連接至 Amazon EC2 執行個體的根 Amazon Elastic Block Store (Amazon EBS) 磁碟區上至少 10% 的可用磁碟空間。如果根磁碟區上的可用磁碟空間不足，自動化會停止。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-CollectEKSInstanceLogs) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux

**參數**
+ AutomationAssumeRole

  類型：字串

  描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
+ EKSInstanceId

  類型：字串

  描述：（必要） 您要從中收集日誌的 Amazon EKS Amazon EC2 執行個體 ID。
+ LogDestination

  類型：字串

  描述：（選用） 帳戶中要上傳封存日誌的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+  `ssm:StartAutomationExecution` 
+  `ssm:GetAutomationExecution` 
+  `ssm:SendCommand`

 **Amazon EC2 執行個體描述檔所需的 IAM 許可** 

所使用的執行個體描述檔`EKSInstanceId`必須連接 **AmazonSSMManagedInstanceCore** Amazon 受管政策。

 它也必須能夠存取 `LogDestination` Amazon S3 儲存貯體，才能上傳收集的日誌。以下是可以連接到該執行個體描述檔的 IAM 政策範例：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetBucketPolicyStatus",
        "s3:GetBucketAcl"
      ],
      "Resource": [
        "arn:aws:s3:::LogDestination/*",
        "arn:aws:s3:::LogDestination"
      ]
    }
  ]
}
```

如果 `LogDestination`使用 AWS KMS 加密，則必須將額外的陳述式新增至 IAM 政策，以授予加密所用 AWS KMS 金鑰的存取權：

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetBucketPolicyStatus",
        "s3:GetBucketAcl"
      ],
      "Resource": [
        "arn:aws:s3:::LogDestination/*",
        "arn:aws:s3:::LogDestination"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": "arn:aws:kms:REGION:ACCOUNT:key/KMS-KEY-ID"
    }
  ]
}
```

 **文件步驟** 
+  `aws:assertAwsResourceProperty` - 確認`EKSInstanceId`參數中指定值的作業系統為 Linux。
+  `aws:runCommand` - 收集作業系統和 Amazon EKS 相關日誌檔案，將其壓縮為 `/var/log`目錄中的封存。
+  `aws:branch` - 確認是否已為 `LogDestination` 參數指定值。
+  `aws:runCommand` - 將日誌封存上傳至您在 `LogDestination` 參數中指定的 Amazon S3 儲存貯體。

# `AWSSupport-SetupK8sApiProxyForEKS`
<a name="automation-awssupport-setupk8sapiproxyforeks"></a>

 **Description** 

**AWSSupport-SetupK8sApiProxyForEKS** 自動化 Runbook 提供建立 函數的方法，該 AWS Lambda 函數可做為對 Amazon Elastic Kubernetes Service 叢集端點進行控制平面 API 呼叫的代理。它可作為 Runbook 的建置區塊，需要進行控制平面 API 呼叫，以自動化任務並疑難排解 Amazon EKS 叢集的問題。

**重要**  
此自動化建立的所有資源都會加上標籤，以便輕鬆找到。使用的標籤為：  
 `AWSSupport-SetupK8sApiProxyForEKS`：true 

**注意**  
自動化是協助程式 Runbook，無法做為獨立 Runbook 執行。它被調用為 Runbook 的子自動化，需要控制平面 API 呼叫 Amazon EKS 叢集。
請務必在使用後執行`Cleanup`操作，以避免產生不必要的成本。

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

Linux

**參數**
+ AutomationAssumeRole

  類型：字串

  描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。
+ ClusterName

  類型：字串

  描述：（必要） Amazon Elastic Kubernetes Service 叢集的名稱。
+ 作業

  類型：字串

  描述：（必要） 要執行的操作： 在帳戶中`Setup`佈建 Lambda 函數， `Cleanup`會取消佈建在設定階段中建立的資源。

  允許的值： `Setup` \$1 `Cleanup`

  預設：設定
+ LambdaRoleArn

  類型：字串

  描述：（選用） 允許函數 AWS Lambda 存取所需 AWS 服務和資源的 IAM 角色 ARN。如果未指定角色，此 Systems Manager Automation 會在您的帳戶中為 Lambda 建立一個 `Automation-K8sProxy-Role-<ExecutionId>` IAM 角色，其名稱包含 受管政策： `AWSLambdaBasicExecutionRole`和 `AWSLambdaVPCAccessExecutionRole`。

 **如何運作？** 

 Runbook 會執行下列步驟：
+ 驗證自動化是否以子執行的形式執行。做為獨立 Runbook 調用時， Runbook 將無法運作，因為它不會自行執行任何有意義的工作。
+ 檢查指定叢集之代理 Lambda 函數的現有 CloudFormation 堆疊。
  + 如果堆疊存在，則會重複使用現有的基礎設施，而不是重新建立它。
  + 使用標籤來維護參考計數器，以確保如果相同叢集的另一個 Runbook 重複使用基礎設施，則 Runbook 不會將其刪除。
+ 執行為調用指定的操作類型 (`Setup`/`Cleanup`)：
  + **設定：**建立或描述現有的資源。

    **清除：**如果任何其他 Runbook 未使用基礎設施，則移除佈建的資源。

 **所需的 IAM 許可** 

`AutomationAssumeRole` 參數需要下列` LambdaRoleArn`未傳遞的許可：
+  `cloudformation:CreateStack` 
+  `cloudformation:DescribeStacks` 
+  `cloudformation:DeleteStack` 
+  `cloudformation:UpdateStack` 
+  `ec2:CreateNetworkInterface` 
+  `ec2:DescribeNetworkInterfaces` 
+  `ec2:DescribeRouteTables` 
+  `ec2:DescribeSecurityGroups` 
+  `ec2:DescribeSubnets` 
+  `ec2:DescribeVpcs` 
+  `ec2:DeleteNetworkInterface` 
+  `eks:DescribeCluster` 
+  `lambda:CreateFunction` 
+  `lambda:DeleteFunction` 
+  `lambda:ListTags` 
+  `lambda:GetFunction` 
+  `lambda:ListTags` 
+  `lambda:TagResource` 
+  `lambda:UntagResource` 
+  `lambda:UpdateFunctionCode` 
+  `logs:CreateLogGroup` 
+  `logs:PutRetentionPolicy` 
+  `logs:TagResource` 
+  `logs:UntagResource` 
+  `logs:DescribeLogGroups` 
+  `logs:DescribeLogStreams` 
+  `logs:ListTagsForResource` 
+  `iam:CreateRole` 
+  `iam:AttachRolePolicy` 
+  `iam:DetachRolePolicy` 
+  `iam:PassRole` 
+  `iam:GetRole` 
+  `iam:DeleteRole` 
+  `iam:TagRole` 
+  `iam:UntagRole` 
+  `tag:GetResources` 
+  `tag:TagResources` 

提供 `LambdaRoleArn` 時，自動化不需要建立角色，而且可以排除下列許可：
+  `iam:CreateRole` 
+  `iam:DeleteRole` 
+  `iam:TagRole` 
+  `iam:UntagRole` 
+  `iam:AttachRolePolicy` 
+  `iam:DetachRolePolicy` 

以下是範例政策，示範`LambdaRoleArn`未傳遞 ` AutomationAssumeRole` 時所需的許可：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "tag:GetResources",
                "tag:TagResources",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs",
                "ec2:DeleteNetworkInterface",
                "eks:DescribeCluster",
                "iam:GetRole",
                "cloudformation:DescribeStacks",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "lambda:GetFunction",
                "lambda:ListTags",
                "logs:ListTagsForResource"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "AllowActionsWithoutConditions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                }
            },
            "Action": "iam:CreateRole",
            "Resource": [
                "arn:aws:iam::111122223333:role/Automation-K8sProxy*"
            ],
            "Effect": "Allow",
            "Sid": "AllowCreateRoleWithRequiredTag"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                }
            },
            "Action": [
                "iam:DeleteRole",
                "iam:TagRole",
                "iam:UntagRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/Automation-K8sProxy*"
            ],
            "Effect": "Allow",
            "Sid": "IAMActions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                },
                "StringLike": {
                    "iam:PolicyARN": [
                        "arn:aws:iam::111122223333:policy/service-role/AWSLambdaBasicExecutionRole",
                        "arn:aws:iam::111122223333:policy/service-role/AWSLambdaVPCAccessExecutionRole"
                    ]
                }
            },
            "Action": [
                "iam:AttachRolePolicy",
                "iam:DetachRolePolicy"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/Automation-K8sProxy*"
            ],
            "Effect": "Allow",
            "Sid": "AttachRolePolicy"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                }
            },
            "Action": [
                "lambda:CreateFunction",
                "lambda:DeleteFunction",
                "lambda:TagResource",
                "lambda:UntagResource",
                "lambda:UpdateFunctionCode"
            ],
            "Resource": "arn:aws:lambda:us-east-1:111122223333:function:Automation-K8sProxy*",
            "Effect": "Allow",
            "Sid": "LambdaActions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                }
            },
            "Action": [
                "cloudformation:CreateStack",
                "cloudformation:DeleteStack",
                "cloudformation:UpdateStack"
            ],
            "Resource": "arn:aws:cloudformation:us-east-1:111122223333:stack/AWSSupport-SetupK8sApiProxyForEKS*",
            "Effect": "Allow",
            "Sid": "CloudFormationActions"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                }
            },
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:PutRetentionPolicy",
                "logs:TagResource",
                "logs:UntagResource"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/Automation-K8sProxy*",
                "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/Automation-K8sProxy*:*"
            ],
            "Effect": "Allow",
            "Sid": "LogsActions"
        },
        {
            "Condition": {
                "StringLikeIfExists": {
                    "iam:PassedToService": "lambda.amazonaws.com"
                }
            },
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/Automation-K8sProxy-Role*"
            ],
            "Effect": "Allow",
            "Sid": "PassRoleToLambda"
        }
    ]
}
```

------

 如果傳遞 `LambdaRoleArn` ，請確保其已為公有叢集連接 [ AWSLambdaBasicExecutionRole ](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2Fservice-role%2FAWSLambdaBasicExecutionRole) 政策，並為私有叢集連接 [ AWSLambdaVPCAccessExecutionRole](https://console.aws.amazon.com/iam/home?region=us-east-1#/policies/details/arn%3Aaws%3Aiam%3A%3Aaws%3Apolicy%2Fservice-role%2FAWSLambdaVPCAccessExecutionRole)。

 **建立的資源** 

`Setup` 操作期間會建立下列資源：

1. AWS Lambda 函數

1. IAM 角色：如果未提供，則為 Lambda 執行角色。

1. CloudWatch Log Group (Lambda Logs)

 *Lambda 函數和執行角色會保留，直到執行`Cleanup`操作為止。Lambda 日誌群組將保留 30 天或直到手動刪除為止。*

 **指示** 

Runbook 是一種協助程式公用程式，旨在從其他 Runbook 中作為子自動化執行。它有助於建立基礎設施，讓父系 Runbook 進行 Amazon EKS K8s 控制平面 API 呼叫。若要使用 Runbook，您可以從父系自動化的內容中遵循下列步驟。

1. **設定階段**：從 Runbook 使用` aws:executeAutomation`動作操作調用自動化，該操作想要在操作設為 的情況下進行 Amazon EKS K8s 控制平面 API 呼叫`Setup`。

   輸入參數的範例：

   ```
      {
        "AutomationAssumeRole": "<role-arn>",
        "ClusterName": "<eks-cluster-name>",
        "Operation": "Setup"
      }
   ```

   `aws:executeAutomation` 步驟的輸出將包含代理 Lambda 函數的 ARN。

1. **使用 Lambda Proxy**：使用 `boto3`` Lambda.Client.invoke(...)`與 API 呼叫路徑和承載字符的清單，在`aws:executeScript`動作內叫用 Lambda 函數。Lambda 函數將傳遞承載字符作為授權標頭的一部分，以對指定的路徑執行 HTTP `GET`呼叫。

   Lambda 調用事件的範例：

   ```
      {
          "ApiCalls": ["/api/v1/pods/", ...],
          "BearerToken": "..."
      }
   ```
**注意**  
承載字符必須產生為父系自動化指令碼的一部分。您需要確保執行父系 Runbook 的委託人具有指定 Amazon EKS 叢集的唯讀許可。

1. **清除階段**：從 Runbook 使用` aws:executeAutomation`動作操作調用自動化，該操作想要在操作設為 的情況下進行 Amazon EKS K8s 控制平面 API 呼叫`Cleanup`。

   輸入參數的範例：

   ```
      {
        "AutomationAssumeRole": "<role-arn>",
        "ClusterName": "<eks-cluster-name>",
        "Operation": "Cleanup"
      }
   ```

 **自動化步驟** 

1.  **ValidateExecution** 
   + 確認自動化不是以獨立執行的方式執行。

1.  **CheckForExistingStack** 
   + 檢查 CloudFormation 堆疊是否已為指定的叢集名稱佈建。
   + 傳回堆疊存在狀態，以及刪除是否安全。

1.  **BranchOnIsStackExists** 
   + 根據堆疊存在進行分支的決策步驟。
   + 更新現有堆疊名稱或繼續操作分支的路由。

1.  **UpdateStackName** 
   + 使用現有堆疊的名稱更新`StackName`變數。
   + 只有在堆疊已存在時才執行。

1.  **BranchOnOperation** 
   + 根據 `Operation` 參數 (`Setup` /) 路由自動化`Cleanup`。
   + 對於 `Setup`：建立新堆疊或描述現有資源的路由。
   + 對於 `Cleanup`：如果可安全刪除，則繼續刪除堆疊。

1.  **GetClusterNetworkConfig** 
   + 描述 Amazon EKS 叢集以取得 VPC 組態。
   + 擷取端點、VPC ID、子網路 IDs、安全群組 ID 和 CA 資料。

1.  **ProvisionResources** 
   + 建立具有必要資源的 CloudFormation 堆疊。
   + 使用必要的聯網組態佈建 Lambda 函數。
   + 標記所有資源以進行追蹤和管理。

1.  **DescribeStackResources** 
   + 擷取已建立/現有堆疊的相關資訊。
   + 取得佈建 Lambda 函數的 ARN。

1.  **BranchOnIsLambdaDeploymentRequired** 
   + 判斷是否需要 Lambda 程式碼部署。
   + 僅繼續部署新建立的堆疊。

1.  **DeployLambdaFunctionCode** 
   + 使用部署套件部署 Lambda 函數程式碼。
   + 使用代理實作更新函數。

1.  **AssertLambdaAvailable** 
   + 驗證 Lambda 函數程式碼更新是否成功。
   + 等待函數處於 `Successful` 狀態。

1.  **PerformStackCleanup** 
   + 刪除 CloudFormation 堆疊和相關聯的資源。
   + 在`Cleanup`操作期間或` Setup`操作失敗時執行。

 **輸出** 

*LambdaFunctionArn*：代理 Lambda 函數的 ARN

**參考**

Systems Manager Automation
+ [執行自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [設定自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [支援自動化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)

# `AWSSupport-TroubleshootEbsCsiDriversForEks`
<a name="automation-awssupport-troubleshoot-ebs-csi-drivers-for-eks"></a>

 **Description** 

 `AWSSupport-TroubleshootEbsCsiDriversForEks` Runbook 可協助疑難排解 Amazon Elastic Kubernetes Service (Amazon EKS) 和 Amazon EBS 容器儲存介面 (CSI) 驅動程式問題中 Amazon Elastic Block Store 磁碟區掛載的問題 

**重要**  
目前 AWS Fargate 不支援在 上執行的 Amazon EBS CSI 驅動程式。

 **如何運作？** 

 Runbook 會`AWSSupport-TroubleshootEbsCsiDriversForEks`執行下列高階步驟：
+ 驗證目標 Amazon EKS 叢集是否存在且處於作用中狀態。
+ 根據附加元件是 Amazon EKS 受管或自我管理，部署進行 Kubernetes API 呼叫所需的身分驗證資源。
+ 執行 Amazon EBS CSI 控制器運作狀態檢查和診斷。
+ 對節點角色和服務帳戶角色執行 IAM 許可檢查。
+ 診斷指定應用程式 Pod 的持久性磁碟區建立問題。
+ 檢查node-to-pod排程，並檢查 Pod 事件。
+ 收集相關的 Kubernetes 和應用程式日誌，將它們上傳到指定的 Amazon S3 儲存貯體。
+ 執行節點運作狀態檢查，並驗證與 Amazon EC2 端點的連線。
+ 檢閱持久性磁碟區區塊型設備附件和掛載狀態。
+ 清除在疑難排解期間建立的身分驗證基礎設施。
+ 產生結合所有診斷結果的全方位故障診斷報告。

**注意**  
Amazon EKS 叢集的身分驗證模式必須設定為 `API`或 `API_AND_CONFIG_MAP`。建議使用 Amazon EKS Access 項目。Runbook 需要 Kubernetes 角色型存取控制 (RBAC) 許可才能執行必要的 API 呼叫。
如果您未指定 Lambda 函數 (`LambdaRoleArn` 參數） 的 IAM 角色，自動化會在您的帳戶`Automation-K8sProxy-Role-<ExecutionId>`中建立名為 的角色。此角色包含 受管政策和 `AWSLambdaBasicExecutionRole` `AWSLambdaVPCAccessExecutionRole`。
某些診斷步驟需要 Amazon EKS 工作者節點為 Systems Manager 受管執行個體。如果節點不是 Systems Manager 受管執行個體，則會略過需要 Systems Manager 存取的步驟，但其他檢查會繼續進行。
自動化包含移除身分驗證基礎設施資源的清除步驟。即使先前的步驟失敗，此清除步驟仍會執行，這有助於防止 AWS 帳戶中的孤立資源。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEbsCsiDriversForEks) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

/

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+ `ec2:DescribeIamInstanceProfileAssociations`
+ `ec2:DescribeInstanceStatus`
+ `ec2:GetEbsEncryptionByDefault`
+ `eks:DescribeAddon`
+ `eks:DescribeAddonVersions`
+ `eks:DescribeCluster`
+ `iam:GetInstanceProfile`
+ `iam:GetOpenIDConnectProvider`
+ `iam:GetRole`
+ `iam:ListOpenIDConnectProviders`
+ `iam:SimulatePrincipalPolicy`
+ `s3:GetBucketLocation`
+ `s3:GetBucketPolicyStatus`
+ `s3:GetBucketPublicAccessBlock`
+ `s3:GetBucketVersioning`
+ `s3:ListBucket`
+ `s3:ListBucketVersions`
+ `ssm:DescribeInstanceInformation`
+ `ssm:GetAutomationExecution`
+ `ssm:GetDocument`
+ `ssm:ListCommandInvocations`
+ `ssm:ListCommands`
+ `ssm:SendCommand`
+ `ssm:StartAutomationExecution`

 **指示** 

請依照下列步驟設定自動化：

1. 在`TroubleshootEbsCsiDriversForEks-SSM-Role`帳戶中建立 SSM 自動化角色。確認信任關係包含下列政策。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 將下列政策連接至 IAM 角色，以授予對指定資源執行指定動作所需的許可。
   + 如果您預期將執行和資源日誌上傳到相同區域中的 Amazon S3 儲存貯 AWS 體，請將 取代`arn:{partition}:s3:::BUCKET_NAME/*`為 中的 `OptionalRestrictPutObjects`。
     + 如果您要在 SSM Amazon S3 儲存貯體應指向正確的 Amazon S3 儲存貯體。 `S3BucketName`
     + 如果您未指定 ，則此許可為選用 `S3BucketName`
     + Amazon S3 儲存貯體必須是私有的，且位於執行 SSM 自動化的相同 AWS 區域中。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "OptionalRestrictPutObjects",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:DescribeIamInstanceProfileAssociations",
                   "ec2:DescribeInstanceStatus",
                   "ec2:GetEbsEncryptionByDefault",
                   "eks:DescribeAddon",
                   "eks:DescribeAddonVersions",
                   "eks:DescribeCluster",
                   "iam:GetInstanceProfile",
                   "iam:GetOpenIDConnectProvider",
                   "iam:GetRole",
                   "iam:ListOpenIDConnectProviders",
                   "iam:SimulatePrincipalPolicy",
                   "s3:GetBucketLocation",
                   "s3:GetBucketPolicyStatus",
                   "s3:GetBucketPublicAccessBlock",
                   "s3:GetBucketVersioning",
                   "s3:ListBucket",
                   "s3:ListBucketVersions",
                   "ssm:DescribeInstanceInformation",
                   "ssm:GetAutomationExecution",
                   "ssm:GetDocument",
                   "ssm:ListCommandInvocations",
                   "ssm:ListCommands",
                   "ssm:SendCommand",
                   "ssm:StartAutomationExecution"
               ],
               "Resource": "*"
           },
           {
               "Sid": "SetupK8sApiProxyForEKSActions",
               "Effect": "Allow",
               "Action": [
                   "cloudformation:CreateStack",
                   "cloudformation:DeleteStack",
                   "cloudformation:DescribeStacks",
                   "cloudformation:UpdateStack",
                   "ec2:CreateNetworkInterface",
                   "ec2:DeleteNetworkInterface",
                   "ec2:DescribeNetworkInterfaces",
                   "ec2:DescribeRouteTables",
                   "ec2:DescribeSecurityGroups",
                   "ec2:DescribeSubnets",
                   "ec2:DescribeVpcs",
                   "eks:DescribeCluster",
                   "iam:CreateRole",
                   "iam:DeleteRole",
                   "iam:GetRole",
                   "iam:TagRole",
                   "iam:UntagRole",
                   "lambda:CreateFunction",
                   "lambda:DeleteFunction",
                   "lambda:GetFunction",
                   "lambda:InvokeFunction",
                   "lambda:ListTags",
                   "lambda:TagResource",
                   "lambda:UntagResource",
                   "lambda:UpdateFunctionCode",
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream",
                   "logs:DescribeLogGroups",
                   "logs:DescribeLogStreams",
                   "logs:ListTagsForResource",
                   "logs:PutLogEvents",
                   "logs:PutRetentionPolicy",
                   "logs:TagResource",
                   "logs:UntagResource",
                   "ssm:DescribeAutomationExecutions",
                   "tag:GetResources",
                   "tag:TagResources"
               ],
               "Resource": "*"
           },
           {
               "Sid": "PassRoleToAutomation",
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": [
                   "arn:aws:iam::*:role/TroubleshootEbsCsiDriversForEks-SSM-Role",
                   "arn:aws:iam::*:role/Automation-K8sProxy-Role-*"
               ],
               "Condition": {
                   "StringLikeIfExists": {
                       "iam:PassedToService": [
                           "lambda.amazonaws.com",
                           "ssm.amazonaws.com"
                       ]
                   }
               }
           },
           {
               "Sid": "AttachRolePolicy",
               "Effect": "Allow",
               "Action": [
                   "iam:AttachRolePolicy",
                   "iam:DetachRolePolicy"
               ],
               "Resource": "*",
               "Condition": {
                   "StringLikeIfExists": {
                       "iam:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                   }
               }
           }
       ]
   }
   ```

------

1. 授予 Amazon EKS 叢集 RBAC （以角色為基礎的存取控制） 所需的許可。建議的方法是在 Amazon EKS 叢集中建立存取項目。

    在 Amazon EKS 主控台中，導覽至您的叢集。對於 Amazon EKS 存取項目，請確認您的存取組態設定為 `API_AND_CONFIG_MAP`或 `API`。如需設定存取項目身分驗證模式的步驟，請參閱[設定存取項目](https://docs.aws.amazon.com//eks/latest/userguide/setting-up-access-entries.html)。

   選擇**建立存取項目**。
   + 針對 *IAM 主體 ARN*，選取您在上一個步驟中為 SSM 自動化建立的 IAM 角色。
   + 針對*類型*，選取 `Standard`。

1. 新增存取政策：
   + 針對*存取範圍*，選取 `Cluster`。
   + 針對*政策名稱*，選取 `AmazonEKSAdminViewPolicy`。

   選擇 **Add Policy (新增政策)**。

   如果您未使用存取項目來管理 Kubernetes API 許可，則必須更新 `aws-auth` ConfigMap，並在 IAM 使用者或角色之間建立角色繫結。確保您的 IAM 實體具有下列唯讀 Kubernetes API 許可：
   + GET `/apis/apps/v1/namespaces/{namespace}/deployments/{name}`
   + GET `/apis/apps/v1/namespaces/{namespace}/replicasets/{name}`
   + GET `/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}`
   + GET `/api/v1/nodes/{name}`
   + GET `/api/v1/namespaces/{namespace}/serviceaccounts/{name}`
   + GET `/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}`
   + GET `/api/v1/persistentvolumes/{name}`
   + GET `/apis/storage.k8s.io/v1/storageclasses/{name}`
   + GET `/api/v1/namespaces/{namespace}/pods/{name}`
   + GET `/api/v1/namespaces/{namespace}/pods`
   + GET `/api/v1/namespaces/{namespace}/pods/{name}/log`
   + GET `/api/v1/events`

1. 執行自動化 [AWSSupport-TroubleshootEbsCsiDriversForEks （主控台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEbsCsiDriversForEks/description)

1. 選擇 **Execute automation** (執行自動化)。

1. 針對輸入參數，輸入下列內容：
   + **AutomationAssumeRole （選用）：**
     + 描述：（選用） 允許 SSM Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。角色需要新增到您的 Amazon EKS 叢集存取項目或 RBAC 許可，以允許 Kubernetes API 呼叫。
     + 類型：`AWS::IAM::Role::Arn`
     + 範例：`TroubleshootEbsCsiDriversForEks-SSM-Role`
   + **EksClusterName：**
     + 描述：目標 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集的名稱。
     + 類型：`String`
   + **ApplicationPodName：**
     + 描述：Amazon EBS CSI 驅動程式發生問題的 Kubernetes 應用程式 Pod 名稱。
     + 類型：`String`
   + **ApplicationNamespace：**
     + 描述：Amazon EBS CSI 驅動程式發生問題之應用程式 Pod 的 Kubernetes 命名空間。
     + 類型：`String`
   + **EbsCsiControllerDeploymentName （選用）：**
     + 描述：（選用） Amazon EBS CSI 控制器 Pod 的部署名稱。
     + 類型：`String`
     + 預設：`ebs-csi-controller`
   + **EbsCsiControllerNamespace （選用）：**
     + 描述：（選用） Amazon EBS CSI 控制器 Pod 的 Kubernetes 命名空間。
     + 類型：`String`
     + 預設：`kube-system`
   + **S3BucketName （選用）：**
     + 描述：（選用） 將上傳故障診斷日誌的目標 Amazon S3 儲存貯體名稱。
     + 類型：`AWS::S3::Bucket::Name`
   + **LambdaRoleArn （選用）：**
     + 描述：（選用） 允許 AWS Lambda 函數存取所需 AWS 服務和資源的 IAM 角色 ARN。
     + 類型：`AWS::IAM::Role::Arn`

   選取**執行**。

1. 完成後，請檢閱*輸出*區段以取得執行的詳細結果。

**參考**

Systems Manager Automation
+ [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEbsCsiDriversForEks/description)
+ [執行自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [設定 自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [支援自動化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)

如需 Amazon EBS CSI 驅動程式的詳細資訊，請參閱 [Amazon EBS CSI 驅動程式](https://docs.aws.amazon.com//eks/latest/userguide/ebs-csi.html)。

# `AWSSupport-TroubleshootEKSALBControllerIssues`
<a name="automation-awssupport-troubleshoot-eks-alb-controller-issues"></a>

 **Description** 

 `AWSSupport-TroubleshootEKSALBControllerIssues` 自動化 Runbook 可協助診斷常見問題，這些常見問題會阻止 AWS Load Balancer控制器針對 Kubernetes 輸入和服務正確佈建和管理 Application Load Balancer (ALB) 和 Network Load Balancer (NLB)。

 此 Runbook 會執行基本元件的end-to-end驗證，包括 OIDC 身分提供者設定、IRSA 組態、聯網先決條件、輸入/服務組態和資源配額。它也會擷取控制器日誌和相關的 Kubernetes 資源組態，以協助識別組態錯誤或操作問題。

**重要**  
此自動化 Runbook 專為使用 Amazon Elastic Compute Cloud (Amazon EC2) 節點群組的 Amazon EKS 叢集而設計，目前不支援在其中執行的叢集 AWS Fargate。

 **如何運作？** 

 Runbook 會`AWSSupport-TroubleshootEKSALBControllerIssues`執行下列高階步驟：
+ 驗證 Amazon EKS 叢集狀態、存取項目組態和 OIDC 供應商設定。
+ 為 Kubernetes API 通訊建立臨時 Lambda 代理。
+ Checks AWS Load Balancer 控制器部署和服務帳戶組態。
+ 驗證 Pod 身分 Webhook 和 IAM 角色注入。
+ 驗證 Application Load Balancer 和 Network Load Balancer 佈建的子網路組態和標記。
+ 根據目前的用量檢查 Application Load Balancer 和 Network Load Balancer 帳戶配額。
+ 驗證輸入和服務資源註釋。
+ 檢查工作者節點安全群組標記負載平衡器整合。
+ 收集控制器 Pod 日誌以進行診斷。
+ 清除臨時身分驗證資源。
+ 使用問題清單和修復步驟產生診斷報告。

**注意**  
Amazon EKS 叢集必須為執行此自動化的 IAM 實體設定存取項目。叢集的身分驗證模式必須設定為 `API`或 `API_AND_CONFIG_MAP`。如果沒有適當的存取項目組態，自動化會在初始驗證期間終止。
`LambdaRoleArn` 參數是必要的，且必須`AWSLambdaBasicExecutionRole``AWSLambdaVPCAccessExecutionRole`連接 AWS 受管政策，以允許代理函數與 Kubernetes API 通訊。
 AWS Load Balancer控制器必須是版本 `v2.1.1`或更新版本。
自動化包含清除步驟，可移除臨時身分驗證基礎設施資源。即使先前的步驟失敗，此清除步驟仍會執行，確保 AWS 您的帳戶中沒有保留孤立的資源。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEKSALBControllerIssues) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

/

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+ `cloudformation:CreateStack`
+ `cloudformation:DeleteStack`
+ `cloudformation:DescribeStacks`
+ `cloudformation:UpdateStack`
+ `ec2:CreateNetworkInterface`
+ `ec2:DeleteNetworkInterface`
+ `ec2:DescribeInstances`
+ `ec2:DescribeNetworkInterfaces`
+ `ec2:DescribeRouteTables`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeSubnets`
+ `ec2:DescribeVpcs`
+ `eks:DescribeCluster`
+ `eks:ListAssociatedAccessPolicies`
+ `elasticloadbalancing:DescribeAccountLimits`
+ `elasticloadbalancing:DescribeLoadBalancers`
+ `iam:GetRole`
+ `iam:ListOpenIDConnectProviders`
+ `iam:PassRole`
+ `lambda:CreateFunction`
+ `lambda:DeleteFunction`
+ `lambda:GetFunction`
+ `lambda:InvokeFunction`
+ `lambda:ListTags`
+ `lambda:TagResource`
+ `lambda:UntagResource`
+ `lambda:UpdateFunctionCode`
+ `logs:CreateLogGroup`
+ `logs:CreateLogStream`
+ `logs:DescribeLogGroups`
+ `logs:DescribeLogStreams`
+ `logs:ListTagsForResource`
+ `logs:PutLogEvents`
+ `logs:PutRetentionPolicy`
+ `logs:TagResource`
+ `logs:UntagResource`
+ `ssm:DescribeAutomationExecutions`
+ `ssm:GetAutomationExecution`
+ `ssm:StartAutomationExecution`
+ `tag:GetResources`
+ `tag:TagResources`

 **指示** 

請依照下列步驟來設定和執行自動化：

**注意**  
在執行自動化之前，請依照下列步驟設定所需的 IAM 角色：一個用於 Systems Manager Automation 執行 Runbook，另一個用於 Lambda 與 Kubernetes API 通訊：  
在`TroubleshootEKSALBController-SSM-Role`帳戶中建立 SSM 自動化角色。確認信任關係包含下列政策。  

   ```
   {
               "Version": "2012-10-17",		 	 	 
               "Statement": [
                   {
                       "Sid": "",
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "ssm.amazonaws.com"
                       },
                       "Action": "sts:AssumeRole"
                   }
               ]
           }
   ```
連接下列 IAM 政策以授予必要的許可：  

   ```
   {
               "Version": "2012-10-17",		 	 	 
               "Statement": [{
                   "Sid": "TroubleshootEKSALBControllerIssuesActions",
                   "Effect": "Allow",
                   "Action": [
                       "eks:DescribeCluster",
                       "eks:ListAssociatedAccessPolicies",
                       "iam:GetRole",
                       "iam:ListOpenIDConnectProviders",
                       "ssm:StartAutomationExecution",
                       "ssm:GetAutomationExecution",
                       "ssm:DescribeAutomationExecutions",
                       "ec2:DescribeSubnets",
                       "ec2:DescribeRouteTables",
                       "elasticloadbalancing:DescribeLoadBalancers",
                       "elasticloadbalancing:DescribeAccountLimits",
                       "ec2:DescribeInstances",
                       "ec2:DescribeNetworkInterfaces",
                       "ec2:DescribeSecurityGroups"
                   ],
                   "Resource": "*"
               },
               {
                   "Sid": "SetupK8sApiProxyForEKSActions",
                   "Effect": "Allow",
                   "Action": [
                       "cloudformation:CreateStack",
                       "cloudformation:DeleteStack",
                       "cloudformation:DescribeStacks",
                       "cloudformation:UpdateStack",
                       "ec2:CreateNetworkInterface",
                       "ec2:DeleteNetworkInterface",
                       "ec2:DescribeNetworkInterfaces",
                       "ec2:DescribeRouteTables",
                       "ec2:DescribeSecurityGroups",
                       "ec2:DescribeSubnets",
                       "ec2:DescribeVpcs",
                       "eks:DescribeCluster",
                       "iam:GetRole",
                       "lambda:CreateFunction",
                       "lambda:DeleteFunction",
                       "lambda:GetFunction",
                       "lambda:InvokeFunction",
                       "lambda:ListTags",
                       "lambda:TagResource",
                       "lambda:UntagResource",
                       "lambda:UpdateFunctionCode",
                       "logs:CreateLogGroup",
                       "logs:CreateLogStream",
                       "logs:DescribeLogGroups",
                       "logs:DescribeLogStreams",
                       "logs:ListTagsForResource",
                       "logs:PutLogEvents",
                       "logs:PutRetentionPolicy",
                       "logs:TagResource",
                       "logs:UntagResource",
                       "ssm:DescribeAutomationExecutions",
                       "tag:GetResources",
                       "tag:TagResources"
                   ],
                   "Resource": "*"
               },
               {
                   "Sid": "PassRoleToAutomation",
                   "Effect": "Allow",
                   "Action": "iam:PassRole",
                   "Resource": "*",
                   "Condition": {
                       "StringLikeIfExists": {
                           "iam:PassedToService": [
                               "lambda.amazonaws.com",
                               "ssm.amazonaws.com"
                           ]
                       }
                   }
               }]
           }
   ```
設定 Amazon EKS 叢集的存取項目。這是自動化的必要要求。如需設定存取項目身分驗證模式的步驟，請參閱[設定存取項目](https://docs.aws.amazon.com//eks/latest/userguide/setting-up-access-entries.html)。  
在 Amazon EKS 主控台中，導覽至您的叢集並遵循下列步驟：  
在**存取**區段下，確認您的身分驗證組態設定為 `API`或 `API_AND_CONFIG_MAP`。
選擇**建立存取項目**並設定：  
針對 *IAM 主體 ARN*，選取您建立的 IAM 角色 (`TroubleshootEKSALBController-SSM-Role`)。
針對*類型*，選取 `Standard`。
新增存取政策：  
針對*政策名稱*，選取 `AmazonEKSAdminViewPolicy`。
針對*存取範圍*，選取 `Cluster`。
選擇 **Add Policy (新增政策)**。
驗證詳細資訊，然後選擇**建立**。
為 Lambda 函數建立 IAM 角色 （在輸入參數`LambdaRoleArn`中參考為 )：  
使用下列信任政策建立新的 IAM 角色：  

     ```
     {
                 "Version": "2012-10-17",		 	 	 
                 "Statement": [
                     {
                         "Effect": "Allow",
                         "Principal": {
                             "Service": "lambda.amazonaws.com"
                         },
                         "Action": "sts:AssumeRole"
                     }
                 ]
             }
     ```
將下列 AWS 受管政策連接至此角色：  
`AWSLambdaBasicExecutionRole`
`AWSLambdaVPCAccessExecutionRole`
請注意此角色的 ARN，因為`LambdaRoleArn`輸入參數需要此角色。

1. 在 AWS Systems Manager 主控台中導覽至 [AWSSupport-TroubleshootEKSALBControllerIssues](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEKSALBControllerIssues/description)。

1. 選擇 **Execute automation (執行自動化)**。

1. 針對輸入參數，輸入下列項目：
   + **AutomationAssumeRole （選用）：**

     類型：AWS::IAM::Role：：Arn

     描述：（選用） 允許 Systems Manager Automation 代表您執行動作的 AWS Identity and Access Management (IAM) 角色的 Amazon Resource Name (ARN)。如果未指定角色，Systems Manager Automation 會使用啟動此 Runbook 之使用者的許可。

     允許模式：^arn：(？：aws\$1aws-cn\$1aws-us-gov)：iam：：\$1d\$112\$1：role/？【a-zA-Z\$10-9\$1=，.@\$1-\$1/】\$1\$1
   + **EksClusterName （必要）：**

     類型：字串

     描述：（必要） Amazon Elastic Kubernetes Service (Amazon EKS) 叢集的名稱。

     允許模式：^【0-9A-Za-z】【A-Za-z0-9-\$1】\$10，99\$1\$1
   + **ALBControllerDeploymentName （選用）：**

     類型：字串

     描述：（選用） Amazon EKS 叢集中的 AWS Load Balancer控制器部署名稱。這通常是 'aws-load-balancer-controller'，除非您已在安裝期間加以自訂。

     允許模式：^【a-z0-9】(【-.a-z0-9】\$10，251\$1【a-z0-9】)？\$1

     預設：aws-load-balancer-controller
   + **ALBControllerNamespace （選用）：**

     類型：字串

     描述：（選用） 部署 AWS Load Balancer控制器的 Kubernetes 命名空間。根據預設，這是「kube-system」，但如果您已在自訂命名空間中安裝控制器，則可能會有所差異。

     允許模式：^【a-z0-9】(【-a-z0-9】\$10，61\$1【a-z0-9】)？\$1

     預設：kube-system
   + **ServiceAccountName （選用）：**

     類型：字串

     描述：（選用） 與 AWS Load Balancer控制器相關聯的 Kubernetes 服務帳戶名稱。除非在安裝期間自訂，否則這通常是 'aws-load-balancer-controller'。

     允許模式：^【a-z0-9】(【-.a-z0-9】\$10，251\$1【a-z0-9】)？\$1

     預設：aws-load-balancer-controller
   + **ServiceAccountNamespace （選用）：**

     類型：字串

     描述：（選用） AWS Load Balancer控制器的服務帳戶所在的 Kubernetes 命名空間。這通常是「kube-system」，但如果您已使用自訂命名空間，則可能會有所不同。

     允許模式：^【a-z0-9】(【-a-z0-9】\$10，61\$1【a-z0-9】)？\$1

     預設：kube-system
   + **IngressName （選用）：**

     類型：字串

     描述：（選用） 要驗證的傳入資源名稱 (Application Load Balancer)。如果未指定，則會略過傳入驗證。

     允許模式：^\$1\$1^【a-z0-9】【a-z0-9.-】\$10，251\$1【a-z0-9】\$1

     預設："" （空字串）
   + **IngressNamespace （選用）：**

     類型：字串

     描述：（選用） 傳入資源的命名空間。如果指定 `IngressName` ，則為必要項目。

     允許模式：^\$1\$1^【a-z0-9】【a-z0-9-】\$10，61\$1【a-z0-9】\$1

     預設："" （空字串）
   + **ServiceName （選用）：**

     類型：字串

     描述：（選用） 驗證 Network Load Balancer (Network Load Balancer) 註釋的特定服務資源名稱。如果未指定，則會略過服務資源驗證。

     允許模式：^\$1\$1^【a-z0-9】【a-z0-9.-】\$10，251\$1【a-z0-9】\$1

     預設："" （空字串）
   + **ServiceNamespace （選用）：**

     類型：字串

     描述：（選用） 服務資源的命名空間。如果指定 `ServiceName` ，則為必要項目。

     允許模式：^\$1\$1^【a-z0-9】【a-z0-9-】\$10，61\$1【a-z0-9】\$1

     預設："" （空字串）
   + **LambdaRoleArn （必要）：**

     類型：AWS::IAM::Role：：Arn

     描述：（必要） 允許 AWS Lambda (Lambda) 函數存取所需 AWS 服務和資源的 IAM 角色 ARN。將 AWS 受管政策： `AWSLambdaBasicExecutionRole`和 `AWSLambdaVPCAccessExecutionRole`與您的 lambda 函數執行 IAM 角色建立關聯。

     允許模式：^arn：(？：aws\$1aws-cn\$1aws-us-gov)：iam：：\$1d\$112\$1：role/？【a-zA-Z\$10-9\$1=，.@\$1-\$1/】\$1\$1

1. 選擇 **Execute (執行)**。

1. 自動化會啟動。

1. 文件會執行下列步驟：

   1. **ValidateAccessEntryAndOIDCProvider：**

      透過檢查存取項目許可和 OIDC 提供者組態來驗證 Amazon EKS 叢集 IAM 設定。

   1. **SetupK8sAuthenticationClient：**

      執行 SAW 文件 AWSSupport-SetupK8sApiProxyForEKS，以設定 lambda 函數在叢集上執行 Amazon EKS API 呼叫。

   1. **VerifyALBControllerAndIRSASetup：**

      檢查指定的服務帳戶和 Application Load Balancer 控制器是否存在於各自的命名空間中。同時檢查 Application Load Balancer 控制器的服務帳戶角色註釋和信任政策。

   1. **VerifyPodIdentityWebhookAndEnv：**

      檢查 pod-identity-webhook 是否正在執行。同時檢查 IRSA 是否注入 Pod 的 ENV 變數。

   1. **ValidateSubnetRequirements：**

      檢查具有 8 個可用 IP 的兩個 AZ 中至少兩個子網路，公有/私有負載平衡器存在適當的子網路標記。

   1. **CheckLoadBalancerLimitsAndUsage：**

      比較帳戶限制與 Application Load Balancer 和 Network Load Balancer 的數量。

   1. **CheckIngressOrServiceAnnotations：**

      檢查輸入和服務資源中的註釋和規格是否正確，以確保它們已針對 Application Load Balancer 和 Network Load Balancer 使用正確設定。

   1. **CheckWorkerNodeSecurityGroupTags：**

      確認連接到工作者節點的安全群組只有一個必要的叢集標籤。

   1. **CaptureALBControllerLogs：**

      從 Amazon EKS 叢集中執行的 AWS Load Balancer控制器 Pod 擷取最新的診斷日誌。

   1. **CleanupK8sAuthenticationClient：**

      使用 'Cleanup' 操作執行 SAW 文件 'AWSSupport-SetupK8sApiProxyForEKS'，以清除在自動化過程中建立的資源。

   1. **GenerateReport：**

      產生自動化報告。

1. 執行完成後，請檢閱輸出區段以取得執行的詳細結果：

   1. **報告：**

      提供所有已執行檢查的完整摘要，包括 Amazon EKS 叢集的狀態、Application Load Balancer 控制器設定、IRSA 組態、子網路需求、負載平衡器限制、輸入/服務註釋、工作者節點安全群組標籤，以及 Application Load Balancer 控制器日誌。它還包括任何已識別的問題和建議的修復步驟。

**參考**

Systems Manager Automation
+ [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEKSALBControllerIssues/description)
+ [執行自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [設定自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [支援自動化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)

 AWS Load Balancer控制器相關的文件
+ [AWS Load Balancer控制器](https://docs.aws.amazon.com//eks/latest/userguide/aws-load-balancer-controller.html)
+ [設定存取項目](https://docs.aws.amazon.com//eks/latest/userguide/setting-up-access-entries.html)