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"