メインコンテンツまでスキップ

標準コンピュート用のDatabricks Container Services

備考

ベータ版

標準コンピュート用のDatabricks Container Servicesベータ版です。 ワークスペース管理者は、ワークスペースの プレビュー ページからこの機能を有効にする 必要があります。これは、一般提供されている専用コンピュート用のDatabricks Container Servicesとは別のサービスです。

標準コンピュート用のDatabricks Container Servicesを使用すると、標準コンピュートを作成するときにDockerイメージを指定でき、共有コンピュート環境のカスタム コンテナーにアクセスできるようになります。 Dockerイメージはワークロード環境の唯一の定義であるため、リモート環境をローカルに再現して、開発と本番運用全体で一貫した結果を得ることができます。

カスタムイメージは、Python REPL コマンドや Python UDF などのユーザーコードを実行するサンドボックスコンテナーに使用されます。Spark エンジンは Databricks が管理する環境で実行され、Spark クエリーはサンドボックスコンテナーと Spark エンジンの間で Spark Connect を使用して送信されます。

さらに、カスタムイメージの構築を支援するために、 Databricks 、ニーズに合わせて拡張できる、レス環境バージョンに準拠したベースイメージを提供しています。

要件

標準コンピュートにDatabricks Container Services使用するには:

  • コンピュートリソースは、Databricks Runtime 18 LTS 以降を実行し、**Standard**アクセスモードを使用している必要があります。
  • PATHには、 dockerコマンドが使用可能な最新の Docker デーモンが必要です。
注記

**18 LTS** を必ず選択してください。 **18.0**、**18.1**、または **18.2** を選択しないでください。

ステップ 1: 標準コンピュート用にDatabricks Container Servicesを有効にする

標準のコンピュートにDatabricks Container Services使用するには、ワークスペース管理者が プレビュー ページから機能を有効にする必要があります。

  1. Databricksワークスペースに管理者としてサインインします。
  2. 右上にあるユーザーメニューから 「プレビュー」 をクリックします。
  3. 標準コンピュート用の DCS を 見つけてオンにします。

ステップ 2: カスタム イメージを構築する

これらの手順では、Databricksが提供するベースイメージを拡張してカスタムイメージを作成する方法を説明します(推奨)。ベースイメージには、Ubuntu、Python、JDKなど、ワークロードを起動するために必要な依存関係が含まれています。databricksruntime/environment:v5-standardをプルして、その上に独自のパッケージを重ねることで、Databricks が管理する継続的なアップデートとセキュリティパッチを継承できます。

最小限のベースイメージをゼロから構築したい場合は、 「リファレンス: 最小限のベースイメージをゼロから構築する」を参照してください。

ステップ 2a: ベースイメージをプルします

ベースイメージを取得するには、以下を実行します。

Bash
docker pull databricksruntime/environment:v5-standard

AWS Graviton (ARM) インスタンスタイプの場合は、ARM バリアントを使用してください。

  • databricksruntime/environment:v5-standard-arm

ステップ 2b: 基本イメージを拡張する Dockerfile を作成する

ベースイメージの/databricks/python3仮想環境にカスタムPythonパッケージをインストールします。これは、ワークロードを起動するためのシステム仮想環境です。

AWS Gravitonインスタンスタイプを対象とする場合は、 FROM行の:v5-standard :v5-standard-armに置き換えてください。

Dockerfile
FROM databricksruntime/environment:v5-standard

RUN /databricks/python3/bin/python -m pip install <your python package>

以下の例は、プライベートリポジトリからパッケージをインストールする方法を示しています。

Dockerfile
FROM databricksruntime/environment:v5-standard

ENV PIP_INDEX_URL=https://pypi.org/simple

RUN /databricks/python3/bin/python -m pip install --no-cache-dir simplejson

標準的な Dockerfile の命令 (例えば、 RUNENVWORKDIRCOPY ) を使用できます。Databricksがワークロードを起動する方法のため、以下の指示は無視されます。

  • USER
  • CMD
  • ENTRYPOINT
  • EXPOSE
  • HEALTHCHECK
  • SHELL
  • STOPSIGNAL
注記

Scalaワークロードの場合は、JARファイルをイメージ内の/scala-jars/userディレクトリにコピーし、サンドボックスユーザーが読み取れるようにchmod 0644してください。Databricksは、このパスからJARをScala REPLクラスパスおよびScala UDFクラスパスにロードします。

