Troubleshooting creating workspaces (E2) | Databricks on AWS [2021/7/20時点]の翻訳です。
Databricksクイックスタートガイドのコンテンツです。
概要
以下のセクションでは、ワークスペース作成時の設定エラーおよび、どのようにエラーに対処するのかを説明します。多くの問題は、Account ConsoleあるいはAccount APIによるワークスペース作成に関わるものですが、当てはまらない場合にはその旨記載します。
注意
この記事はE2バージョンのDatabricksプラットフォームアカウントにおけるプロセスを説明するものです。新規Databricksアカウントと多くの既存アカウントはE2です。お持ちのアカウントタイプが不明の場合には、Databricks担当にお問い合わせください。
一般的なエラー
VPCの最大数
VPCの最大数に関するエラーメッセージを受け取った場合には、リージョンで許可されるVPCの最大数の引き上げをリクエストしてください。このエラーは、顧客管理VPCではなく主にDatabricks管理VPCを用いているときに発生します。
アドレスの最大数
アドレスの最大数に関するエラーメッセージを受け取った場合には、リージョンで許可されるVPCのElastic IPアドレスの最大数の引き上げをリクエストしてください。このエラーは、顧客管理VPCではなく主にDatabricks管理VPCを用いているときに発生します。
このオペレーションは許可されていません
オペレーションが許可されていないというエラーメッセージを受け取った場合には、IAMロールに関するドキュメントで定義されている必要なポリシーがお使いのIAMロールに割り当てられているかを確認してください。
ストレージ設定エラーメッセージ
Malformed request: Failed storage configuration validation checks
ストレージ設定の検証チェックに失敗したとのメッセージを受け取った場合には、お使いのS3バケットのアクセス権が適切に設定されていないことを意味します。AWSストレージの設定の手順に従って、S3バケットのアクセス権が適切に設定されていることを確認してください。
クレディンシャル設定エラーメッセージ
Malformed request: Failed credential configuration validation checks
エラーメッセージに含まれるアクセス権チェックのリストが原因特定に役立ちます。
- 10未満のアクセス権チェックでクレディンシャル設定検証が失敗した場合には、お使いのIAMポリシーに必要な権限が含まれていない可能性があります。Create a cross-account IAM roleの記事から適切なポリシーをコピーしてください。
- それ以上のチェックで検証が失敗した場合には、IAMロールの信頼関係の設定が適切に行われていない可能性が高いです。Create a cross-account IAM roleの記事にある手順に従い、適切にカスタマーロールの信頼関係が設定されていることを確認してください。
ポリシーと信頼関係が適切にせってされているのであれば、以下も確認してください。
- クレディンシャルオブジェクトに適切なロールARNを含めていることを確認してください。
-
AssumeRole
アクション、EC2/VPCアクセスを拒否する組織レベルのservice control policies(SCP)が設定されていないか確認してください。不明な場合には、AWS管理者にSCPについてお尋ねください。
ネットワーク設定
サブネットは他のネットワークで既に使用されています
使用中のサブネットに関するエラーは以下のようなものとなります。
MALFORMED_REQUEST: Malformed parameters: subnet_id subnet-xxxxxxxx1 is already used by another Network, subnet_id subnet-xxxxxxxx2 is already used by another Network.
これは、Databricksのネットワーク設定が同じサブネットを使用していることを意味します。解決するためには、以下のいずれかを実施してください。
- 以前の設定を削除してください。Account APIを使用している場合には、Delete network configuration APIを使用してください。設定を削除するためにAccount Consoleを使用することもできます。
- 以前の設定が使用されていない場合には、新たなワークスペースを作成するために設定を使用できます。
- 稼働中のワークスペースでネットワーク設定が使用さrている場合には、新たなサブネットを作成し、新たなワークスペースのために新たなネットワーク設定を作成します。
以前のワークスペース作成が失敗した場合、関連する設定コンポーネントは自動で削除されないことに注意してください。
セットアップ時にネットワーク設定エラーはなかったが、ワークスペース作成時にエラーが発生
ネットワーク設定のセットアップ時にはエラーが発生しなくても、ワークスペースをデプロイする際にネットワーク設定のエラーが発生する場合があります。これは、Databricksがネットワークオブジェクトを生成する際、基本的な検証のみを行うためです。例えば、サブネットやセキュリティグループはユニークか、指定されていないフィールドはないかをチェックします。
新たなネットワーク設定で新たなワークスペースを作成する際にのみ、本格的なネットワーク設定の検証が行われます。ワークスペースのデプロイ時にエラーが発生した際には、ネットワーク検証エラーメッセージを確認してください。
新規クラスターが反応しない、あるいはイベントログに「data plane network is misconfigured」エラー
ワークスペースのデプロイが成功したように見えても、最初のテスト用のクラスターが反応しないケースがあります。約20-30分経過して、[クラスターのイベントログ]
(https://docs.databricks.com/clusters/clusters-manage.html#event-log)を参照した際、以下のようなエラーメッセージが表示されているかもしれません。
The data plane network is misconfigured. Please verify that the network for your data plane is configured correctly. Error message: Node daemon ping timeout in 600000 ms ...
このメッセージはルーティング、あるいはファイアウォールが適切に設定されていないことを意味します。新規クラスターのためにDatabrcicksがEC2をリクエストしましたが、EC2インスタンスが起動し、コントロールプレーンに接続する際に長い待ち時間が発生しました。クラスターマネージャはインスタンスを停止し、上記エラーを報告します。
お使いのネットワーク設定は、クラスターノードからDatabricksのコントロールプレーンに接続できるように設定されている必要があります。クラスターを用いたクイックなトラブルシュートは、ワークスペースのサブネットの一つにEC2インスタンスをデプロイし、 nc
、ping
、telnet
、traceroute
のようなネットワークトラブルシュートのステップを踏むことです。それぞれのリージョンにおけるリレーCNAMEは顧客管理VPCの記事に記載されています。アーティファクトのストレージに対しては、S3へのネットワーク疎通が成功することを確認してください。
リージョンごとのドメインとIPへのアクセスに関しては、データプレーンに必要なアドレスを参照してください。リージョナルエンドポイントに関してはこちらを参照ください。以下の例では、AWSリージョンeu-west-1
を使用しています。
# Verify access to the web application
nc -zv ireland.cloud.databricks.com 443
# Verify access to the secure cluster connectivity relay
nc -zv tunnel.eu-west-1.cloud.databricks.com 443
# Verify S3 global and regional access
nc -zv s3.amazonaws.com 443
nc -zv s3.eu-west-1.amazonaws.com 443
# Verify STS global and regional access
nc -zv sts.amazonaws.com 443
nc -zv sts.eu-west-1.amazonaws.com 443
# Verify regional Kinesis access
nc -zv kinesis.eu-west-1.amazonaws.com 443
上記コマンドがすべて正常に動作するのであれば、ネットワークは適切に設定されていますが、ファイアウォールを使用している場合には他の問題が発生する場合があります。ファイアウォールでは、Databricksコマンドが失敗するような、ディープパケットインスペクション、SSLインスペクションなどが実行される可能性があります。Databricksのサブネットに作成したEC2インスタンスを用いて以下を実行してみてください。
curl -X GET -H 'Authorization: Bearer <token>' \
https://<workspace-name>.cloud.databricks.com/api/2.0/clusters/spark-versions
<token>
はパーソナルアクセストークンに置換し、お使いのワークスペースのURLを指定してください。詳細はAuthentication using Databricks personal access tokensを参照してください。
このリクエストが失敗する場合、SSL検証を回避するために-k
オプションを試してみてください。-k
オプションでうまくいく場合、ファイアウォールでSSL証明書に関係する問題が起きています。
以下のコマンドを用いてSSL証明書を参照し、ドメインをお使いのリージョンのコントロールプレーンWebアプリケーションのドメインに置換してください。
openssl s_client -showcerts -connect oregon.cloud.databricks.com:443
このコマンドはリターンコードとDatabricks証明書を表示します。エラーが発生する場合には、ファイアウォールが適切に設定されておらず、修正が必要な可能性があります。
SSLの問題はネットワーク層の問題ではないことに注意してください。ファイアウォールにおけるトラフィックはSSLの問題を示しません。ソース、ディスティネーションリクエストが期待通り動作することを確認してください。
ワークスペースは稼働しているようだが、ネットワーク設定がWARNED
ステータス
クラスターを起動し、データジョブを実行して、DBFS_DOWN
やMETASTORE_DOWN
がクラスターのイベントログに表示されないことを確認してください。このようなエラーが出ていない場合には、WARNED
は必ずしも問題ではありません。
新規ワークスペースにおいては、Databricksは数多くのことをチェックします。ワークスペースのサブネット→NATゲートウェイ→インターネットゲートウェイのようにシンプルなルーティングにしていない場合には、Databricksではネットワークが適切かをチェックできません。このような場合、Databricksはネットワーク設定に対して警告を出します。
サブネットのルートテーブルのエラーをチェック
クラスターのイベントログに、以下のようなエラーが出るかもしれません。
subnet: Route Table with ID rtb-xxxxxxxx used for subnet with ID subnet-yyyyyyyyy is missing default route to direct all traffic to the NAT gateway nat-zzzzzzzzzzz.
このエラーは、シンプルなDatabricksワークスペース設定では実際に問題を示している場合があります。
ファイアウォール経由でのルーティング(例:ハブスポークでのトランジットゲートウェイ経由)などご自身で外向きの通信の設定をしている場合には、このエラーはあまり意味のあるものではありません。
このエラーの他の原因としては、クラスター用のDatabricksサブネットとしてNATサブネットを登録していることが考えられます。DatabricksワークスペースのサブネットのリストからNATサブネットを削除し、ワークスペースを再作成してください。
ネットワーク設定のサブネットのリストにNATサブネットを追加しないでください
DatabricksワークスペースのサブネットのリストにはNATサブネットを追加しないでください。NATサブネットはNATゲートウェイのためのもので、Databricksクラスターノードをデプロイするサブネットではありません。ネットワーク設定を作成する際には、Databricksノードのための二つのサブネットのみを指定してください。
メタストアを使用する際の問題、あるいはクラスターイベントログにMETASTORE_DOWN
イベント
ワークスペースが稼働し、クラスターも動作しているのにもかかわらず、クラスターのイベントログにMETASTORE_DOWN
イベントが表示される、あるいはお使いのメタストアが動作していないようであれば、SquidプロキシのようなWeb Application Firewall (WAF)を使っていないか確認してください。クラスターノードはWAFを越えて動作しないいくつかのサービスに接続しなくてはなりません。
クラスター起動エラー:failed to launch Spark container on instance
以下のようなエラーをクラスターログで見るかもしれません。
Cluster start error: failed to launch spark container on instance ...
Exception: Could not add container for ... with address ....
Timed out with exception after 1 attempts
このクラスターログは、インスタンスがルートS3バケットに対してアクセスするためにSTSを使用できない可能性を示しています。これは、VPCエンドポイントを用いてコミュニケーションを切断したり、ファイアウォールを追加して、侵入防御を実装している際に起こります。
修正するには、以下のいずれかを実施してください。
-
VPCの要件にあるように、グローバルSTSエンドポイント(
sts.amazonaws.com
)への接続を許可するようにファイアウォールを変更してください。 - リージョナルエンドポイントを設定してVPCエンドポイントを使用してください。
エラーに関してさらに情報が必要な場合は、AWS CLIのdecode-authorization-message
を呼び出してください。詳細は、AWS article for decode-authorization-messageを参照してください。コマンドは以下のようになります。
aws sts decode-authorization-message --encoded-message
このエラーは、ワークスペースとは別に、STS VPCエンドポイントに対して異なるセキュリティグループを持つVPCエンドポイントを設定した場合に発生する場合があります。それぞれのセキュリティグループ内のリソースが通信できるようにセキュリティグループを更新するか、ワークスペースのサブネットと同じセキュリティグループ内にSTS VPCエンドポイントを設定してください。
クラスターノードが顧客のS3ポリシーを用いてS3ルートバケットにアクセスする際にSTSを使用する必要があります。DatabricksのクラスターノードからAWS STSサービスへとネットワークが疎通する必要があります。
最新のルールによるセキュリティグループの更新ができない
以下のようなエラーを見るケースがあります。
Security Group with ID sg-xxxx could not be updated with latest Security Group Rules
IAMロールのドキュメントの内容に従うようにIAMロールを更新してください。いくつかのケースでは、AuthorizeSecurityGroupEgress
に対するリソース、類似のアクションはカンマ区切りの値を持つ場合があります。それらを一つのリソースではなく、別々のリソースとしてアップデートしてください。
適切
"Action": [
"ec2:AuthorizeSecurityGroupEgress",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RevokeSecurityGroupEgress",
"ec2:RevokeSecurityGroupIngress"
],
"Resource": [
"arn:aws:ec2:us-east-1:444:security-group/sg-xxxx",
"arn:aws:ec2:us-east-1:444:security-group/sg-yyyy",
"arn:aws:ec2:us-east-1:444:security-group/sg-zzzz"
],
不適切
"Resource": ["arn:aws:ec2:us-east-1:444:security-group/sg-xxxx,sg-yyyy,sg-zzzz"],
ネットワークセットアップの問題がある場合、Databircks管理のVPCの利用を検討ください
ネットワークセットアップに直面する際には、ワークスペースを作成する際に、顧客管理VPCではなく、Databricks管理のVPCを選択することもできます。
重要!
ワークスペースを作成する際に顧客管理VPCを作成するかどうかを選択する必要があります。ワークスペース作成後に変更することはできません。
作成に失敗したワークスペースをDatabricks管理VPCに切り替えるには、異なるクロスアカウントIAMロールが必要になります。
- クロスアカウントIAMロールのドキュメントに移動します。
- Databricks VPCとラベル付けされているポリシーをコピーします。
- このポリシーをworkspace creation using the Account Consoleあるいはworkspace creation using the Account APIで使用します。
- アカウントコンソールのネットワーク設定ピッカーでDatabricks-managedを選択します。
- Account APIでは、
network_id
要素を含めないように注意してください。以下のようになります。
{
"workspace_name": "<workspace-name>",
"deployment_name": "<deployment-name>",
"aws_region": "<aws-region>",
"credentials_id": "<credentials-id>",
"storage_configuration_id": "<storage-configuration-id>"
}
Account API固有のエラーメッセージ
以下のエラーは、ワークスペースを作成する際のAccount APIリクエストによって返される場合があるメッセージです。
Malformed request: Invalid <config>
in the HTTP request body
リクエストのボディのJSONが適切にフォーマットされていません。このエラーメッセージの<config>
は、クレディンシャル、ストレージ設定、ネットワーク設定を参照します。URLの特殊文字が適切にエスケープされていることを確認するか、あるいは、PostmanのようなREST APIクライアントアプリケーションを使用してください。
Malformed request: Invalid <config>
in body
リクエストのボディのJSONが適切にフォーマットされていません。このエラーメッセージの<config>
は、クレディンシャル、ストレージ設定、ネットワーク設定を参照します。URLの特殊文字が適切にエスケープされていることを確認するか、あるいは、PostmanのようなREST APIクライアントアプリケーションを使用してください。