在 cronjob 中使用 aws-cli

问题描述

我正在尝试在 cronjob 中运行 aws sts get-caller-identity,但这会导致 /bin/sh: 1: aws: not found

    spec:
      containers:
      - command:
        - /bin/sh
        - -c
        - aws sts get-caller-identity

解决方法

正如评论中已经提到的,AWS CLI 似乎没有安装在您用于此 cronjob 的映像中。您需要提供更多信息!

如果您是所用镜像的所有者,只需在 Dockerfile 中安装 AWS CLI。如果您不是所有者,只需创建您自己的映像,从您当前使用的映像扩展它并安装 AWS CLI。

例如,如果您使用的是基于 Alpine 的镜像,只需创建一个 Dockerfile

FROM <THE_ORIGINAL_IMAGE>:<TAG>

RUN apk add --no-cache python3 py3-pip && \
  pip3 install --upgrade pip && \
  pip3 install awscli

然后构建镜像并将其推送到DockerHub作为示例。 现在您可以在您的 CronJob 资源中使用这个新图像。

但是,接下来是您的 CronJob Pod 需要访问权限才能执行 AWS STS 服务。有多种可能性可以完成这项工作。最好的方法是使用 IRSA(服务帐户的 IAM 角色)只需查看这篇博客文章 https://aws.amazon.com/de/blogs/opensource/introducing-fine-grained-iam-roles-service-accounts/

如果您仍然需要帮助,请提供更多详细信息。