如何在 docker 镜像中使用 AWS cli?

时间:2021-03-30 17:38:27

标签: amazon-web-services dockerfile amazon-ecs

我正在开发一些微服务。 我使用 docker-compose 进行本地测试,并通过 copilot 将内容部署到 ECS。

其中一项 NodeJS 服务现在需要 AWS CLI。

添加此内容的最佳方法是什么?

Dockerfile

FROM node:lts-buster-slim as base

RUN apt-get update
RUN apt-get install -y --no-install-recommends python build-essential curl unzip

RUN curl --insecure "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip
RUN ./aws/install

...

RUN npm install

问题是 AWS CLI 无法通过这种方式找到凭证,因此 NPM 安装失败。如何使凭据可用? 我尝试向 docker-compose.yml 添加一个卷,但没有成功。

我可以以某种方式提供 AWS 配置/凭证作为 ENV 变量吗?我无法在容器中运行 aws configure,因为它需要手动输入。

编辑:

有什么简单的解决办法吗?我基本上只需要 AWS CLI,因为我需要运行 aws codeartifact login 以便我可以安装私有 NPM 包。

我确定创建一个任务会解决这个问题,难道没有更简单的方法吗? 我通过 AWS-SDK 完成其他所有工作,并且我已经拥有了相关凭证。但是这一步是 NPM 安装所必需的,所以我必须使用 CLI。

编辑 2:

基本上我需要在构建阶段运行它:

aws codeartifact login --tool npm --repository xyz --domain something --region eu-west-1

我们有使用 CodeArtiact 的私有 NPM 存储库。我需要登录才能使用它。但是Docker不支持Dockerfile中的ENV vars,所以我不知道如何提供AWS凭证。

基本上这是唯一的问题。

1 个答案:

答案 0 :(得分:2)

有许多选项可以向 CLI 提供凭据。 here 记录了它们的优先级。

虽然我不确定您的具体设置以及使用 copilot 的最佳方法,但我会尝试选择环境变量选项,因为 docker-compose 很好地支持它。

同样,JS-SDK 有一个凭证链(V2 here 的参考)。