EC2上的R未在单独的AWS账户中连接到AthenaDB,并不断抛出“无法从链中任何提供商加载AWS凭证”

时间:2019-12-13 18:10:28

标签: r amazon-ec2 amazon-athena

我在aws帐户X的EC2实例上有一个R脚本,该脚本试图连接到aws帐户Y上的Athena数据库。如果我要使用RJDBC包,则可以通过以下方式无缝连接:

URL <- 'https://s3.amazonaws.com/athena-downloads/drivers/JDBC/AthenaJDBC_1.1.0/AthenaJDBC41-1.1.0.jar'
fil <- basename(URL)
if (!file.exists(fil)) download.file(URL, fil)
drv <- JDBC(driverClass="com.amazonaws.athena.jdbc.AthenaDriver", fil, identifier.quote="'")
conn <- jdbcConnection <- dbConnect(drv, 'jdbc:awsathena://athena.us-west-2.amazonaws.com:xxx/',
                                     s3_staging_dir="s3://xxx/",
                                     user='xxx',
                                     password='xxx')

这可行,但是我试图让Athena通过AWR.Athena包工作(大型查询没有基于行的限制)。它需要在我的ec2实例上安装aws cli,我已经使用aws configure进行了设置。

在R中,我已经验证了凭据是否可以通过:

install.packages('aws.signature')
library(aws.signature)
aws.signature::locate_credentials()

但是,每次我尝试使用以下方法连接到Athena时,都会出现错误:

library(rJava)
.jcall("java/lang/System", "S", "setProperty", "aws.profile", "xxx")
library(AWR.Athena)
require(DBI)
dbConnect(AWR.Athena::Athena(),
          region='us-west-2',
          S3OutputLocation='xxx',
          Schema='default')

Error in .jcall(drv@jdrv, "Ljava/sql/Connection;", "connect", as.character(url)[1],  : 
  java.sql.SQLException: [Simba][AthenaJDBC](100131) An error has been thrown from the AWS SDK client. Unable to load AWS credentials from any provider in the chain: [EnvironmentVariableCredentialsProvider: Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY)), SystemPropertiesCredentialsProvider: Unable to load AWS credentials from Java system properties (aws.accessKeyId and aws.secretKey), com.simba.athena.amazonaws.auth.profile.ProfileCredentialsProvider@xxx: No AWS profile named 'xxx', com.simba.athena.amazonaws.auth.EC2ContainerCredentialsProviderWrapper@aeab9a1: The requested metadata is not found at http://xxx/latest/meta-data/iam/security-credentials/] [Execution ID not available]```

1 个答案:

答案 0 :(得分:1)

我...已修复。我不知道为什么这行得通,但是我将这一行更改为默认值,并且行得通。 .jcall("java/lang/System", "S", "setProperty", "aws.profile", "default")