MaxCompute カスタムイメージを使用すると、サードパーティ製の依存関係を Docker イメージにパッケージ化し、SQL や Python(PyODPS または MaxFrame)ジョブで利用できます。
背景情報
MaxCompute SQL および Python 開発では、多くのサードパーティ製パッケージに依存することがよくあります。カスタムイメージ管理機能により、Docker イメージを使用して、MaxCompute SQL や Python(PyODPS または MaxFrame)ジョブ用の完全な開発環境を構築できます。
前提条件
-
イメージサイズ:MaxCompute における単一のカスタムイメージの最大サイズは 10 GB です。
-
イメージ数:各 MaxCompute テナントは最大 10 イメージ をアップロードできます。
-
ACR のバージョン要件:ACR Enterprise Edition の Standard Edition および Premium Edition インスタンスのみがサポートされています。
-
CPU アーキテクチャ要件:x86_64 CPU アーキテクチャ上でイメージをビルドしてください。macOS M シリーズチップや ARM など、x86_64 以外の CPU アーキテクチャはサポートされていません。
-
ライブラリのバージョン要件:MaxCompute ジョブの実行環境は CentOS 7 と同等です。イメージをビルドする際は、CentOS 7 と互換性のあるパッケージバージョンを使用してください。ベースイメージ内の yum ソースは、Alibaba Cloud CentOS 7 イメージソースを使用するように事前設定されています。
-
ディレクトリ制限:
pip や yum などのツールを使用してパッケージをインストールする際は、
/home/admin、/usr/local/lib、/usr/ali、/apsaraディレクトリに個人ファイルを配置しないでください。コンテナ起動時に、MaxCompute がこれらのディレクトリに実行環境をマウントし、元の内容を上書きします。
操作手順
ステップ 1:Docker のインストール
-
Linux:Docker は公式 Docker ドキュメントに従ってインストールしてください。
-
macOS または Windows:
-
個人開発者: Docker Desktop を使用できます。
-
Docker Desktop ライセンスを持たない企業ユーザー:オープンソースの Rancher Desktop を使用することを推奨します。
-
ステップ 2:権限の付与
以下の表に従い、アカウントまたはユーザーに RAM ロールの読み取り権限、ACR の操作権限、および MaxCompute カスタムイメージの操作権限 を付与します。
|
ユースケース |
アカウントタイプ |
権限 |
リファレンス |
|
RAM ロールの読み取り権限 |
Alibaba Cloud アカウント (推奨) |
Alibaba Cloud アカウントにはデフォルトで RAM ロールの読み取り権限があります。権限付与は不要です。 |
N/A |
|
RAM ユーザー |
AliyunRAMReadOnlyAccess 権限を付与します。 |
||
|
ACR の操作権限 |
Alibaba Cloud アカウント (推奨) |
Alibaba Cloud アカウントにはデフォルトで ACR のすべての権限があります。権限付与は不要です。 |
N/A |
|
RAM ユーザー |
RAM ユーザーが ACR を操作するには、AliyunContainerRegistryReadOnlyAccess 権限が必要です。 |
||
|
MaxCompute カスタムイメージの操作権限 |
Alibaba Cloud アカウント (推奨) |
Alibaba Cloud アカウントにはデフォルトで MaxCompute 内のカスタムイメージを管理するための完全な権限があります。権限付与は不要です。 |
N/A |
|
RAM ユーザー |
RAM ユーザーが MaxCompute カスタムイメージを管理できるようにするには、ビジネス要件に基づいて必要な権限を付与してください。 |
ステップ 3:カスタムイメージのビルド
MaxCompute ベースイメージを基にした Dockerfile を使用してカスタムイメージをビルドします。
-
MaxCompute CentOS ベースイメージの URL は
registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/base_image:latestです。このベースイメージには、Python 3.7、Python 3.11、pip、yum を含む基本的な環境が提供されています。 -
MaxCompute Ubuntu ベースイメージのアドレス は
registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/ubuntu_20.04:latestです。
-
MaxCompute ベースイメージを基に Dockerfile を作成します。次のコマンドを実行します。
vim DockerFile -
Dockerfile に次の内容を追加します。
# MaxCompute CentOS ベースイメージを使用します。 FROM registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/base_image:latest # Ubuntu イメージを使用する場合は、イメージアドレスを registry.cn-zhangjiakou.aliyuncs.com/maxcompute_image/ubuntu_20.04:latest に置き換えます。 # システム依存関係をインストールします。 RUN yum install vi -y # サードパーティ製ライブラリをインストールします。 RUN /usr/ali/python3.7/bin/python3 -m pip install --no-cache-dir pandas -
Dockerfile からイメージをビルドします。
sudo docker build -f DockerFile -t <image_name>:<tag> .パラメーター:
-
image_name:カスタムイメージの名前。
-
tag:カスタムイメージのバージョン。
-
ステップ 4:イメージの ACR へのプッシュ
-
Container Registry コンソールにログインし、左上隅でリージョンを選択します。
-
左側のナビゲーションウィンドウで、インスタンス を選択します。
-
インスタンス ページで、インスタンスの作成 をクリックします。すでにインスタンスを作成済みの場合は、このステップをスキップできます。
重要カスタムイメージは、ACR Enterprise Edition の Standard Edition または Premium Edition インスタンスにのみアップロードできます。
-
インスタンス ページで、対象のエンタープライズエディションインスタンスを見つけ、管理 をクリックしてインスタンス概要ページを開きます。
-
左側のナビゲーションウィンドウで、 を選択します。
リポジトリ > リポジトリ ページで、リポジトリの作成 をクリックします。リポジトリの作成 ダイアログボックスで、次の情報を入力し、次へ をクリックします。
パラメーター
必須
説明
リージョン
はい
現在のインスタンスのリージョンが自動的に入力されます。
名前空間
はい
イメージリポジトリの名前空間を定義します。この設定は後から変更できません。
-
aliyunのように、会社、組織、または個人ユーザーに対応する名前空間を作成することを推奨します。 -
tomcatやcentosのように、モジュールやシステムに対応する名前空間を作成することは推奨しません。
リポジトリ名
はい
名前は 2~120 文字で、小文字、数字、および次の区切り文字(アンダースコア (_)、ハイフン (-)、ピリオド (.)、スラッシュ (/))を含めることができます。名前の先頭または末尾に区切り文字を使用することはできません。
リポジトリタイプ
いいえ
-
パブリック:パブリックイメージをプルするには、Enterprise Edition インスタンスにログインする必要があります。匿名でのプルを許可する場合は、インスタンスのパブリック匿名プル設定を有効にしてください。
-
Enterprise Edition のプライベートイメージをプルするには、プル権限を持つ Enterprise Edition インスタンスにログインする必要があります。
-
デフォルトは非公開です。
タグ
いいえ
選択後、リポジトリ内の最新のタグ以外のすべてのタグは上書きできないため、Docker イメージの整合性が確保されます。
高速化イメージ
いいえ
選択後、リポジトリ内のすべてのイメージに対してサフィックス "_accelerated" が付加された高速化イメージが生成されます。
-
フルモード: フルモードでの加速効果はより大きくなります。高速化イメージのファイルサイズは元のイメージの約 130% であり、1 GB の高速化イメージの生成時間は約 25 秒です (生成されたイメージレイヤーは重複して生成されません)
-
インデックス専用モード (パブリックプレビュー中):このモードはフルモードの約 70% の高速化効果を提供します。高速化イメージのサイズは元のイメージの約 3% になります。1 GB の高速化イメージを生成するのに約 3 秒かかります。すでにインデックスが作成されたレイヤーは再インデックスされません。
サマリー
はい
100 文字以内で入力してください。
説明
いいえ
Markdown フォーマットをサポートします。
-
-
コードソースを構成します。
コードソース で、ローカルリポジトリ を選択し、リポジトリの作成 をクリックします。
詳細については、「Enterprise Edition インスタンスを使用したイメージのビルド」をご参照ください。
-
カスタムイメージを同じアカウントの ACR インスタンスにプッシュします。
-
リポジトリ リポジトリ ページで、対象のリポジトリの 操作 列にある 管理 をクリックします。
-
左側のナビゲーションウィンドウで、詳細 を選択します。
詳細 ページ下部の イメージの操作手順 に従い、Docker 環境から Container Registry イメージリポジトリにカスタムイメージをプッシュします。
-
(オプション)ご利用のマシンが VPC 内にある場合、次の手順を実行します。
-
VPC からの Enterprise Edition インスタンスへのアクセスの制御を構成します。詳細については、「VPC 経由でのアクセスの構成」をご参照ください。
-
Docker 環境で ACR Enterprise Edition インスタンスを操作する際は、ドメイン名に vpc を追加する必要があります。例として、
acr-test-registry.cn-wulanchabu.cr.aliyuncs.comをacr-test-registry-vpc.cn-wulanchabu.cr.aliyuncs.comに変更する必要があります。$ docker login --username=***@test.aliyunid.com acr-test-registry.cn-wulanchabu.cr.aliyuncs.com
説明インスタンスへのログイン時にエラーが発生した場合は、リポジトリのパブリックネットワークアクセスが有効になっているか確認してください。
-
-
ステップ 5:MaxCompute へのイメージの追加
既存の ACR イメージを MaxCompute に関連付け、開発イメージを一元管理します。
-
MaxCompute コンソールにログインし、左上隅でリージョンを選択します。
-
左側のナビゲーションウィンドウで、 を選択します。
-
イメージの管理 ページで、カスタムイメージ タブをクリックします。
-
カスタムイメージ タブで、イメージの作成 をクリックします。イメージの追加 ダイアログボックスで、次のパラメーターを構成します。
説明初めてイメージを作成する際は、MaxCompute サービスリンクロール ダイアログボックスが表示されます。確認 をクリックすると、ACR リソースにアクセスするためのサービスリンクロールが自動的に作成されます。
パラメーター
説明
イメージ名
必須。カスタムイメージの名前。イメージ名は小文字で始まり、小文字、数字、ハイフン、アンダースコアのみを含めることができます。
この名前は、MaxCompute SQL、PyODPS、MaxFrame 内でイメージを参照するために使用されます。
イメージタイプ
必須。ACR イメージのタイプ。ACR Enterprise Edition イメージのみがサポートされています。
エンタープライズ版イメージインスタンス
必須。ACR で作成した Enterprise Edition インスタンスを選択します。
名前空間
必須。ACR で作成したイメージ名前空間を選択します。
イメージリポジトリ
必須。ACR で作成したイメージリポジトリを選択します。
イメージバージョン
必須。ACR にアップロードしたイメージバージョンを選択します。
イメージの説明
必須。イメージの説明を追加します。
OK をクリックします。新しいカスタムイメージがカスタムイメージリストに表示されます。
ステップ 6:イメージの使用
カスタムイメージは、MaxCompute SQL UDF、PyODPS、MaxFrame で参照できます。
各ジョブで指定できるイメージは 1 つだけです。複数指定すると、イメージの競合が発生する可能性があります。
-
UDF の場合、セッションレベルのフラグを使用してイメージと Python バージョンを指定します。例:
set odps.sql.python.version=cp37; set odps.session.image = <image_name>; -
PyODPS の場合、
executeまたはpersistメソッドのimageパラメーターを使用してイメージを指定します。例:説明PyODPS でイメージを参照するには、PyODPS を V0.11.5 以降にスペックアップする必要があります。
image='<image_name>' -
MaxFrame の場合、ジョブ用に次の構成を使用してイメージを指定します。
config.options.sql.settings = { "odps.session.image": "<image_name>" }