【问题标题】:error: AWS session token not found when using rs_create_table错误:使用 rs_create_table 时未找到 AWS 会话令牌
【发布时间】: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 是否有任何关于它的线索,但没有一个有效。 有没有人已经面对它并且可以阐明它?

【问题讨论】:

    标签: r amazon-redshift


    【解决方案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 来完成。或者您是否尝试过更新源代码?
    • 我更新了源代码!它现在正在工作。谢谢:)
    猜你喜欢
    • 2023-03-11
    • 2018-10-31
    • 2014-06-11
    • 1970-01-01
    • 2018-03-15
    • 2017-12-21
    • 1970-01-01
    • 2014-08-14
    • 2021-09-07
    相关资源
    最近更新 更多