ステップ 2c: イメージを構築する

イメージをビルドするには、以下を実行します。

Bash
docker build -f <your-dockerfile> -t <registry-url>/<project>[/<repo>]:<tag> .
警告

Databricksコンピュートでカスタム イメージを徹底的にテストします。 ローカル環境やビルド環境では正常に動作するイメージでも、Databricks上で起動すると、起動に失敗したり、機能がサイレントに無効化されたり、動作が停止したりする場合があります。

参考資料:最小限のベースイメージをゼロから構築する

ベースイメージの内容を完全に制御する必要がある場合(たとえば、厳格なイメージサイズ、サプライチェーン、またはコンプライアンス要件を満たすため)、databricksruntime/environment:v5-standard を拡張するのではなく、 の最小限の同等品をゼロから構築できます。

警告

ゼロから構築するのは、より高度な選択肢です。Pythonピン処理、セキュリティパッチ、プラットフォームツール、および/databricks//etc/environmentの下にあるプラットフォーム必須ファイルを含む、 v5-standardイメージへの上流の変更を追跡する責任を負います。 代わりに、Databricks はステップ 2で示したようにdatabricksruntime/environment:v5-standardを拡張することを推奨しています。

Databricksは、 v5-standardの基本的なPython環境を再現する参照Dockerfileとrequirements.txtを提供します。ビルドする前に、両方のファイルを同じディレクトリにダウンロードしてください。

イメージをビルドするには、以下を実行します。

Bash
docker build -t <your-registry>/<repo>:<tag> .

ビルドホストがhttps://pypi.orgにアクセスできない場合は、ビルド時に以下のコマンドを実行してpipインデックスを上書きしてください。

Bash
docker build --build-arg PIP_INDEX_URL=https://your-mirror/simple -t <your-registry>/<repo>:<tag> .

次のステップに進む前に、以下を実行して、厳選されたPythonパッケージが問題なくインポートされることを確認してください:

Bash
docker run --rm --cpus 2 <your-registry>/<repo>:<tag> \
/databricks/python3/bin/python -c \
"import pandas, numpy, pyarrow, mlflow, databricks.connect; print('OK')"

ステップ 3: イメージをレジストリにプッシュします

次に、イメージをDockerレジストリにプッシュします。Databricks Container Services標準コンピュートと専用コンピュートの両方で同じレジストリをサポートします。

認証不要または基本認証をサポートする他のレジストリでも動作するはずです。基本認証では、登録済みのユーザー名とパスワードを使用します。

イメージ プルのパフォーマンスを最適化するには、 Databricksワークスペースと同じクラウドおよびリージョン内のレジストリを使用します。

Bash
echo "$REGISTRY_PASSWORD" | docker login -u <registry-username> --password-stdin <registry-url>
docker push <registry-url>/<project>[/<repo>]:<tag>
注記

Docker Hub使用する場合は、レート制限が 6 時間以内に起動する予定のコンピュートに対応していることを確認してください。 詳細はDockerのドキュメントを参照してください。この制限を超えた場合、リクエストは429 Too Many Requestsを返します。

ステップ 4: コンピュートを起動します

UI またはAPIを使用して、カスタム イメージを使用するコンピュートを起動できます。 以下の要件を満たす必要があります。

  • コンピュート アクセス モードは 標準で ある必要があります ( APIで、 data_security_modeDATA_SECURITY_MODE_STANDARDに設定します)。 コンピュートが 専用 アクセスモードに設定されている場合、 Databricks Container Servicesの別のバージョンが使用され、異なるベースイメージが想定されるため、構築したベースイメージでは起動に失敗します。
  • Databricks Runtime のバージョンは 18 LTS 以降である必要があります。 18.018.1 、または 18.2 ではなく、必ず 18 LTS を選択してください。
注記

インスタンスプールに対して起動するには、プールはpreloaded_docker_imagesが設定されて作成されている必要があり、クラスターのdocker_imageが一致している必要があります。インスタンスでDatabricks Container Servicesを使用する を参照してください。起動する前に。

