AWS.S3是Amazon Web服务(AWS)简单存储服务(S3)REST API的简单客户包。尽管当前其他软件包将R连接到S3,但它们的操作不完整(仅将某些API端点映射到R),并且大多数实现都依赖于AWS命令行工具,而用户可能未在系统上安装这些工具。
要使用该软件包,您将需要一个AWS帐户,并将您的凭据输入R。可以在标题访问密钥下的IAM管理控制台上生成您的Keypair。请注意,您只能访问一次秘密密钥。生成后,您需要将其保存在安全的位置中。如果您的遗失,被盗或被遗忘,可以随时生成新的按键。 AWS.IAM软件包配置文件用于与IAM合作的工具,包括以编程方式创建角色,用户,组和凭据;不需要使用IAM凭据。
有关如何指定凭据的详细说明,请参见:https://github.com/cloudyr/aws.signature/。最简单的方法是在启动R或通过Renviron.site
或.Renviron
文件之前简单地在命令行上设置环境变量,该文件用于在启动过程中将环境变量设置为R中的环境变量(请参阅? Startup
)。它们也可以在R中设置:
Sys.setenv( " AWS_ACCESS_KEY_ID " = " mykey " ,
" AWS_SECRET_ACCESS_KEY " = " mysecretkey " ,
" AWS_DEFAULT_REGION " = " us-east-1 " ,
" AWS_SESSION_TOKEN " = " mytoken " )
评论:
AWS_S3_ENDPOINT
环境变量设置为适当的主机名。默认情况下,软件包使用AWS端点: s3.amazonaws.com
。请注意,如果后端仅使用没有区域概念的单个服务器,则可能还必须在请求中设置region=""
。aws.ec2metadata
。这样,将从机器的角色中获得证书。 该软件包可用于检查公共可访问的S3存储桶和无需注册AWS帐户而公开访问的S3对象。如果已在AWS控制台中生成凭据并在R中提供,则可以使用以下方式找到可用的存储桶:
library( " aws.s3 " )
bucketlist()
如果您的凭据不正确,则此功能将返回错误。否则,它将返回有关您可以访问的存储桶的信息列表。
要获取公共存储桶中所有对象的列表,只需致电
get_bucket( bucket = ' 1000genomes ' )
亚马逊维护了S3上公共数据集的清单。
要获取私有存储桶中所有对象的列表,请将您的AWS密钥和秘密作为参数传递。 (如上所述,默认情况下, AWS.S3中的所有函数都将作为环境变量寻找您的键,从而大大简化了制作S3请求的过程。)
# specify keys in-line
get_bucket(
bucket = ' my_bucket ' ,
key = YOUR_AWS_ACCESS_KEY ,
secret = YOUR_AWS_SECRET_ACCESS_KEY
)
# specify keys as environment variables
Sys.setenv( " AWS_ACCESS_KEY_ID " = " mykey " ,
" AWS_SECRET_ACCESS_KEY " = " mysecretkey " )
get_bucket( " my_bucket " )
S3对区域规格可能有些挑剔。 bucketlist()
将返回所有区域的存储桶,但是所有其他功能都需要指定区域。如果没有明确指定"us-east-1"
指定的默认值,则无法自动检测到正确的区域。 (注意:使用不正确的区域是使用S3时最常见,最难弄清楚的错误之一。)
该软件包包含许多功能。以下是那些对于使用S3中的对象有用的。
bucketlist()
提供了用户可以访问的数据框的数据帧。get_bucket()
和get_bucket_df()
分别提供给定存储桶中对象的列表和数据框架。object_exists()
为是否存在对象提供了逻辑。 bucket_exists()
为存储桶提供了相同的功能。s3read_using()
提供了一个通用接口,用于使用用户定义的函数从S3对象读取。 s3write_using()
提供了使用用户定义函数写入S3对象的通用接口get_object()
返回S3对象的原始向量表示。然后,这可能会以多种方式解析,例如rawToChar()
, xml2::read_xml()
, jsonlite::fromJSON()
,依据根据对象的文件格式。 save_object()
将S3对象保存到指定的本地文件,而无需将其阅读到内存中。s3connection()
提供了一个二进制可读连接,可以将S3对象流式传输到R。这对于读取非常大的文件可能很有用。 get_object()
还允许阅读函数的字节范围(有关示例,请参见文档)。put_object()
将本地文件存储到S3存储桶中。 multipart = TRUE
参数可用于将大文件上传到零件中。s3save()
将一个或多个内存中的对象保存到S3中的.rdata文件(类似地save()
)。 s3saveRDS()
是saveRDS()
的类似物。 s3load()
将一个或多个对象从存储在S3中的.RDATA文件(类似地to load()
)中加载到内存中。 s3readRDS()
是readRDS()
的类似物s3source()
直接从S3源来源他们的行为可能会像您期望的那样:
# save an in-memory R object into S3
s3save( mtcars , bucket = " my_bucket " , object = " mtcars.Rdata " )
# `load()` R objects from the file
s3load( " mtcars.Rdata " , bucket = " my_bucket " )
# get file as raw vector
get_object( " mtcars.Rdata " , bucket = " my_bucket " )
# alternative 'S3 URI' syntax:
get_object( " s3://my_bucket/mtcars.Rdata " )
# save file locally
save_object( " mtcars.Rdata " , file = " mtcars.Rdata " , bucket = " my_bucket " )
# put local file into S3
put_object( file = " mtcars.Rdata " , object = " mtcars2.Rdata " , bucket = " my_bucket " )
Cran的最新稳定版本:
install.packages( " aws.s3 " , repos = " https://cloud.R-project.org " )
rforge.net的最新开发版本:
install.packages( " aws.s3 " , repos = c( " https://RForge.net " , " https://cloud.R-project.org " ))
在Windows上,您可能需要添加INSTALL_opts = "--no-multiarch"