我在这里阅读了所有已回答的问题,其中5个问题。所有这些都是关于现有AWS产品的过时。
所以,作为AWS的新手,我想知道如何解决我的问题,或者仅使用AWS解决方案解决问题的最佳方法是什么。我想避开任何第三方。我知道我会引用我用Google搜索的一种方法,但只是引用它。
无论如何,我有一个目标要实现,这基本上是替换我的SQL Server 2012集成服务,只使用AWS产品。现在我正在访问FTP服务器并将一堆CSV文件下载到我的驱动器,读取它们,将它们转换为我的数据集并将它们加载到我指定的表中。此过程计划每天执行3次。
我最初的提议是将文件上传到S3,使用AWS Glue Crawlers抓取我的文件并填写我自己创建的AWS Glue数据目录,将它们ETL添加到我的RDS。到目前为止,我可以实现我的Lambda函数连接我的FTP并上传到我的S3,我也可以使用AWS Athena检索我的数据,只是为了看看是否一切正常。
但是现在,我正努力让我的ETL复制/创建我的表到RDS并写入数据。我在相同的RDS VPC,子网和安全组下创建了My Glue Connection,我的安全组也有来自任何地方的All TCP(我知道,我不会离开这个,它只是用于测试)而且我正在使用JDBC,编写以下JDBC URL:
jdbc:sqlserver://my-database-name.xsdfxsdsfsfsx.us-east-1.rds.amazonaws.com:1433;databaseName=my-database-name
我可以在AWS Glue中使用“Test Connection”测试我创建的连接,并且它运行正常。但是在使用Job教程创建我的Job并运行它之后,在我的日志错误中我可以看到:
com.amazon.ws.emr.hadoop.fs.shaded.org.apache.http.conn.HttpHostConnectException: Connect to 167.254.77.1:8088 [/167.254.77.1] failed: Connection refused (Connection refused)
我尝试使用 Amazon RDS 选项创建连接,但在选择实例后的第二个屏幕上,我收到以下错误:
Unable to find a suitable security group. Change connection type to JDBC and retry adding your connection.
我检查了我的IAM,我在 AWS服务中粘贴了 AWSGlueServiceRoleDefault 角色:粘贴可信服务, AWSGlueServiceRole 用于AWS托管策略在文档中。
我想知道我缺少什么或如何修复它以使其工作。或者即使有更好的方法来实现我的目标。
答案 0 :(得分:7)
好吧,我只有两个问题需要解决。我将展示我是如何解决这两个问题的。
我的JDBC连接工作正常,因为我明确指定了我想要使用的安全组,我称之为" sg-glue",以及这个" sg-glue"我的入站数据库安全组中允许安全组,也是我的" sg-glue"有"所有TCP"从允许入境的任何地方。
所以,当我尝试使用" Amazon RDS"创建我的连接时。我没有注意到这只是创建完全相同的JDBC连接的简单方法,但您无法选择指定要使用的安全组。通过这种方式将相同的数据库安全组应用于此连接,这就是我看到安全组错误的原因,因为我的数据库安全组没有"所有TCP"允许的。
回读documentation我可以看到我做错了什么,实际上我试图设置一个中途安全组来保护我的数据库。但正如文件所说,我需要提供所有TCP"权限进入我的数据库安全组,所以我确实重置了它,执行以下步骤:
添加自引用规则以允许AWS Glue组件进行通信。具体来说,添加或确认存在Type All TCP规则,Protocol为TCP,Port Range包括所有端口,其Source与组ID的安全组名称相同。
还为出站流量添加规则。打开所有端口的出站流量或创建Type All TCP的自引用规则,Protocol is TCP,Port Range包括所有端口,其Source与组ID的安全组名称相同。
完成所有这些步骤后,两个连接都正常工作。
因此,我的连接成功运行,我尝试将我的工作连接到我的RDS并创建我的表并写上ti。但我不能,我收到了一个错误:
Py4JJavaError: An error occurred while calling o74.pyWriteDynamicFrame. java.lang.NullPointerException
我不知道为什么。我尝试了一切,而不是我称之为AWS Support。为了我的好运,我有一个HERO作为支持,叫做李H.这个女孩工作了很多,去了每一个角落找到发生的事情,问亚马逊的每个人和工作4天后,同时我们分享了我的屏幕,创造了很多次新环境来找到这个问题的原因,因为VPC,SG,DNS,当我们无望时,她的头上有一个灯泡,并要求将我的数据库名称更改为"测试" ...
所以我创建了一个新连接。使用此新连接创建了一个新作业。它起作用了。
结论,您不能为数据库和实例使用相同的名称。他们需要有不同的名字。
公共tnx特别对这个女孩,李H.非常高兴有这么好的专业支持。也:
连接上使用的用户名需要"创建表"权限。
如果您的作业写入Microsoft SQL Server表,并且该表的列定义为布尔类型,则必须在SQL Server数据库中预定义该表。
您的IAM角色需要附加AWS胶水政策