EC2でSageMaker DistributionをECRプル・スルー・キャッシュ経由で動かす

【備忘録】EC2でSageMaker DistributionをECRプル・スルー・キャッシュ経由で動かす

はじめに

この記事は、自分自身の検証メモとして残しているものです。
AWS SageMaker の公式イメージ(SageMaker Distribution)を、EC2上のDocker環境で動かすまでの手順を整理したものになります。

特定の構成やセキュリティ方針を推奨するものではなく、あくまで記録目的の備忘録です。
ネットワーク構成(インターネット接続や閉域網構成など)については、読者の環境・方針に合わせて設定してください。


ECRプル・スルー・キャッシュとは

Pull Through Cache(プル・スルー・キャッシュ) は、AWS Elastic Container Registry(ECR)の機能で、
外部の公開レジストリ(例:public.ecr.aws)から取得したコンテナイメージを自アカウント内にキャッシュして再利用できるようにするものです。

特徴

  • 外部レジストリへの直接アクセスを減らせる
  • 2回目以降のpullはECR内で完結するため高速
  • 外部レジストリの障害やレート制限の影響を受けにくい
  • CloudTrailで利用履歴を追跡できる
  • インターネット閉域網でも利用できる可能性があります※環境により異なるため、ご自身の環境で検証してください。

ECRプル・スルー・キャッシュを設定しておくことで、SageMaker Distribution などの公式イメージを自社アカウントのECRを経由して安全に再利用できるようになります。


ネットワーク構成について(参考)

本記事はネットワーク構成を前提にしていません。
環境により、インターネット接続がある場合もあれば、閉域構成でVPCエンドポイントを利用する場合もあると思います。

以下はあくまで参考情報です。必要に応じて各自のポリシーに従って設定してください。

エンドポイント名 タイプ 用途
com.amazonaws..ecr.api インターフェース ECR API操作(トークン取得など)
com.amazonaws..ecr.dkr インターフェース Dockerクライアントによるイメージ取得
com.amazonaws..s3 ゲートウェイ ECRが内部的に利用するS3アクセス(推奨)

参考: Amazon ECR の VPC エンドポイント (AWS公式)


前提条件

項目 推奨値
OS Amazon Linux 2
インスタンスタイプ t3.medium 以上
ストレージ 20GB 以上
IAMロール ecr:*(検証用)
※本番は最小権限推奨:ecr:GetAuthorizationToken, ecr:BatchGetImage, ecr:CreatePullThroughCacheRule
AWSアカウント ECRプル・スルー・キャッシュルールを作成できる権限

1. AWSアカウントIDの確認

後で使用するため、アカウントIDを確認しておきます。

aws sts get-caller-identity --query Account --output text

出力された12桁の数字を [ACCOUNT_ID] として以降のコマンドで利用します。


2. AWS CLI v2 のインストール

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

# パスを通す
echo 'alias aws="/usr/local/bin/aws"' >> ~/.bashrc
source ~/.bashrc

aws --version

※ インストール方法は環境により異なる場合があります。
閉域環境では事前に awscliv2.zip を取得しておくなど、各自の運用ポリシーに従ってください。


3. Docker のインストール

sudo yum update -y
sudo yum install -y docker

sudo systemctl start docker
sudo systemctl enable docker

# ec2-userをdockerグループに追加
sudo usermod -a -G docker ec2-user
newgrp docker

docker --version

4. ECRプル・スルー・キャッシュルールの作成

ECRでプル・スルー・キャッシュルールを作成します。

aws ecr create-pull-through-cache-rule \
  --ecr-repository-prefix "test-jupyter" \
  --upstream-registry-url "public.ecr.aws" \
  --region ap-northeast-1

パラメータ概要

オプション 内容
--ecr-repository-prefix ECRでキャッシュする際のプレフィックス名
--upstream-registry-url 参照元レジストリ(SageMaker公式は public.ecr.aws
--region ルールを作成するリージョン

動作の仕組み

  1. 初回の docker pull 時に、ECRサービスが上流レジストリ(public.ecr.aws)からイメージを取得
  2. 取得したイメージをECRにキャッシュ
  3. 以降はECR内からpull可能(外部通信不要)

キャッシュは必要に応じて削除・再生成できます。


5. ECRへのログイン

aws ecr get-login-password --region ap-northeast-1 | \
docker login --username AWS --password-stdin [ACCOUNT_ID].dkr.ecr.ap-northeast-1.amazonaws.com

Login Succeeded と表示されればログイン成功です。


6. SageMaker Distribution イメージの取得

docker pull [ACCOUNT_ID].dkr.ecr.ap-northeast-1.amazonaws.com/test-jupyter/sagemaker/sagemaker-distribution:latest-cpu

もしくは

docker pull [your-account].dkr.ecr.ap-northeast-1.amazonaws.com/test-jupyter/sagemaker/sagemaker-distribution:3.3-cpu

初回はキャッシュ作成のため少し時間がかかります。
2回目以降はECR内部からのpullのみで完結します。

※ バージョンを指定する場合は、:latest-cpu:3.3-cpu などに変更してください。
バージョン一覧は SageMaker Distribution公式GitHub
https://gallery.ecr.aws/sagemaker/sagemaker-distribution
を参照。


7. JupyterLab コンテナの起動

# 既存コンテナを削除(必要に応じて)
docker stop sagemaker-dist 2>/dev/null || true
docker rm sagemaker-dist 2>/dev/null || true

# JupyterLabコンテナを起動
docker run -d \
  --name sagemaker-dist \
  -p 8888:8888 \
  -v $(pwd):/home/sagemaker-user/workspace \
  -e JUPYTER_ENABLE_LAB=yes \
  [ACCOUNT_ID].dkr.ecr.ap-northeast-1.amazonaws.com/test-jupyter/sagemaker/sagemaker-distribution:latest-cpu \
  jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root \
  --NotebookApp.token='' --NotebookApp.password=''

この手順では認証を無効にしています。
検証目的の一時的な環境でのみ利用してください。
必要に応じて、トークン・パスワード認証や接続元制限を設定してください。


8. 動作確認

docker ps
docker logs sagemaker-dist

Jupyter Server が起動していれば正常です。

ブラウザから以下へアクセスします。

http://<EC2のパブリックIPまたはプライベートIP>:8888

トラブルシューティング

症状 対応方法
docker pull が失敗 aws ecr describe-pull-through-cache-rules でルールを確認
アクセス不可 セキュリティグループでポート8888を許可
Permission denied sudo chown -R ec2-user:ec2-user $(pwd)
ECRログイン失敗 IAMロールに ecr:GetAuthorizationToken 権限があるか確認

まとめ

ECRプル・スルー・キャッシュを利用することで、SageMaker Distributionを安全にEC2上で再利用できます。

  • 外部レジストリへの依存を軽減
  • 2回目以降のpullが高速
  • CloudTrailで操作履歴を追跡可能

本記事は個人の検証用メモとして記録したものです。
実際の環境では、ネットワーク設計やセキュリティポリシーに応じて構成を判断してください。

Last modified: 2025-10-21

Author