

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS Glue
<a name="automation-ref-glu"></a>

 AWS Systems Manager 自动化为用户提供了预定义的运行手册。 AWS Glue有关运行手册的更多信息，请参阅[使用运行手册](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-documents.html)。有关如何查看运行手册内容的信息，请参阅 [查看运行手册内容](automation-runbook-reference.md#view-automation-json)。

**Topics**
+ [`AWSSupport-TroubleshootGlueConnection`](automation-awssupport-troubleshootglueconnection.md)

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

 **描述** 

 该**AWSSupport-TroubleshootGlueConnections**运行手册有助于解决 AWS Glue 连接问题。测试连接的目标必须通过 JDBC 连接到达，可以是亚马逊关系数据库服务 (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 Execution Id* 

 **如何工作？** 

 运行手册执行以下步骤：
+ 描述用于获取 AWS Glue 连接检查的源信息（子网和安全组）的连接。
+ 从 JDBC URL 中引用的数据源或和`DatasourceSubnets`参数（如果存在）中获取目标信息（子网`DatasourceSecurityGroups`和安全组）。
+ 如果 JDBC URL 中存在的数据源是 Amazon RDS 实例或集群或 Amazon Redshift 集群，则此自动 ENIs 使用在前面的步骤中收集的源和目标信息进行创建，并使用 Reachability Analyzer 在它们之间执行连接检查。
+ Lambda 函数（此自动化环境中的网络接入点）用于执行 L4 连接和名称解析检查。
+ 使用相同的 Lambda 函数对亚马逊 S3 终端节点执行检查。
+ 策略模拟器用于确定连接中使用的 IAM 角色是否具有所需的权限。
+ 自动化会检查连接使用的安全组是否具有预期的配置。
+ 将生成一份报告，其中包含测试连接操作失败的可能原因 and/or 以及已执行的成功测试。

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

**文档类型**

自动化

**所有者**

Amazon

**平台**

/

**所需的 IAM 权限**

`AutomationAssumeRole` 参数需要执行以下操作才能成功使用运行手册。
+  `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`应将[亚马逊VPCReachabilityAnalyzerFullAccessPolicy](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. [https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootGlueConnection/description](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootGlueConnection/description)在 Systems Manager 的 “文档” 下导航至。

1. 选择 Execute automation（执行自动化）。

1. 对于输入参数，请输入以下内容：
   +  **AutomationAssumeRole （可选）：**

      允许 Systems Manager Automation 代表您执行操作的 AWS AWS Identity and Access Management (IAM) 角色的亚马逊资源名称 (ARN)。如果未指定角色，Systems Manager Automation 将使用启动此运行手册的用户的权限。
   +  **TestConnectionRole （必填）** 

      连接测试期间使用的 IAM 角色的亚马逊资源名称 (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_cn/systems-manager-automation-runbooks/latest/userguide/images/awssupport-troubleshootglueconnection_input_parameters.png)

1. 选择执行。

1. 自动化启动。

1. 自动化运行手册执行以下步骤：
   +  **ParseInputs:** 

      此步骤验证输入的组合。如果同时提供`DatasourceSecurityGroups`和`DatasourceSubnets`，则它们有效并按原样返回。如果未提供任何列表，则返回两个空列表。如果只提供了其中一个，则该步骤会引发`ValueException`。
   +  **GetConnectionDetails:** 

     此步骤返回所提供 AWS Glue 连接的详细信息。
   +  **ParseSecurityGroupList:** 

      此步骤用于连接 a `SecurityGroupIdList` 中的，以备`String`将来在此自动化中使用。
   +  **GetConnectionData:** 

      根据 JDBC 网址确定:`RedShift``RdsInstance`、`RdsCluster`和之间的连接类型。`Other`此外，还会返回 JDBC 连接中使用的域和端口、连接的 Amazon VPC 及其域名服务器。
   +  **GetNetworkDetails:** 

      从 Amazon RDS 或 Amazon Redshift 目标获取子网和安全组信息。
   +  **创建ENITemplate：**

      生成用于创建用于测试连通性的网络接口的 AWS CloudFormation 模板。这是运行 Reachability Analyzer 工具所必需的。
   +  **创建ENIStack：**

      根据上一步中创建的模板创建 CloudFormation 堆栈。
   +  **GetStackDetails:** 

      描述在前`SourceNetworkInterface`一个 CloudFormation 堆栈中创建的堆栈并检索`TargetNetworkInterfaces`信息。
   +  **RunSourceToTargetCheck:** 

      使用 Reachability Analy ENIs zer 工具在上一步中创建的源和目标之间运行检查。
   +  **删除ENIStack：**

     删除创建网络接口的 CloudFormation 堆栈
   +  **CreateNetworkPointOfPresence:** 

      CloudFormation 创建用作网络接入点的 Lambda 函数。
   +  **GetFunctionName:** 

      执行 CloudFormation 描述堆栈 API 调用以检索在上一步中创建的 Lambda 函数的名称。
   +  **RunEndpointChecks:** 

      使用网络接入点来确定 JDBC 连接中存在的端点是否可解析且可在声明的端口中访问。
   +  **检查 3Connectivity：**

      检查与 Amazon S3 服务的 AWS Glue 连接之间的网络连接。
   +  **DeletePointOfPresence:** 

      删除创建网络接入点 Lambda 的 CloudFormation 堆栈。
   +  **测试IAMRole权限：**

      检查用于测试的 IAM 角色是否具有执行测试所需的权限。
   +  **CheckConnectionSecurityGroupReferencingRule:** 

      检查 AWS Glue 连接中使用的安全组是否允许来自其自身的所有入口流量。它将返回没有此规则的安全组列表（如果有）。
   +  **GenerateReport:** 

      生成一份报告，其中包含发现的列表（连接测试失败的可能原因）和后续步骤（尝试解决连接测试失败的问题）。

1. 完成后，请查看 “输出” 部分，了解执行的详细结果：
   +  **自动化结果** 

      在本节中，您将找到描述测试连接操作失败的可能原因（发现）以及如何修复这些情况（后续步骤）的场景。如果自动化无法找到测试失败的原因，本节也将告知这一点。
   +  **成功的测试** 

      在本节中，您将找到一些场景，告知此自动化已成功测试的内容。如果自动化无法确定测试连接失败的原因，成功的测试非常有用，因为它们会通过告知没有导致问题的因素来缩小调查范围。
   +  **自动化错误** 

      在本节中，您将找到描述自动化过程中发生的问题的场景，这些问题可能限制了自动化可以执行的测试数量。场景描述将告知哪个步骤失败。  
![\[Troubleshooting results for AWS Glue connection issues with DNS resolution and IAM role problems.\]](http://docs.aws.amazon.com/zh_cn/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/) 