【備忘録】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 |
ルールを作成するリージョン |
動作の仕組み
- 初回の
docker pull時に、ECRサービスが上流レジストリ(public.ecr.aws)からイメージを取得 - 取得したイメージをECRにキャッシュ
- 以降は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で操作履歴を追跡可能
本記事は個人の検証用メモとして記録したものです。
実際の環境では、ネットワーク設計やセキュリティポリシーに応じて構成を判断してください。


