【发布时间】:2021-03-30 17:38:27
【问题描述】:
我正在开发一些微服务。 我使用 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 install 需要的,所以我必须使用 CLI。
EDIT2:
基本上我需要在构建阶段运行它:
aws codeartifact login --tool npm --repository xyz --domain something --region eu-west-1
我们有使用 CodeArtiact 的私有 NPM 存储库。我需要登录才能使用它。但是 Docker 不支持 Dockerfile 中的 ENV vars,所以我不知道如何提供 AWS 凭证。
基本上这是唯一的问题。
【问题讨论】:
-
我觉得这个问题令人困惑。您是否只需要在 docker 构建期间使用 AWS CLI?或者容器在ECS上运行时需要在容器中使用吗?
-
是的!很抱歉造成混乱。我只在构建阶段需要它,而 npm install 正在运行。我需要安装私有 NPM 包。
-
@MarkB 你在吗?
-
这个问题让每个人都感到困惑,因为您包含了所有有关使用 ECS 的信息,而这与您要解决的问题完全无关。您只是尝试在 Docker 构建阶段运行 AWS CLI,这与 docker 映像最终将部署在哪里无关。只需将 AWS 凭证作为环境变量传递到 Docker 构建中。
-
好的,但是怎么做? Docker 在构建期间不处理环境变量。或者你的意思是我应该将它们作为构建参数传递?
标签: amazon-web-services dockerfile amazon-ecs