错误:使用 rs_create_table 时未找到 AWS 会话令牌

Posted

技术标签:

【中文标题】错误:使用 rs_create_table 时未找到 AWS 会话令牌【英文标题】:error: AWS session token not found when using rs_create_table 【发布时间】:2019-05-24 19:39:05 【问题描述】:

我正在运行以下代码:

install.packages("aws.ec2metadata", repos = c(cloudyr = "http://cloudyr.github.io/drat", getOption("repos")))

install.packages(c('devtools', 'httr', 'aws.s3', 'Rcpp', 'DBI'))

library(RPostgreSQL)
library(redshiftTools)
library(RPostgres)


devtools::install_github("sicarul/redshiftTools")

drv <- dbDriver("PostgreSQL")

pconn_rsql <- dbConnect(drv,
                         host = "host",
                         port = port,
                         user = "user",
                         password = "password",
                         dbname = "dbname")

rs_create_table(df = mtcars,
            dbcon = conn,
            table_name = "table_name",
            bucket = "my-bucket",
            region = "region",
            access_key = "acess-key",
            secret_key = "secret-key",
            split_files = 4)

dbDisconnect(pconn_rsql)

直到今天早上我更新 R 包时,它一直作为脚本完美运行。我检查了 GitHub 是否有任何关于它的线索,但没有一个有效。 有没有人已经面对它并且可以阐明它?

【问题讨论】:

【参考方案1】:

面对类似的问题,您可以做的一种方法是恢复到version 0.3.900(这是为我工作的那个)。

或者,您可以修复底层source 代码。下载 github 版本并在安装前进行一些更改。

1.脚本internal.R函数s3ToRedshiftsession添加else if条件

  if (nchar(iam_role_arn) > 0) 
    credsStr = sprintf("iam_role '%s'", iam_role_arn)
   else if (nchar(session) > 0)
    credsStr = sprintf("credentials 'aws_access_key_id=%s;aws_secret_access_key=%s;token=%s'", access_key, secret_key, session)
   else 
    # creds string now includes a token in case it is needed.
    credsStr = sprintf("credentials 'aws_access_key_id=%s;aws_secret_access_key=%s'", access_key, secret_key)
  

2。脚本replace.R函数rs_replace_table添加Sys.setenv

split_files = pmin(split_files, numRows) 之后,添加以下行。

  # Set env variables for S3 upload
  Sys.setenv(
    'AWS_DEFAULT_REGION'=region,
    'AWS_ACCESS_KEY_ID'=access_key,
    'AWS_SECRET_ACCESS_KEY'=secret_key,
    'AWS_IAM_ROLE_ARN'=iam_role_arn
  )

所以它看起来像:

split_files = pmin(split_files, numRows)

  # Set env variables for S3 upload
  Sys.setenv(
    'AWS_DEFAULT_REGION'=region,
    'AWS_ACCESS_KEY_ID'=access_key,
    'AWS_SECRET_ACCESS_KEY'=secret_key,
    'AWS_IAM_ROLE_ARN'=iam_role_arn
  )
  prefix = uploadToS3(df, bucket, split_files)

安装这个,rs_create_table 现在应该可以工作了,不过还没有测试其他功能。

【讨论】:

你好,@Mka,哪个库要降级到 0.3.9 ?我知道它的要求有点过分,但我是 R 的新手,但降级就像:devtolls::install_version('Lib',version='0.3.9') ? 我认为你可以通过install_github in devtools 来完成。或者您是否尝试过更新源代码? 我更新了源代码!它现在正在工作。谢谢:)

以上是关于错误:使用 rs_create_table 时未找到 AWS 会话令牌的主要内容,如果未能解决你的问题,请参考以下文章

http/404未找或无法使用怎么解决

使用 browserify 时未定义 require 错误

使用 asihttprequest 访问 Web 服务时未找到方法错误

使用 AbstractTransactionalSpringContextTests(回滚)时未捕获具有约束检查错误的测试

使用猫鼬时未定义Graphql错误newUser

使用 React.lazy 时未捕获的未定义错误