首页 > 解决方案 > 如何在 docker 镜像中使用 AWS cli?

问题描述

我正在开发一些微服务。我使用 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 vars 吗?我无法在容器中运行 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 凭证。

基本上这是唯一的问题。

标签: amazon-web-servicesdockerfileamazon-ecs

解决方案


有许多选项可以向 CLI 提供凭据。它们在此处以其优先级记录在案。

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

类似地,JS-SDK 有一个凭证链(参考这里的 V2 )。


推荐阅读