プリインストールされたパッケージを含むカスタム イメージを使用して Dataproc クラスタを作成できます。このページでは、カスタム イメージを作成して Dataproc クラスタにインストールする方法について説明します。
使用上の検討事項と制限事項
カスタム イメージの存続期間: クラスタが最新のサービス更新とバグ修正を確実に受け取れるようにするために、カスタム イメージを使用したクラスタの作成は、カスタム イメージの作成日から 365 日以内に制限されています。カスタム イメージを使用して作成された既存のクラスタは無期限に実行できます。
365 日を超える期間に特定のカスタム イメージを使用してクラスタを作成する場合は、自動化が必要になる場合があります。詳細については、期限切れのカスタム イメージを使用してクラスタを作成する方法をご覧ください。
Linux のみ: このドキュメントの説明は、Linux オペレーティング システムにのみ適用されます。その他のオペレーティング システムは、今後の Dataproc リリースでサポートされる可能性があります。
サポートされているベースイメージ: カスタム イメージのビルドは、Dataproc ベースイメージから開始する必要があります。サポートされているベースイメージは、Debian、Rocky Linux、Ubuntu です。
- ベースイメージの可用性: Dataproc リリースノートで通知された新しいイメージは、通知日から 1 週間経過するまで、カスタム イメージのベースとして使用できません。
オプション コンポーネントの使用: デフォルトでは、カスタム イメージはすべての Dataproc オプション コンポーネント(OS パッケージと構成)をベースイメージから継承します。デフォルトの OS パッケージのバージョンと構成はカスタマイズできますが、クラスタの作成時にオプション コンポーネント名を指定する必要があります。
クラスタ作成コマンドの例:
gcloud dataproc clusters create --optional-components=COMPONENT_NAME \ --image=CUSTOM_IMAGE_URI \ ... other flags
クラスタを作成する際にコンポーネント名を指定しない場合、オプション コンポーネント(カスタムの OS パッケージと構成を含む)は削除されます。
ホストされているカスタム イメージの使用: 別のプロジェクトでホストされているカスタム イメージを使用する場合、プロジェクトの Dataproc サービス エージェント サービス アカウントにホスト プロジェクトのイメージに対する
compute.images.get
権限が必要です。この権限を付与するには、ホストされているイメージに対するroles/compute.imageUser
ロールをプロジェクトの Dataproc サービス エージェント サービス アカウントに付与します(組織内でカスタム イメージを共有するを参照)。セキュアブート MOK(マシン所有者キー)シークレットの使用: Dataproc カスタム イメージでセキュアブートを有効にするには、次の操作を行います。
Secret Manager API(
secretmanager.googleapis.com
)を有効にします。Dataproc では、鍵ペアの生成と管理に Secret Manager サービスを使用します。カスタム イメージを生成するときに、
generate_custom_image.py
コマンドに--service-account="SERVICE_ACCOUNT"
フラグを追加します。注: サービス アカウントに、プロジェクトに対する Secret Manager 閲覧者ロール(roles/secretmanager.viewer
)と公開および非公開のシークレットに対する Secret Manager アクセサー ロール(roles/secretmanager.secretAccessor
)を付与する必要があります。例を含む詳細については、GitHub の
GoogleCloudDataproc/custom-images
リポジトリの examples/secure-boot ディレクトリにあるREADME.md
などのファイルをご覧ください。セキュアブートを無効にする方法: デフォルトでは、Dataproc カスタム イメージ スクリプトを Dataproc クラスタから実行するとき、鍵ペアの生成と管理に Secret Manager が使用されます。カスタム イメージでセキュアブートを使用しない場合は、カスタム イメージを生成するときに、
generate_custom_image.py
コマンドに--trusted-cert=""
(空のフラグ値)を含めます。
始める前に
カスタム イメージを生成する前に、プロジェクトを設定してください。
プロジェクトを設定する
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataproc API, Compute Engine API, and Cloud Storage APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Python 3.11+ をインストールします。
- カスタム パッケージのインストールまたは構成の更新を行うカスタマイズ スクリプトを準備します。たとえば、次のようにします。
#! /usr/bin/bash apt-get -y update apt-get install python-dev apt-get install python-pip pip install numpy
- In the Google Cloud console, go to the Cloud Storage Buckets page.
- Click Create.
- On the Create a bucket page, enter your bucket information. To go to the next
step, click Continue.
-
In the Get started section, do the following:
- Enter a globally unique name that meets the bucket naming requirements.
- To add a
bucket label,
expand the Labels section ( ),
click add_box
Add label, and specify a
key
and avalue
for your label.
-
In the Choose where to store your data section, do the following:
- Select a Location type.
- Choose a location where your bucket's data is permanently stored from the Location type drop-down menu.
- If you select the dual-region location type, you can also choose to enable turbo replication by using the relevant checkbox.
- To set up cross-bucket replication, select
Add cross-bucket replication via Storage Transfer Service and
follow these steps:
Set up cross-bucket replication
- In the Bucket menu, select a bucket.
In the Replication settings section, click Configure to configure settings for the replication job.
The Configure cross-bucket replication pane appears.
- To filter objects to replicate by object name prefix, enter a prefix that you want to include or exclude objects from, then click Add a prefix.
- To set a storage class for the replicated objects, select a storage class from the Storage class menu. If you skip this step, the replicated objects will use the destination bucket's storage class by default.
- Click Done.
-
In the Choose how to store your data section, do the following:
- Select a default storage class for the bucket or Autoclass for automatic storage class management of your bucket's data.
- To enable hierarchical namespace, in the Optimize storage for data-intensive workloads section, select Enable hierarchical namespace on this bucket.
- In the Choose how to control access to objects section, select whether or not your bucket enforces public access prevention, and select an access control method for your bucket's objects.
-
In the Choose how to protect object data section, do the
following:
- Select any of the options under Data protection that you
want to set for your bucket.
- To enable soft delete, click the Soft delete policy (For data recovery) checkbox, and specify the number of days you want to retain objects after deletion.
- To set Object Versioning, click the Object versioning (For version control) checkbox, and specify the maximum number of versions per object and the number of days after which the noncurrent versions expire.
- To enable the retention policy on objects and buckets, click the Retention (For compliance) checkbox, and then do the following:
- To enable Object Retention Lock, click the Enable object retention checkbox.
- To enable Bucket Lock, click the Set bucket retention policy checkbox, and choose a unit of time and a length of time for your retention period.
- To choose how your object data will be encrypted, expand the Data encryption section (Data encryption method. ), and select a
- Select any of the options under Data protection that you
want to set for your bucket.
-
In the Get started section, do the following:
- Click Create.
--image-name
: カスタムイメージの出力名。注: イメージ名は、正規表現[a-z](?:[-a-z0-9]{0,61}[a-z0-9])
と一致する必要があります。アンダースコアやスペースは使用できません。また、63 文字以下にする必要があります。--dataproc-version
: カスタム イメージで使用する Dataproc イメージ バージョン。バージョンはx.y.z-os
またはx.y.z-rc-os
の形式で指定します(例: 2.0.69-debian10)。--customization-script
: ツールを実行したときに、カスタム パッケージのインストールや、その他のカスタマイズが行われるスクリプトのローカルパス。このスクリプトは、カスタム イメージの作成に使用される一時的な VM でのみ、Linux 起動スクリプトとして実行されます。カスタム イメージを使用してクラスタを作成するときに実行するその他の初期化アクションには、異なる初期化スクリプトを指定できます。プロジェクト間のイメージ: カスタム イメージを使用して異なるプロジェクトにクラスタを作成すると、イメージ内に保存されている
gcloud
コマンドまたはgsutil
コマンドのキャッシュが原因でエラーが発生することがあります。この問題を回避するには、カスタマイズ スクリプトに次のコマンドを含めて、キャッシュに保存された認証情報を消去します。rm -r /root/.gsutil /root/.config/gcloud
--zone
: Compute Engine ゾーン。generate_custom_image.py
は、カスタム イメージを作成するために使用する一時的な VM をこのゾーンに作成します。--gcs-bucket
: Cloud Storage バケットを指すgs://BUCKET_NAME
形式の URI。generate_custom_image.py
は、このバケットにログファイルを書き込みます。--family
: カスタム イメージのイメージ ファミリー。イメージ ファミリーは、類似したイメージをグループ化するために使用されます。クラスタを作成するときに、ファミリー内の最新イメージへのポインタとして使用できます。例:custom-2-2-debian12
--no-smoke-test
: 新しくビルドされたカスタム イメージのスモークテストを無効にするオプション フラグ。スモークテストでは、新しく作成されたイメージを使用して Dataproc のテストクラスタが作成され、小さいジョブが実行され、テストの終了時にクラスタが削除されます。スモークテストは、新しく作成されたカスタム イメージによって正常に機能する Dataproc クラスタを作成できることを検証するために、デフォルトで実行されます。--no-smoke-test
フラグを使用すると、この手順を無効にできます。無効にすると、カスタム イメージのビルドプロセスは速くなりますが、おすすめしません。--subnet
: カスタム Dataproc イメージをビルドする VM の作成に使用するサブネットワーク。プロジェクトが共有 VPC の一部である場合、完全なサブネットワーク URL をprojects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
の形式で指定する必要があります。カスタム イメージの作成に使用されるベース Dataproc イメージから
goog-dataproc-version
ラベルを抽出します。gcloud compute images describe ${BASE_DATAPROC_IMAGE} \ --project cloud-dataproc \ --format="value(labels.goog-dataproc-version)"
カスタム イメージにラベルを設定します。
gcloud compute images add-labels IMAGE_NAME --labels=[KEY=VALUE,...]
- 完全 URI:
https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/`gs://`BUCKET_NAME`
- 部分 URI:
projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME
- 略称: CUSTOM_IMAGE_NAME
- 完全 URI:
https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME/var>
- 部分 URI:
projects/PROJECT_ID/global/images/family/CUSTOM_IMAGE_FAMILY_NAME
- Google Cloud コンソールで [Compute Engine] → [イメージ] ページを開き、イメージ名をクリックします。[
filter images
] フィールドにクエリを挿入して、表示されるイメージの数を制限できます。 - [イメージの詳細] ページが開きます。[同等の REST] をクリックします。
- REST レスポンスに、イメージの URI である
selfLink
など、イメージに関する詳細情報が一覧表示されます。{ ... "name": "my-custom-image", "selfLink": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME", "sourceDisk": ..., ... }
- Dataproc の [クラスタの作成] ページを開きます。[クラスタの設定] パネルが選択されています。
- [バージョニング] セクションで [変更] をクリックします。[カスタム イメージ] タブを選択し、Dataproc クラスタに使用するカスタム イメージを選択して、[選択] をクリックします。選択したカスタム イメージを使用してクラスタの VM がプロビジョニングされます。
カスタム イメージのカスタマイズ スクリプトで、
/etc/google-dataproc
にdataproc.custom.properties
ファイルを作成し、そのファイルでクラスタのプロパティ値を設定します。dataproc.custom.properties
ファイルの例:
dataproc.conscrypt.provider.enable=VALUE dataproc.logging.stackdriver.enable=VALUE
- 2 つのクラスタ プロパティをオーバーライドするためのカスタマイズ スクリプト ファイル作成スニペットの例:
cat <<EOF >/etc/google-dataproc/dataproc.custom.properties dataproc.conscrypt.provider.enable=true dataproc.logging.stackdriver.enable=false EOF
期限切れのカスタム イメージ、または 10 日以内に期限切れになるカスタム イメージを使用して、Dataproc クラスタの作成を試みます。
gcloud dataproc clusters create CLUSTER-NAME \ --image=CUSTOM-IMAGE-NAME \ --region=REGION \ ... other flags ...
gcloud CLI によって、クラスタのプロパティ名とトークン値
dataproc:dataproc.custom.image.expiration.token
を含むエラー メッセージが発行されます。gcloud CLI を使用して、コピーした TOKEN_VALUE をクラスタのプロパティとして追加し、Dataproc クラスタをもう一度作成します。
gcloud dataproc clusters create CLUSTER-NAME \ --image=CUSTOM-IMAGE-NAME \ --properties=dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE \ --region=REGION \ ... other flags ...
プロジェクトに Cloud Storage バケットを作成する
カスタム イメージを生成する
Python プログラムの generate_custom_image.py を使用して、Dataproc カスタム イメージを作成します。
仕組み
generate_custom_image.py
プログラムは、指定された Dataproc ベースイメージを使用して一時的な Compute Engine VM インスタンスを起動し、VM インスタンス内でカスタマイズ スクリプトを実行して、カスタム パッケージのインストールと構成の更新を行います。カスタマイズ スクリプトが完了すると、VM インスタンスがシャットダウンされ、VM インスタンスのディスクから Dataproc カスタム イメージが作成されます。一時的な VM は、カスタム イメージの作成後に削除されます。カスタム イメージは保存され、Dataproc クラスタを作成するために使用できます。
generate_custom_image.py
プログラムは、gcloud CLI を使用して Compute Engine で複数ステップのワークフローを実行します。
コードの実行
GitHub の Dataproc カスタム イメージで、ファイルをフォークまたはクローンします。
次に、generate_custom_image.py
プログラムを実行し、Dataproc でカスタム イメージを生成して保存します。
python3 generate_custom_image.py \ --image-name=CUSTOM_IMAGE_NAME \ [--family=CUSTOM_IMAGE_FAMILY_NAME] \ --dataproc-version=IMAGE_VERSION \ --customization-script=LOCAL_PATH \ --zone=ZONE \ --gcs-bucket=gs://BUCKET_NAME \ [--no-smoke-test]
必須フラグ
オプション フラグ
追加のオプション フラグのリストについては、GithHub のオプションの引数をご覧ください。
generate_custom_image.py
が正常に実行されると、カスタム イメージの imageURI
がターミナル ウィンドウの出力に表示されます(完全な imageUri
が太字で示されています)。
... managedCluster: clusterName: verify-image-20180614213641-8308a4cd config: gceClusterConfig: zoneUri: ZONE masterConfig: imageUri: https://www.googleapis.com/compute/beta/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME ... INFO:__main__:Successfully built Dataproc custom image: CUSTOM_IMAGE_NAME INFO:__main__: ##################################################################### WARNING: DATAPROC CUSTOM IMAGE 'CUSTOM_IMAGE_NAME' WILL EXPIRE ON 2018-07-14 21:35:44.133000. #####################################################################
カスタム イメージ バージョン ラベル(高度な使い方)
Dataproc の標準カスタム イメージ ツールを使用する場合、このツールによって、作成されたカスタム イメージに goog-dataproc-version
ラベルが設定されます。このラベルは、Dataproc でイメージ上のソフトウェアを管理するために使用される機能と能力を反映しています。
高度な使い方: 独自のプロセスを使用してカスタム Dataproc イメージを作成する場合は、次のようにカスタム イメージに goog-dataproc-version
ラベルを手動で追加する必要があります。
カスタム イメージを使用する
Dataproc クラスタを作成するときに、カスタム イメージを指定します。カスタム イメージは Cloud Compute イメージに保存され、作成日から 60 日間、Cloud Dataproc クラスタの作成に利用できます(60 日間の有効期限後にカスタム イメージを使用する方法については、期限切れのカスタム イメージを使用してクラスタを作成する方法をご覧ください)。
カスタム イメージの URI
カスタム イメージの imageUri
をクラスタ作成オペレーションに渡します。この URI は、次の 3 つのいずれかの方法で指定できます。
カスタム イメージは、ファミリー URI で指定することもできます。これにより、イメージ ファミリー内の最新イメージが常に選択されます。
カスタム イメージ URI の確認方法
Google Cloud CLI
次のコマンドを実行して、カスタム イメージの名前を一覧表示します。
gcloud compute images list
カスタム イメージの名前を次のコマンドに渡し、カスタム イメージの URI(selfLink
)を一覧表示します。
gcloud compute images describe custom-image-name
出力スニペット:
... name: CUSTOM_IMAGE_NAME selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME ...
コンソール
カスタム イメージを使用してクラスタを作成する
gcloud CLI、Dataproc API、 Google Cloud コンソールを使用して、カスタム イメージを使用するマスターノードとワーカーノードからなるクラスタを作成します。
gcloud CLI
--image
フラグを指定した dataproc clusters create コマンドを使用して、カスタム イメージで Dataproc クラスタを作成します。
gcloud dataproc clusters create CLUSTER-NAME \ --image=CUSTOM_IMAGE_URI \ --region=REGION \ ... other flags ...
REST API
カスタム イメージを使用してクラスタを作成するには、cluster.create API リクエストに含まれる masterConfig
、workerConfig
、および該当する場合は secondaryWorkerConfig
の各オブジェクトの InstanceGroupConfig.imageUri フィールドにカスタム イメージの URI を指定します。
例: カスタム イメージで標準の Dataproc クラスタ(1 つのマスターノード、2 つのワーカーノード)を作成するための REST リクエスト。
POST /v1/projects/PROJECT_ID/regions/REGION/clusters/ { "clusterName": "CLUSTER_NAME", "config": { "masterConfig": { "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME" }, "workerConfig": { "imageUri": "projects/PROJECT_ID/global/images/CUSTOM_IMAGE_NAME" } } }
コンソール
カスタム イメージを使用して Dataproc クラスタ プロパティをオーバーライドする
カスタム イメージを使用して、クラスタの作成時に設定されたクラスタ プロパティを上書きできます。カスタム イメージを使用してクラスタを作成するとき、クラスタ作成オペレーションでカスタム イメージによって設定された値とは異なるプロパティ値が設定される場合、カスタム イメージによって設定されたプロパティ値が優先されます。
カスタム イメージを使用してクラスタ プロパティを設定するには:
期限切れのカスタム イメージを使用してクラスタを作成する方法
デフォルトで、カスタム イメージはイメージの作成日から 365 日後に期限切れになります。次の手順に従って、期限切れのカスタム イメージを使用するクラスタを作成できます。
dataproc:dataproc.custom.image.expiration.token=TOKEN_VALUE
TOKEN_VALUE 文字列をクリップボードにコピーします。
これで、このカスタム イメージを使用してクラスタを作成できます。