我正在尝试使用aws.s3库将数据加载到S3中.以下是我的代码:
Sys.setenv("AWS_ACCESS_KEY_ID" = ".............",
"AWS_SECRET_ACCESS_KEY" = "...............",
"AWS_DEFAULT_REGION" = "......")
Run Code Online (Sandbox Code Playgroud)
查看桶:
get_bucket(bucket = "....",
check_region = FALSE,
verbose = TRUE)
Run Code Online (Sandbox Code Playgroud)
上面的代码工作,并返回桶的内容.
将对象保存到s3:
s3save(data,
object = ".....",
bucket = ".....")
Run Code Online (Sandbox Code Playgroud)
错误返回:
List of 4
$ Code : chr "AccessDenied"
$ Message : chr "Access Denied"
$ RequestId: chr ""
$ HostId : chr ""
- attr(*, "headers")=List of 6
..$ x-amz-request-id : chr ""
..$ x-amz-id-2 : chr ""
..$ content-type : chr "application/xml"
..$ transfer-encoding: chr "chunked"
..$ date : chr "Tue, 05 Sep 2017 13:23:42 GMT"
..$ server : chr "AmazonS3"
..- attr(*, "class")= chr [1:2] "insensitive" "list"
- attr(*, "class")= chr "aws_error"
- attr(*, "request_canonical")= chr "GET\n/"| __truncated__
- attr(*, "request_string_to_sign")= car ""| __truncated__
- attr(*, "request_signature")= chr "AWS4-HMAC-SHA256 Credential=|
__truncated__
NULL
Error in parse_aws_s3_response(r, Sig, verbose = verbose) :
Forbidden (HTTP 403).
Run Code Online (Sandbox Code Playgroud)
解决这个问题的任何方法.
@audiracmichelle、@Prakhar,使用 aws.s3 库中的函数put_object,如下所示。函数 put_object 的输入参数object是对象在 s3 中应具有的名称(字符串)。
data您可以首先从内存中写入序列化对象(在本例中):
in_mem_obj <- rawConnection(raw(0), "w")
utils::write.table(data, in_mem_obj, sep = "\t", na = "", quote = TRUE,
row.names = FALSE, fileEncoding="UTF-8")
Run Code Online (Sandbox Code Playgroud)
然后将对象保存到S3存储桶:
put_object(rawConnectionValue(in_mem_obj),
object = FILEPATH/FILENAME,
bucket = BUCKET,
headers = c('x-amz-server-side-encryption' = 'AES256'),
key = AWS_ACCESS_KEY_ID,
secret = AWS_SECRET_ACCESS_KEY,
region = AWS_REGION,
check_region = FALSE)
Run Code Online (Sandbox Code Playgroud)