このトピックでは、MaxCompute のカスタムイメージ機能の使用方法について説明します。
背景情報
SQL または Python 開発には、複雑なビジネスロジックや複数のサードパーティパッケージへの依存関係が含まれることがよくあります。このプロセスを簡素化するために、MaxCompute はカスタムイメージ管理機能を提供します。Docker イメージを使用して、MaxCompute SQL および Python (PyODPS または MaxFrame) 開発のための完全な開発環境を構築できます。
適用範囲
イメージサイズ:単一のカスタムイメージの最大サイズは 10 GB です。
イメージ数:単一のテナントがアップロードできるイメージは最大 10 個です。
ACR バージョン要件:Container Registry (ACR) Enterprise Edition の Standard Edition または Premium Edition インスタンスのみがサポートされています。
CPU アーキテクチャ要件:イメージは x86_64 アーキテクチャの CPU を使用してビルドする必要があります。macOS M シリーズや ARM など、他のアーキテクチャの 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 を使用します。
ライセンスを購入していないエンタープライズユーザー:オープンソースの Rancher Desktop を使用します。
ステップ 2:権限の付与
ご利用のアカウントまたは RAM ユーザーに必要な権限を付与します。RAM ロールに対する読み取り権限、ACR (Container Registry) に対する操作権限、および MaxCompute カスタムイメージに対する操作権限が必要です。詳細は次のとおりです:
認証シナリオ | アカウントタイプ | 権限要件 | ガイダンス |
RAM ロールに対する読み取り権限 | Alibaba Cloud アカウント (推奨) | Alibaba Cloud アカウントは、デフォルトで RAM ロールに対する読み取り権限を持っています。追加の権限付与は不要です。 | 該当なし |
RAM ユーザー | AliyunRAMReadOnlyAccess 権限を付与します。 | ||
ACR に対する操作権限 | Alibaba Cloud アカウント (推奨) | Alibaba Cloud アカウントは、デフォルトで ACR に対するすべての操作権限を持っています。追加の権限付与は不要です。 | 該当なし |
RAM ユーザー | RAM ユーザーを使用して ACR で操作を実行する場合は、RAM ユーザーに AliyunContainerRegistryReadOnlyAccess 権限を付与します。 | ||
MaxCompute カスタムイメージに対する操作権限 | Alibaba Cloud アカウント (推奨) | Alibaba Cloud アカウントは、デフォルトで MaxCompute のカスタムイメージの表示、追加、削除に関するすべての権限を持っています。追加の権限付与は不要です。 | 該当なし |
RAM ユーザー | RAM ユーザーを使用して MaxCompute カスタムイメージで操作を実行する場合は、RAM ユーザーに必要な権限を付与します。 |
ステップ 3:Docker でのカスタムイメージのビルド
Dockerfile を使用して、MaxCompute ベースイメージからカスタムイメージをビルドします。
MaxCompute CentOS ベースイメージのアドレスは
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 DockerFileDockerfile に次の内容を追加します。
# 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 pandasDockerfile からイメージをビルドします。
sudo docker build -f DockerFile -t <image_name>:<tag> .パラメーター:
image_name:カスタムイメージの名前。
tag:カスタムイメージのバージョン。
ステップ 4:カスタムイメージの ACR へのアップロード
Container Registry コンソールにログインし、左上隅でリージョンを選択します。
左側のナビゲーションウィンドウで、インスタンス をクリックします。
インスタンス ページで、インスタンスの作成 をクリックします。すでにインスタンスを作成している場合は、このステップをスキップします。
重要カスタムイメージは、ACR Enterprise Edition の Standard Edition または Premium Edition インスタンスにのみアップロードできます。
インスタンス ページで、対象の Enterprise インスタンスを見つけ、管理 をクリックして概要ページを開きます。
左側のナビゲーションウィンドウで、 を選択します。
リポジトリ > リポジトリ ページで、リポジトリの作成 をクリックします。リポジトリの作成 ダイアログボックスで、次の情報を入力し、次へ をクリックします。
パラメーター
必須
説明
リージョン
必須
現在のインスタンスが存在するリージョンが自動的に選択されます。
名前空間
必須
イメージリポジトリの名前空間。このパラメーターは設定後に変更できません。
Aliyun など、会社、組織、または個人ユーザーに対応する名前空間を作成することを推奨します。
Tomcat、CentOS、アプリケーション、モジュールなど、モジュールやシステムに対応する名前空間を作成することは推奨しません。
リポジトリ名
必須
名前は 2~120 文字で、小文字、数字、区切り文字を含めることができます。区切り文字には、アンダースコア (_)、ハイフン (-)、ピリオド (.)、スラッシュ (/) を使用できます。区切り文字を先頭または末尾の文字にすることはできません。
リポジトリタイプ
オプション
パブリックイメージをプルするには、Enterprise Edition インスタンスにログインする必要があります。匿名プルを許可するには、インスタンスの匿名プルを有効にします。
Enterprise Edition インスタンスから非公開イメージをプルするには、インスタンスにログインし、プル権限を持っている必要があります。
デフォルト値は非公開です。
タグ
オプション
選択後、リポジトリ内の最新のタグ以外のすべてのタグは上書きできないため、Docker イメージの整合性が確保されます。
高速化イメージ
オプション
選択後、リポジトリ内のすべてのイメージに対してサフィックス "_accelerated" が付加された高速化イメージが生成されます。。
フルモード:フルモードでの加速効果はより大きくなります。高速化イメージのファイルサイズは元のイメージの約 130% であり、1 GB の高速化イメージの生成時間は約 25 秒です (生成されたイメージレイヤーは重複して生成されません)
インデックス専用モード (パブリックプレビュー中):このモードは、フルモードの約 70% の高速化効果を提供します。高速化イメージのサイズは、元のイメージサイズの約 3% です。1 GB の高速化イメージを生成するのに約 3 秒かかります。インデックスがすでに生成されているイメージレイヤーは、再度生成されません。
サマリー
必須
100 文字以内で入力してください。。
説明
オプション
Markdown フォーマットをサポートします。。
コードソースの設定:
コードソース を ローカルリポジトリ に設定し、リポジトリの作成 をクリックします。
詳細については、「Enterprise Edition インスタンスを使用したイメージのビルド」をご参照ください。
ビルドしたカスタムイメージを ACR にアップロードします。
リポジトリ > リポジトリ ページで、目的のリポジトリを見つけ、操作 列の 管理 をクリックします。
左側のナビゲーションウィンドウで、詳細 をクリックします。
詳細 ページの イメージの操作手順 セクションの指示に従って、Docker 環境から ACR イメージリポジトリにカスタムイメージをアップロードします。
(オプション) ご利用のマシンが VPC 内にある場合は、次の手順を実行します。
Enterprise Edition インスタンスに接続できるように、VPC アクセスを設定します。詳細については、「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 のサービスリンクロール] ダイアログボックスが表示されます。[OK] をクリックして、ACR リソースにアクセスするためのサービスリンクロールを自動的に作成します。
パラメーター
説明
ミラー名
必須。カスタムイメージの名前。イメージ名は小文字で始まり、小文字、数字、水平バー、およびアンダースコアのみを使用できます。
この名前は、後続の MaxCompute SQL、PyODPS、および MaxFrame 開発で使用されます。
ミラータイプ
必須。ACR イメージのタイプ。ACR Enterprise Edition イメージのみがサポートされています。
Enterprise Editionミラーインスタンス
必須。ACR で作成した Enterprise Edition イメージインスタンスを選択します。
ミラー名前空間
必須。ACR で作成した Enterprise Edition イメージの名前空間を選択します。
ミラー倉庫
必須。ACR で作成した Enterprise Edition イメージリポジトリを選択します。
ミラーバージョン
必須。ACR にアップロードしたイメージのバージョンを選択します。
ミラーの説明
必須。イメージの説明を追加します。
OK をクリックします。カスタムイメージが作成され、カスタムイメージリストに追加されます。
ステップ 6:カスタムイメージの使用
MaxCompute SQL のユーザー定義関数 (UDF)、PyODPS、および MaxFrame 開発でカスタムイメージを使用できます。
各開発ジョブではイメージを 1 つしか指定できません。そうしないと、イメージの競合が発生する可能性があります。
UDF を呼び出すとき:フラグを使用して、SQL セッションレベルで必要なイメージと Python バージョンを指定できます。コマンドは次のとおりです。
set odps.sql.python.version=cp37; set odps.session.image = <image_name>;PyODPS 開発において:execute または persist メソッドの image パラメーターを使用して、既存のイメージを指定できます。コマンドは次のとおりです。
説明PyODPS 開発でイメージを参照するには、PyODPS をバージョン 0.11.5 以降にアップグレードする必要があります。
image='<image_name>'MaxFrame 開発において:現在のジョブに既存のイメージを指定できます。関連するパラメーターは次のとおりです。
config.options.sql.settings = { "odps.session.image": "<image_name>" }