

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

# `AWSSupport-TroubleshootGlueConnection`
<a name="automation-awssupport-troubleshootglueconnection"></a>

 **Description** 

 **AWSSupport-TroubleshootGlueConnections** Runbook 可協助疑難排解 AWS Glue 連線問題。測試連線的目標必須透過 JDBC 連線到達，而且可以是 Amazon Relational Database Service (Amazon RDS) 叢集/執行個體、Amazon Redshift 叢集，或可透過 JDBC 存取的任何其他目標。在前兩個案例中， Reachability Analyzer 工具用於判斷是否授予來源 (AWS Glue) 與目標 (Amazon RDS 或 Amazon Redshift) 之間的連線。

 如果連線的目標不是 Amazon RDS 或 Amazon Redshift，仍會透過在 AWS Glue 與連線相同的子網路 （網路存在點） 中建立 AWS Lambda 函數，並檢查目標名稱是否可以解析，以及是否可在目標連接埠中連線來測試連線。

**重要**  
 為了執行 [Reachability Analyzer](https://docs.aws.amazon.com/vpc/latest/reachability/what-is-reachability-analyzer.html) 檢查，會在每個連線的資料來源子網路中建立[彈性網路界面](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)。請確定您在這些子網路上有足夠的可用 IPs，而且在執行此自動化之前，使用一個 IP 不會影響您的工作負載。

**重要**  
 此自動化建立的所有資源都會加上標籤，以便輕鬆找到。使用的標籤為：  
 `AWSSupport-TroubleshootGlueConnection`：true 
 `AutomationExecutionId`：*Amazon EC2 Systems Manager 執行 ID* 

 **如何運作？** 

 Runbook 會執行下列步驟：
+ 描述連線 AWS Glue 以取得連線檢查的來源資訊 （子網路和安全群組）。
+ 從 JDBC URL 中參考的資料來源或存在的 `DatasourceSecurityGroups`和 `DatasourceSubnets` 參數擷取目標資訊 （子網路和安全群組）。
+ 如果 JDBC URL 中存在的資料來源是 Amazon RDS 執行個體或叢集或 Amazon Redshift 叢集，則此自動化會使用先前步驟中收集的來源和目標資訊建立 ENIs，並使用 Reachability Analyzer 在它們之間執行連線檢查。
+ Lambda 函數 （在此自動化內容中為網路存在點） 用於執行 L4 連線和名稱解析檢查。
+ 相同的 Lambda 函數用於對 Amazon S3 端點執行檢查。
+ 政策模擬器用於判斷連線中使用的 IAM 角色是否具有所需的許可。
+ 自動化會檢查連線所使用的安全群組是否具有預期的組態。
+ 會產生報告，其中包含測試連線操作中失敗的可能原因，和/或成功執行的測試。

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

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

/

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+  `cloudformation:CreateStack` 
+  `cloudformation:DeleteStack` 
+  `ec2:CreateNetworkInsightsPath` 
+  `ec2:CreateNetworkInterface` 
+  `ec2:CreateTags` 
+  `ec2:DeleteNetworkInsightsAnalysis` 
+  `ec2:DeleteNetworkInsightsPath` 
+  `ec2:DeleteNetworkInterface` 
+  `ec2:StartNetworkInsightsAnalysis` 
+  `iam:AttachRolePolicy` 
+  `iam:CreateRole` 
+  `iam:DeleteRole` 
+  `iam:DeleteRolePolicy` 
+  `iam:DetachRolePolicy` 
+  `iam:PutRolePolicy` 
+  `iam:TagRole` 
+  `lambda:CreateFunction` 
+  `lambda:DeleteFunction` 
+  `lambda:TagResource` 
+  `logs:CreateLogGroup` 
+  `logs:DeleteLogGroup` 
+  `logs:PutRetentionPolicy` 
+  `logs:TagResource` 
+  `glue:GetConnection` 
+  `glue:GetDataCatalogEncryptionSettings` 
+  `cloudformation:DescribeStacks` 
+  `cloudformation:DescribeStackEvents` 
+  `ec2:DescribeDhcpOptions` 
+  `ec2:DescribeNetworkInsightsPaths` 
+  `ec2:DescribeNetworkInsightsAnalyses` 
+  `ec2:DescribeSecurityGroupRules` 
+  `ec2:DescribeSecurityGroups` 
+  `ec2:DescribeSubnets` 
+  `ec2:DescribeVpcs` 
+  `ec2:DescribeVpcAttribute` 
+  `iam:GetRole` 
+  `iam:ListAttachedRolePolicies` 
+  `iam:SimulatePrincipalPolicy` 
+  `kms:DescribeKey` 
+  `lambda:InvokeFunction` 
+  `lambda:GetFunction` 
+  `s3:GetEncryptionConfiguration` 
+  `iam:PassRole` 

**重要**  
 除了上述動作之外， `AutomationAssumeRole`還應該將 [ AmazonVPCReachabilityAnalyzerFullAccessPolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonVPCReachabilityAnalyzerFullAccessPolicy.html) 作為[連接的受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)，以便成功執行 [Reachability Analyzer](https://docs.aws.amazon.com/vpc/latest/reachability/what-is-reachability-analyzer.html) 測試。

以下是可授予 的政策範例`AutomationAssumeRole`：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Sid": "TaggedAWSResourcesPermissions",
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/AWSSupport-TroubleshootGlueConnection": "true"
                }
            },
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreateRole",
                "iam:DeleteRole",
                "iam:DeleteRolePolicy",
                "iam:DetachRolePolicy",
                "iam:TagRole",
                "lambda:CreateFunction",
                "lambda:DeleteFunction",
                "lambda:TagResource",
                "logs:DeleteLogGroup",
                "logs:CreateLogGroup",
                "logs:PutRetentionPolicy",
                "logs:TagResource",
                "cloudformation:CreateStack",
                "cloudformation:DeleteStack"
            ],
            "Resource": "*"
        },
        {
            "Sid": "TaggedEC2ResourcesPermissions",
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/AWSSupport-TroubleshootGlueConnection": "true"
                }
            },
            "Action": [
                "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
        },
        {
            "Sid": "PutRolePolicy",
            "Effect": "Allow",
            "Condition": {
                "StringEquals": {
                    "iam:ResourceTag/AWSSupport-TroubleshootGlueConnection": "true"
                }
            },
            "Action": [
                "iam:PutRolePolicy",
                "iam:DeleteRolePolicy"
            ],
            "Resource": "*"
        },
        {
            "Sid": "InvokeFunction",
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": "arn:*:lambda:*:*:function:point-of-presence-*"
        },
        {
            "Sid": "UnTaggedActions",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateNetworkInsightsPath",
                "ec2:DeleteNetworkInsightsAnalysis",
                "ec2:DeleteNetworkInsightsPath",
                "ec2:CreateNetworkInterface",
                "ec2:CreateTags",
                "ec2:StartNetworkInsightsAnalysis",
                "glue:GetConnection",
                "glue:GetDataCatalogEncryptionSettings",
                "cloudformation:DescribeStacks",
                "cloudformation:DescribeStackEvents",
                "ec2:DescribeDhcpOptions",
                "ec2:DescribeNetworkInsightsPaths",
                "ec2:DescribeNetworkInsightsAnalyses",
                "ec2:DescribeSecurityGroupRules",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeSubnets",
                "ec2:DescribeVpcs",
                "ec2:DescribeVpcAttribute",
                "iam:GetRole",
                "iam:ListAttachedRolePolicies",
                "iam:SimulatePrincipalPolicy",
                "kms:DescribeKey",
                "lambda:GetFunction",
                "s3:GetEncryptionConfiguration"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "arn:*:iam::*:role/point-of-presence-*",
            "Condition": {
                "StringLikeIfExists": {
                    "iam:PassedToService": "lambda.amazonaws.com"
                }
            }
        }
    ]
}
```

------

 **指示** 

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

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

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

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

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

      在連線測試期間使用的 IAM 角色的 Amazon Resource Name (ARN)。
   +  **ConnectionName （必要）** 

      AWS Glue 您想要故障診斷的測試連線名稱失敗。
   +  **PersistReachabilityAnalyzerResults （選用）** 

      標記會通知是否應保留 Reachability Analyzer 執行的結果。預設：`false.`
   +  **PointOfPresenceLogRetentionPeriod （選用）** 

      Lambda 存在點的日誌將存放的天數。預設：`7`。
   +  **DatasourceSubnets （選用）** 

      如果無法使用原始資料來源，請使用此參數來提供使用的子網路，以便仍執行連線測試。**必須**搭配 使用`DatasourceSecurityGroups`。範例：`subnet-1,subnet-2`。
   +  **DatasourceSecurityGroups （選用）** 

      如果無法使用原始資料來源，請使用此參數來提供其使用的安全群組，以便仍執行連線測試。**必須**搭配 使用`DatasourceSubnets`。範例：`sg-1,sg-2`。  
![\[Input parameters form for AWS Glue connection troubleshooting with various configuration options.\]](http://docs.aws.amazon.com/zh_tw/systems-manager-automation-runbooks/latest/userguide/images/awssupport-troubleshootglueconnection_input_parameters.png)

1. 選取執行。

1. 自動化會啟動。

1. 自動化 Runbook 會執行下列步驟：
   +  **ParseInputs：**

      此步驟會驗證輸入組合。如果同時提供 `DatasourceSubnets` `DatasourceSecurityGroups`和 ，則它們有效並依原狀傳回。如果未提供，則會傳回兩個空白清單。如果只提供其中一個，步驟會引發 `ValueException`。
   +  **GetConnectionDetails：**

     此步驟會傳回所提供 AWS Glue 連線的詳細資訊。
   +  **ParseSecurityGroupList：**

      此步驟用於串連 `SecurityGroupIdList`中的 `String`，以供此自動化的未來使用。
   +  **GetConnectionData：**

      根據 JDBC URL，決定 `RedShift`、 `RdsInstance``RdsCluster`和 之間的連線類型`Other`。此外， 會傳回 JDBC 連線中使用的網域和連接埠、連線的 Amazon VPC 及其網域名稱伺服器。
   +  **GetNetworkDetails：**

      從 Amazon RDS 或 Amazon Redshift 目標取得子網路和安全群組資訊。
   +  **CreateENITemplate：**

      產生用於建立用於測試連線的網路介面的 AWS CloudFormation 範本。這是執行 Reachability Analyzer 工具的必要項目。
   +  **CreateENIStack：**

      從上一個步驟中建立的範本建立 CloudFormation 堆疊。
   +  **GetStackDetails：**

      描述在上一個 CloudFormation 堆疊中建立的堆疊，並擷取`SourceNetworkInterface``TargetNetworkInterfaces`資訊。
   +  **RunSourceToTargetCheck：**

      使用 Reachability Analyzer 工具，在上一個步驟中建立的來源和目標 ENIs 之間執行檢查。
   +  **DeleteENIStack：**

     刪除建立網路介面的 CloudFormation 堆疊
   +  **CreateNetworkPointOfPresence：**

      CloudFormation 會建立做為網路存在點的 Lambda 函數。
   +  **GetFunctionName：**

      執行 CloudFormation 描述堆疊 API 呼叫，以擷取在上一個步驟中建立的 Lambda 函數名稱。
   +  **RunEndpointChecks：**

      使用網路存在點來判斷 JDBC 連線中存在的端點是否可以在宣告的連接埠中解析和連線。
   +  **CheckS3Connectivity：**

      檢查從 AWS Glue 連線到 Amazon S3 服務的網路連線。
   +  **DeletePointOfPresence：**

      刪除建立 Lambda 網路存在點的 CloudFormation 堆疊。
   +  **TestIAMRolePermissions：**

      檢查用於測試的 IAM 角色是否具有執行測試所需的許可。
   +  **CheckConnectionSecurityGroupReferencingRule：**

      檢查 AWS Glue 連線中使用的安全群組是否允許來自本身的所有輸入流量。如果有的話，它會傳回沒有此規則的安全群組清單。
   +  **GenerateReport：**

      產生包含清單 o 調查結果 （連線測試失敗的可能原因） 和後續步驟 （嘗試解決連線測試失敗） 的報告。

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

      在本節中，您將找到描述測試連線操作失敗 （尋找） 的可能原因，以及如何修正這些操作 （後續步驟） 的案例。如果自動化找不到測試失敗的原因，也會在本節中通知您。
   +  **成功的測試** 

      在本節中，您會找到通知此自動化已成功測試的內容的案例。成功的測試在自動化無法識別測試連線失敗的原因時很有用，因為它們會透過通知未造成問題的因素來減少調查範圍。
   +  **自動化錯誤** 

      在本節中，您將找到描述自動化期間所發生問題的案例，這可能限制了自動化可執行的測試數量。案例的描述會通知哪個步驟失敗。  
![\[Troubleshooting results for AWS Glue connection issues with DNS resolution and IAM role problems.\]](http://docs.aws.amazon.com/zh_tw/systems-manager-automation-runbooks/latest/userguide/images/awssupport-troubleshootglueconnection_outputs.png)

 **參考** 

Systems Manager Automation
+  [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootGlueConnection/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/) 