UIを使用してコンピュートを起動します

  1. コンピュート作成ページで、「 アクセスモード 」が「 Standard 」に、「 Databricks Runtime 」が「 18 LTS 」以降に設定されていることを確認してください。「 18 LTS 」を必ず選択してください。「 18.0 」、「 18.1 」、または「 18.2 」ではありません。

  2. 「詳細設定」 で「 Docker」 タブを選択します。

  3. [ 自分のDockerコンテナを使用する ]を選択します。

  4. Dockerイメージ URL」 フィールドにカスタム イメージを入力します。

    レジストリ

    タグの形式

    Dockerハブ

    <organization>/<repository>:<tag> (例: databricksruntime/environment:v5-standard

    Amazon ECR

    <aws-account-id>.dkr.ecr.<region>.amazonaws.com/<repository>:<tag>

    Azure Container Registry

    <your-registry-name>.azurecr.io/<repository-name>:<tag>

    レジストリ

    タグの形式

    Dockerハブ

    <organization>/<repository>:<tag> (例: databricksruntime/environment:v5-standard

    Amazon ECR

    <aws-account-id>.dkr.ecr.<region>.amazonaws.com/<repository>:<tag>

    Azure Container Registry

    <your-registry-name>.azurecr.io/<repository-name>:<tag>

  5. 認証タイプを選択してください。Dockerイメージの認証を参照してください。

注記

コンピュートの作成時に Docker 設定が表示されない場合は、 Databricks Container Servicesワークスペースで有効になっていない可能性があります。 ユーザーがDockerイメージを指定するには、ワークスペース管理者がそれを有効にする必要があります。「ステップ 1: 標準コンピュート用にDatabricks Container Servicesを有効にする」を参照してください。

APIを使用してコンピュートを起動する

以下は、カスタムイメージを使用して標準コンピュートを作成するAPIコールの例です。data_security_modeDATA_SECURITY_MODE_STANDARD に、spark_version を Databricks Runtime 18 LTS 以上の値に設定してください。Databricks Runtime 18 LTS の場合、18.0.x-scala2.1318.1.x-scala2.1318.2.x-scala2.13 ではなく、18.x-scala2.13 を使用してください。

公開画像(認証なし)の場合:

Bash
databricks clusters create \
--cluster-name <cluster-name> \
--node-type-id <node-type> \
--json '{
"num_workers": 1,
"docker_image": {
"url": "<docker-registry-image-url>"
},
"spark_version": "18.x-scala2.13",
"aws_attributes": {
"availability": "ON_DEMAND"
},
"data_security_mode": "DATA_SECURITY_MODE_STANDARD"
}'

基本認証の場合:

Bash
databricks clusters create \
--cluster-name <cluster-name> \
--node-type-id <node-type> \
--json '{
"num_workers": 1,
"docker_image": {
"url": "<docker-registry-image-url>",
"basic_auth": {
"username": "<docker-registry-username>",
"password": "<docker-registry-password>"
}
},
"spark_version": "18.x-scala2.13",
"aws_attributes": {
"availability": "ON_DEMAND"
},
"data_security_mode": "DATA_SECURITY_MODE_STANDARD"
}'

インスタンスプロファイルを使用する場合(Amazon ECRの場合):

Bash
databricks clusters create \
--cluster-name <cluster-name> \
--node-type-id <node-type> \
--json '{
"num_workers": 1,
"docker_image": {
"url": "<image-url>"
},
"spark_version": "18.x-scala2.13",
"aws_attributes": {
"availability": "ON_DEMAND",
"instance_profile_arn": "arn:aws:iam::<aws-account-number>:instance-profile/<iam-role-name>"
},
"data_security_mode": "DATA_SECURITY_MODE_STANDARD"
}'

Dockerイメージの認証

