【问题标题】:Container is not able to call S3 in Fargate容器无法在 Fargate 中调用 S3
【发布时间】:2019-11-10 12:46:16
【问题描述】:

我无法将日志文件夹同步到容器内的 s3。

我正在尝试进行以下设置:

  • 安装了 awscli 的 Docker 容器

    • 容器内有日志文件和其他文件生成
  • 有一个 cronjob,它通过 shell 脚本调用“aws s3 sync”命令。

同步无法正常工作,我不知道为什么。

我尝试了以下方法,效果很好:

  • 在 docker 容器内提供访问密钥/秘密访问密钥

    • 这在本地工作,使用普通 ECS 和 Fargate
    • 但不建议使用访问密钥
  • 没有任何密钥的普通 ECS(只是 IAM 角色)

    • 这也有效

我玩了一下配置并阅读了文档。 我得到的唯一提示是:

  • 是否与网络模式“awsvpc”有关? (fargate 必须使用)
  • 它与“AWS_CONTAINER_CREDENTIALS_RELATIVE_URI”路径变量有关吗?
    • 我在网上找到了一些点击,但我不确定它是否已设置。我无法查看 Fargate 中的容器内部。

【问题讨论】:

  • 在容器内生成日志文件不是一个好主意。将日志写入容器的控制台并使用awslogs 发送
  • 我知道将日志发送到 cloudwatch 是一个更好的主意。但它并不总是适合旧项目。记录到 S3 应该至少可以工作......
  • 我想我面临着类似的问题。你找到解决方案了吗?
  • 抱歉,我从未找到解决此问题的方法。

标签: amazon-web-services aws-fargate


【解决方案1】:

ECS 任务定义有两个与定义 IAM 角色相关的参数。

executionRoleArn - 通过执行所需的操作(例如从 ECR 拉取图像、将日志写入 Cloudwatch),提供对任务或容器的访问以开始运行。

taskRoleArn - 允许 Task 执行 AWS API 调用以与 S3 等 AWS 资源进行交互...

【讨论】:

  • 我创建了这些角色,但这还不足以让它发挥作用。我已经阅读了 AWS 文档并按照描述设置了所有内容。 taskRole 应该足够了......但它不是...... :(
【解决方案2】:

在我的例子中,我有一个 shell 脚本,我曾经在任务定义中使用入口点调用它。我已经正确设置了可以访问 S3 的任务角色,但是它不起作用。所以使用这里提供的信息https://forums.aws.amazon.com/thread.jspa?threadID=273767#898645 我在我的 shell 脚本中添加了第一行

export AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

还是不行。然后我将 docker 容器上的 AWS cli 升级到版本 2 并且它工作正常。所以对我来说真正的问题是 docker 镜像有一个旧的 CLI 版本。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2019-02-08
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 2018-05-18
    • 2022-10-27
    • 1970-01-01
    • 2021-11-29
    相关资源
    最近更新 更多