gpt4 book ai didi

r - 带有 R 和 aws.s3 包的 AWS Lambda 和 S3

转载 作者:行者123 更新时间:2023-12-05 05:59:46 25 4
gpt4 key购买 nike

我正在尝试使用自定义 docker 镜像访问 lambda 函数中的 AWS S3 存储桶。我已经设置了一个脚本来获取包含以下代码的文件列表:

Sys.setenv("AWS_ACCESS_KEY_ID" = aws_s3_key,
"AWS_SECRET_ACCESS_KEY" = aws_s3_secret,
"AWS_DEFAULT_REGION" = "eu-west-2")

aws_s3_bucket_name <- "my-bucket"

f <- aws.s3::get_bucket(bucket = aws_s3_bucket_name, url_style = "path")

我在 docker(本地的 fedora)中运行我的脚本没有问题,但是,当我在 lambda 中尝试相同的功能时(使用我在系统中配置的相同图像),我得到了这个错误:

..$ Code : chr "InvalidToken"
..$ Message : chr "The provided token is malformed or otherwise invalid."
..$ Token-0 : chr "IQoJb3JpZ/BoNzJXuwChJ2R5p"| __truncated__
..$ RequestId: chr "CP2CBX9PA95G3X2X" 2021-06-15T00:24:17.848+02:00
..$ HostId : chr "pTlkIhvhCTLPTiXwSBHL/qq7Y=" 2021-06-15T00:24:17.848+02:00 - attr(*, "headers")=List of 8
..$ x-amz-bucket-region: chr "eu-west-2"
..$ x-amz-request-id : chr "CP2CBX9PA95G3X2X"
..$ x-amz-id-2 : chr "pTlkIhvhCTLPTiXwW4vMexnz/qq7Y="
..$ content-type : chr "application/xml"
..$ transfer-encoding : chr "chunked"
..$ date : chr "Mon, 14 Jun 2021 22:24:17 GMT"
..$ server : chr "AmazonS3"
..$ connection : chr "close"
...
...

也许这只是我的错,因为我对 was-lambda 还很陌生,但我仍然不明白为什么该脚本在我的本地 docker 中运行。

我怀疑这个问题与某些编码问题有关,因为我得到的错误似乎包含一些“\n”并且消息指的是“Bad Request (HTTP 400)”:

- attr(*, "request_canonical")= chr "GET\n/xxxxxxxx-x-xxx-counter/\n\nhost:s3-eu-west-2.amazonaws.com"| __truncated__
- attr(*, "request_canonical")= chr "GET\n/xxxxxxxx-x-xxx-/\n\nhost:s3-eu-west-2.amazonaws.com"| __truncated__

- attr(*, "request_string_to_sign")= chr "AWS4-HMAC-SHA256\n" __truncated__

ERROR [2021-06-15 10:55:06] Error in parse_aws_s3_response(r, Sig, verbose = verbose): Bad Request (HTTP 400).

最佳答案

我所做的是使用以下命令在 Dockerfile 中设置 aws_access_key_id 和 aws_secret_access_key:

RUN aws configure set aws_access_key_id <<aws_access_key_id>>
RUN aws configure set aws_secret_access_key <<aws_secret_access_key>>

通过这种方式,aws-cli 凭证被存储在容器内,因此这可以写入 S3,我想也可以写入其他服务。如果您将它们设置在您的 .R 脚本中,那么它们将存储在其中并且容器不知道任何 AWS 实例。

编辑:上述方法的更“优雅”和安全的方法是按照以下方式在 Dockerfile 中设置参数和环境变量:

ARG AWS_KEY
ARG AWS_SECRET

ENV AWS_KEY ${AWS_KEY}
ENV AWS_SECRET ${AWS_SECRET}

然后,您可以通过指定键将“docker build”与构建参数一起使用。

docker build --build-arg AWS_KEY=xxxx --build-arg AWS_SECRET=yyyy .

关于r - 带有 R 和 aws.s3 包的 AWS Lambda 和 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67984468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com