認証要件は、 Dockerイメージの種類によって異なります。 シークレットを使用して、認証のユーザー名とパスワードを保存することもできます。 「認証にシークレットを使用する」を参照してください。

  • 公開されているDockerイメージの場合、認証情報を含める必要はありません。UIで 認証を 「デフォルト」 に設定します。API呼び出しでは、 basic_authフィールドを含め ないでください

  • プライベートDockerイメージの場合、サービスプリンシパル ID とパスワード (または該当するシークレット) をユーザー名とパスワードとして使用して認証します。

  • Azure Container Registry の場合は、サービスプリンシパル ID とパスワード (または該当するシークレット) をユーザー名とパスワードとして使用して認証します。サービスプリンシパルの作成に関する情報については、Azure Container Registry サービスプリンシパル の認証 のドキュメントを参照してください。

  • Amazon ECRイメージには、認証情報を含めないでください。代わりに、イメージが存在するDockerリポジトリからDockerイメージプルする権限を含むインスタンスを使用してコンピュートを起動します。 これを行うには、インスタンスを使用してS3バケットへの安全なアクセスを設定するプロセスのステップ 3 と 4 に従います。

    任意のイメージをプルする権限を持つIAMロールの例を次に示します。リポジトリは<arn-of-repository>で指定されます。

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Action": ["ecr:GetAuthorizationToken"],
    "Resource": "*"
    },
    {
    "Effect": "Allow",
    "Action": [
    "ecr:BatchCheckLayerAvailability",
    "ecr:GetDownloadUrlForLayer",
    "ecr:GetRepositoryPolicy",
    "ecr:DescribeRepositories",
    "ecr:ListImages",
    "ecr:DescribeImages",
    "ecr:BatchGetImage"
    ],
    "Resource": ["<arn-of-repository>"]
    }
    ]
    }

    ECRイメージがDatabricksコンピュートとは異なるAWSアカウントに存在する場合は、コンピュート インスタンス オプションに加えてECR リポジトリ ポリシーを使用して、コンピュート アクセスを許可します。 以下は ECR リポジトリポリシーの例です。 コンピュートのインスタンスが想定するIAMロールは、 <arn-of-IAM-role>で指定されます。

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "AllowCrossAccountPush",
    "Effect": "Allow",
    "Principal": {
    "AWS": "<arn-of-IAM-role>"
    },
    "Action": [
    "ecr:BatchCheckLayerAvailability",
    "ecr:BatchGetImage",
    "ecr:DescribeImages",
    "ecr:DescribeRepositories",
    "ecr:GetDownloadUrlForLayer",
    "ecr:GetRepositoryPolicy",
    "ecr:ListImages"
    ]
    }
    ]
    }

認証には秘密情報を使用する

Databricks コンテナ サービス は、認証にシークレットを使用することをサポートしています。 UI でコンピュート リソースを作成する場合は、 認証 フィールドを使用して ユーザー名とパスワード を選択し、プレーン テキストのユーザー名またはパスワードを入力する代わりに、 {{secrets/<scope-name>/<dcs-secret>}} 形式でシークレットを入力します。 API を使用する場合は、 basic_auth フィールドにシークレットを入力します。

シークレットの作成については、 「シークレット管理」を参照してください。

インスタンスプールでDatabricks Container Servicesを使用する

インスタンス プールでDatabricks Container Servicesを使用するには、UI ではなくInstance プールAPIを使用してプールを作成する必要があります。

プールは、Dockerイメージが事前にロードされた状態で作成する必要があります。これにより、アイドル状態のインスタンスがカスタムイメージでウォームアップされ、ワークロードの起動が速くなります。コンピュートを直接起動する際に使用する画像参照と認証情報と同じものをリクエストのpreloaded_docker_imagesフィールドに設定します。 このフィールドはリストなので、1つのプールで複数の画像をプリロードできます。

プールとそれに付属するコンピュート リソースは、 Dockerが使用されているかどうかに同意する必要があります。 プールにpreloaded_docker_imagesが設定されていない場合、そのプールに対してDatabricks Container Servicesコンピュートを起動できません。 preloaded_docker_imagesを設定した新しいプールを作成します。

preloaded_docker_imagesで作成されたプールの場合、そのプールに対して起動されるコンピュート リソースは、その作成リクエストで一致するdocker_imageを指定する必要があります。 それ以外の場合、コンピュートの作成は'docker_image' must be provided for cluster created with instance pool: <pool-id>で失敗します。

元のDatabricks Container Servicesから移行する

標準コンピュート用のDatabricks Container Services 、専用コンピュート用の元のDatabricks Container Servicesとは別のサービスです。 この機能には以下の相違点があります。

  • ワークロードはSpark Connectプロトコルを介して実行されます。

  • init スクリプトはワークロードのPython環境を変更しません。 Dockerイメージには、Pythonのすべての依存関係をインストールする必要があります。Datadog エージェントやKafkaエージェントなど、 Sparkからのデータを使用するアプリケーションには、引き続き init スクリプトを使用できます。

  • AWS Gravitonインスタンスタイプのサポート。

