🐳

AWS CLI ツールを扱うマルチ CPU アーキテクチャ対応な Docker イメージを作成する

2024/03/05に公開

はじめに

マルチ CPU アーキテクチャで AWS CLI ツールを使うためのDockerイメージを作成することになったのでその覚書。

とりあず、以下の CLI を使用できるようにする。

手順

1. Dockerfile の作成

Dockerfile
FROM python:3.11.8-slim-bullseye

# 必要なパッケージのインストール
RUN apt-get update && \
    apt-get install -y less vim curl unzip make && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

ARG TARGETPLATFORM

# aws cli v2 のインストール
RUN PLATFORM=$( \
      case ${TARGETPLATFORM} in \
        linux/amd64 ) echo "x86_64";; \
        linux/arm64 ) echo "aarch64";; \
      esac \
    ) && \
    curl -L "https://awscli.amazonaws.com/awscli-exe-linux-${PLATFORM}.zip" -o "awscliv2.zip" && \
    unzip awscliv2.zip && \
    rm awscliv2.zip && \
    ./aws/install && \
    rm -rf aws

# AWS SAM CLI のインストール
RUN PLATFORM=$( \
      case ${TARGETPLATFORM} in \
        linux/amd64 ) echo "x86_64";; \
        linux/arm64 ) echo "arm64";; \
      esac \
    ) && \
    curl -L "https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-${PLATFORM}.zip" -o "aws-sam-cli-linux.zip" && \
    unzip aws-sam-cli-linux.zip -d sam-installation && \
    rm aws-sam-cli-linux.zip && \
    ./sam-installation/install && \
    rm -rf sam-installation

RUN pip install awsebcli --upgrade

WORKDIR /workdir

2. Docker イメージのビルド & プッシュ

GitLab CE のレジストリにプッシュする想定。

IMAGE_NAME="aws-cli"
REGISTRY="gitlab.oppara.tv:5002/oppara/docker"
NOW=$(date "+%Y%m%d")
docker buildx create --use && \
docker buildx build --platform linux/amd64,linux/arm64 \
    --no-cache --push \
    --provenance=false \
    -t ${REGISTRY}/${IMAGE_NAME}:latest \
    -t ${REGISTRY}/${IMAGE_NAME}:${NOW} \
    -f /path/to/Dockerfile .

--provenance=false をつけないと、イメージが正しくプッシュされない。
"Invalid tag: missing manifest digest" というエラーが出る。

3. 下準備

compose.yaml の作成する。

compose.yaml
version: "3"
services:
  aws-cli:
    image: gitlab.oppara.tv:5002/oppara/docker/aws-cli:latest
    container_name: aws-cli
    volumes:
      - .:/workdir
    env_file:
      - .env
    environment:
      AWS_DEFAULT_REGION: ap-northeast-1
      AWS_DEFAULT_OUTPUT: json

.env ファイルを作成し、AWS CLI のアクセスキーとシークレットキーを設定する。

AWS_ACCESS_KEY_ID="アクセスキー"
AWS_SECRET_ACCESS_KEY="シークレットキー"

4. 実行

AWS CLI のバージョンを確認する。

$ docker compose run --rm aws-cli aws --version

AWS SAM CLI のバージョンを確認する。

$ docker compose run --rm aws-cli sam --version

EB CLI のバージョンを確認する。

$ docker compose run --rm aws-cli eb --version

S3 のバケット一覧を確認する。

$ docker compose run --rm aws-cli aws s3 ls

5. 後片付け

% docker compose down -v --rmi all

環境

% sw_vers
ProductName:            macOS
ProductVersion:         14.2.1
BuildVersion:           23C71

% docker --version
Docker version 24.0.6, build ed223bc

Discussion