専用コンピュート用の元のDatabricks Container Servicesから移行するには、標準コンピュート用のDatabricks Container Servicesでカスタム イメージを再構築し、コンピュート構成を更新します。

  1. Dockerfile 内のFROM行をFROM databricksruntime/environment:v5-standard (AWS Graviton の場合はv5-standard-arm ) に置き換えてください。
  2. Dockerfileの手順を新しいベースイメージに移植してください。標準の Dockerfile の手順がサポートされていますが、ステップ 2: カスタム イメージをビルドするに記載されている例外があります。
  3. Pythonパッケージを他の仮想環境ではなく/databricks/python3にインストールします。ワークロード (ノートブック、 Python wheelジョブ、 Pythonスクリプト ジョブ) はこのパスから読み取られます。
  4. コンピュート構成を更新して、**Standard** アクセスモードと Databricks Runtime 18 LTS 以降を使用してください。 **18 LTS** を選択してください。**18.0**、**18.1**、または **18.2** ではありません。
  5. 以前initスクリプトで行っていたPython環境の設定をすべてDockerfileに移動します。

制限事項

標準のコンピュートの制限に加えて、標準のコンピュートのDatabricks Container Servicesには次の制限があります。

  • コンピュートスコープのライブラリはサポートされていません。
  • プライベートパッケージリポジトリはサポートされていません。
  • Databricks Runtime for Machine Learningはサポートされていません。
  • インスタンス プールに対してDatabricks Container Servicesを使用して標準のコンピュートを起動するには、 preloaded_docker_imagesを設定してプールを作成する必要があります。 「インスタンス プールでのDatabricks Container Services使用」を参照してください。

トラブルシューティング

コンピュートを作成するときに、[ Advanced ]の下に[ Docker ]tabが表示されない場合、Databricks Container Servicesはワークスペースで有効になっていません。ユーザーがDockerイメージを指定する前に、ワークスペース管理者がワークスペースで有効にする必要があります。Container Servicesを有効にするを参照してください。

Docker tabは、docker_image.url属性を非表示にするコンピュートポリシーによって非表示にすることもできます。この機能が有効になっているにもかかわらずtabが表示されない場合は、ワークスペース管理者に、あなたに割り当てられているポリシーがこの属性を非表示にしているかどうかを確認するよう依頼してください。サポートされている属性を参照してください。

ECRからのイメージのプルが403エラーで失敗します。

コンピュートが起動に失敗し、ECR からイメージをプルしているときにドライバーログに 403 エラーが表示される場合、原因は IAMロールやインスタンスプロファイルではなく、ワークスペースの VPC の S3 VPC エンドポイントポリシーにある可能性があります。

Amazon ECR は、イメージレイヤーの保存に Amazon S3 を利用します。DockerクライアントがECRからイメージをプルすると、ECRに接続してイメージマニフェストを取得し、その後、Amazon S3に接続してイメージレイヤーをダウンロードします。ワークスペース VPC がプライベート接続、ファイアウォールルール、または制限的な VPC エンドポイントポリシーを使用している場合、ECR と、ECR がイメージレイヤーに使用する Amazon S3 バケットの両方がコンピュートリソースから到達可能であることを確認してください。

障害がイメージプルパスに固有のものであることを確認するには、ドライバーノードにSSHで接続し、ECRへのログインとDockerプルの実行を直接行ってください。

Bash
aws ecr get-login-password --region <region> | \
docker login --username AWS --password-stdin <account>.dkr.ecr.<region>.amazonaws.com
docker pull <account>.dkr.ecr.<region>.amazonaws.com/<repo>:<tag>

ダイレクトプルがAmazon ECRへの認証後に失敗し、Amazon S3へのアクセスが拒否されたというエラーが表示された場合は、ネットワーク構成またはS3 VPCエンドポイントポリシーを更新して、Amazon ECRがイメージレイヤーに必要とする最小限のAmazon S3バケットアクセスを許可してください。AWS ドキュメントの「Amazon ECR interface VPC エンドポイント」を参照してください。

ポリシーを更新した後、ドライバーノードからdocker pullコマンドを再試行し、再度コンピュートリソースを起動してください。