0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Databricksの利用課金データのデリバリーとアクセス

Posted at

Deliver and access billable usage logs | Databricks on AWS [2022/9/27時点]の翻訳です。

本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。

プレビュー
本機能はパブリックプレビューです。

Databricksのアカウントオーナー、あるいはアカウント管理者として、利用量分析でデータを利用できる様にAWS S3バケットにCSVファイル形式で利用課金ログを日次でデリバリーする様に設定することができます。お使いのアカウントのワークスペースごとのCSVファイルをデリバリーします。このCSVファイルには、ワークスペースのクラスター利用量を、クラスターID、課金SKU、クラスター作成者、クラスタータグなどで並び替えできるDatabricksユニット(DBU)の形式の履歴データが含まれます。CSVファイルのそれぞれのカラムの説明については、CSVファイルのスキーマを参照ください。

ログデリバリーを設定せずに利用課金データをダウンロードするためにAPIを使うには、Download billable usage logs using the Account APIをご覧ください。

お使いのアカウントがE2バージョンのプラットフォームであれば、アカウントオーナーとアカウント管理者はE2向けアカウントコンソールの利用量ページでグラフやテーブル形式で利用量を確認することができます。このページでは、ワークロードタイプごとにグルーピングされたDBUの使用量をグラフで表示することができ、CSV形式で利用量データを直接ダウンロードすることができます。

注意
すべての新規Databricksアカウントと大部分の既存アカウントはE2です。もし、自分のアカウントタイプが不明な場合にはDatabricks担当者にお問い合わせください。

別のバージョンのアカウントの場合には、アカウントオーナーはレガシーなアカウントコンソールの利用量概要タブで利用量を確認することができます。

オプションとして、ログデリバリーのために作成したIAMロールとは異なるAWSアカウントにログをデリバリーすることができます。これによって、複数のAWSアカウントが同じS3バケットにデリバリーする様にワークスペースを設定するなどの柔軟性を手に入れることができます。このオプションでは、クロスアカウントのIAMロールを参照するS3バケットポリシーを設定する必要があります。本書では、手順とポリシーテンプレートを提供します。

S3バケットをどの様にセットアップするのかによって、アカウントオーナーとアカウント管理者によるログへのアクセス方法が異なります。Databricksは、AWSビルトインのBucketOwnerFullControl Canned ACLを用いてS3バケットにログをデリバリーするので、アカウントオーナーと割り当てられたユーザーは直接ログをダウンロードすることができます。新規作成されたオブジェクトのバケットオーナーシップをサポートするためには、お使いのバケットのS3 Object OwnershipBucket owner preferredに設定する必要があります。

重要!
設定S3 Object OwnershipObject writerにすると、ログの様な新規オブジェクトのオーナーはアップロードしたアカウントであり続けます。これはデフォルトでは、お使いのバケットへのアクセスのために作成、指定されたIAMロールとなります。この場合、AWSコンソールやバケットオーナーとして認証した自動化ツールからアクセスすることができないため、ログへのアクセスが困難となります。

望ましくないアクセスからバケットのデータを防御するガイドに関しては、Security Best Practices for S3をレビューすることをお勧めします。

設定の選択肢

利用課金ログデリバリーを設定する際、アカウントがE2バージョンプラットフォームである場合、以下の選択肢があります。

  • アカウント内のすべてのワークスペースで同じ設定(ログデリバリーのS3バケットとIAMロール)を共有する。これはデフォルトです。
  • アカウント内のワークスペースごとに別の設定を使用する。
  • 別々のワークスペースのグループごとに設定を共有する。

Account APIE2アカウントのアカウントコンソールを用いてワークスペースが作成されていない場合、アカウントごとに1つのワークスペースを持つことしかできません。このため、アカウントごとにユニークなストレージ設定オブジェクト、認証設定オブジェクトを作成しなくてはなりませんが、これらの設定オブジェクトでS3バケットやIAMロールを再利用することができます。

注意
ログデリバリーを設定するためにAccount APIを使用したとしても、Account APIを使用せずに作成されたワークスペースを含め、いかなるワークスペースでログデリバリーを設定することができます。

ハイレベルのフロー

利用課金ログのデリバリーのハイレベルのフローは以下の通りとなります。

  1. ストレージの設定: AWSで新規のAWS S3バケットを作成します。Databricks APIを用いて、そのバケット名を使用するストレージ設定オブジェクトを作成するためにAccount APIを呼び出します。

    注意
    ログデリバリーのために作成したIAMロールとは異なるAWSアカウントにログをデリバリーするには、S3バケットポリシーを追加する必要があります。このステップではなく、後のステップで追加を行います。

  2. 認証情報の設定: AWSで適切なAWS IAMロールを作成します。Databricks APIを用いて、IAMロールのARNを使用する認証設定オブジェクトを作成するためにAccount APIを呼び出します。ロールポリシーでは、お使いのS3バケット内でログデリバリーのためのパスプレフィックスを指定することができます。ログデリバリーの設定で、S3バケットを共有しながらも、ワークスペースごとに異なるパスプレフィックスを使用する様に複数のパスプレフィックスを含める様にIAMロールを定義することもできます。

  3. (オプション)クロスアカウントのサポート: ログデリバリーのために作成したIAMロールとは異なるAWSアカウントにログをデリバリーする際には、S3バケットポリシーを追加します。このポリシーは、以前のステップで作成したクロスアカウントIAMロールに対するIDを参照します。

  4. log delivery APIの呼び出し: 以前のステップで作成した認証情報設定オブジェクト、ストレージ設定オブジェクトを使用するログデリバリー設定を作成するためにAccount APIを呼び出します。このステップでは、ログデリバリー設定をアカウント全体(現在、将来のワークスペース)、あるいは特定のワークスペースに関連づけることができます。

  5. 分析のためにCSVファイルにアクセス: デリバリーのロケーションは<bucket-name>/<prefix>/billable-usage/csv/であり、<prefix>はログデリバリーの設定でセットアップしたオプションのデリバリーパスのプレフィックスとなります。ファイル名は、workspaceId=<workspace-id>-usageMonth=<month>.csvとなります。ファイルは、ワークスペースごと月ごとのCSVファイルを上書きすることでデリバリーされます。分析のためにこのデータをDatabricksにインポートすることができます。また、これらのCSVファイルをベースとして利用量分析ダッシュボードを実行するためのノートブックがあります。詳細はDatabricksで利用ログを分析するをご覧ください。

重要!
アカウントで作成できるログデリバリー設定の数には制限があります。アカウントレベル(ワークスペースのフィルタなし)では最大2つの有効な設定を作成することができ、有効な2つの設定はすべて固有のワークスペースに割り当てられます(2つの設定のワークスペースフィルタで同じworkspaceIdが含まれることは許容されます)。ログデリバリー設定を削除することはできませんが、無効化することはできます。無効化した設定を再度有効化することはできますが、上述した様に制限を超えるリクエストは失敗します。

要件

  • APIの認証を受けるためのアカウントオーナー(E2アカウントの場合はアカウント管理者も)のメールアドレスとパスワード

    メールアドレスとパスワードは大文字小文字を区別します。

  • アカウントID

    E2バージョンのプラットフォームのアカウントでは、アカウントコンソールのユーザープロファイルのドロップダウンからアカウントIDを取得することができます。E2バージョンでない場合、アカウントコンソールのUsage OverviewタブからアカウントIDを取得できます。アカウントIDが見つからない場合にはDatabricks担当者にコンタクトしてください。

APIの認証方法

本書で説明されているAPIはすべてのAWSリージョナルデプロイメントに対してaccounts.cloud.databricks.comのベースエンドポイントで公開されています。

APIリクエストのためには以下のベースURLを使用します。
https://accounts.cloud.databricks.com/api/2.0/

REST APIには、HTTPヘッダーAuthorizationの設定を含むHTTP Basic認証が必要となります。本書では、usernameはあなたのアカウントオーナー(あるいは、E2アカウントの場合はアカウント管理者)のメールアドレスを参照します。このメールアドレスは大文字小文字を区別します。認証情報をcurlの様なツールに提供するにはいくつかの方法があります。

  • <username>:<password>の構文でそれぞれのリクエストのヘッダーでアカウントのユーザー名とパスワードを指定します。

    Bash
    curl -X GET -u `<username>:<password>` -H "Content-Type: application/json" \
    'https://accounts.cloud.databricks.com/api/2.0/accounts/<account-id>/<endpoint>'
    
  • <username>:<password>文字列にbase64エンコーディングを適用し、HTTPヘッダーに直接指定します。

    Bash
    curl -X GET -H "Content-Type: application/json" \
    -H 'Authorization: Basic <base64-username-pw>'  'https://accounts.cloud.databricks.com/api/2.0/accounts/<account-id>/<endpoint>'
    
  • machineloginpasswordプロパティを持つ.netrcファイルを作成します。

    ini
    machine accounts.cloud.databricks.com
    login <username>
    password <password>
    

    .netrcファイルを呼び出すには、curlコマンドで-nを使います。

    Bash
    curl -n -X GET 'https://accounts.cloud.databricks.com/api/2.0/accounts/<account-id>/workspaces'
    

    本書の例では、この認証スタイルを使用します。

完全なAPIリファレンスに関しては、Account API 2.0をご覧ください。

ステップ1: ストレージの設定

Databricksは利用課金データをお使いのアカウントのS3バケットにデリバリーします。複数のワークスペースが単一のS3バケットを用いる様に、あるいは、ワークスペースごと(あるいはワークスペースのグループごと)に異なるバケットを使用する様に定義することができます。

この手順では、アカウントの1つ以上のワークスペースで共通の設定を用いる単一の設定オブジェクトをどの様にセットアップするのか説明します。ワークスペースごとに別のストレージロケーションを使用するには、ワークスペースごとあるいはワークスペースのグループごとに手順を繰り返します。

  1. Configure AWS storageの手順に従ってS3バケットを作成します。

  2. 新規S3バケットを表現するDatabricksストレージ設定レコードを作成します。新規ストレージ設定作成API(POST /accounts/<account-id>/storage-configurations)を呼び出すことでS3バケットを指定します。

    以下を指定します。

    • storage_configuration_name - ユニークな新規ストレージ設定名
    • root_bucket_info - お使いのS3バケット名を含むbucket_nameフィールドを持つJSONオブジェクト

    レスポンスの本体に含まれるstorage_configuration_idの値をコピーします。以降のステップでログデリバリー設定を作成する際にこれを使用します。

    サンプル:

    Bash
    curl -X POST -n \
        'https://accounts.cloud.databricks.com/api/2.0/accounts/<databricks-account-id>/storage-configurations' \
      -d '{
        "storage_configuration_name": "databricks-workspace-storageconf-v1",
        "root_bucket_info": {
          "bucket_name": "my-company-example-bucket"
        }
      }'
    

    レスポンス:

    JSON
    {
      "storage_configuration_id": "<databricks-storage-config-id>",
      "account_id": "<databricks-account-id>",
      "root_bucket_info": {
        "bucket_name": "my-company-example-bucket"
      },
      "storage_configuration_name": "databricks-workspace-storageconf-v1",
      "creation_time": 1579754875555
    }
    

ステップ2: 認証情報の設定

この手順では、アカウントの1つ以上のワークスペースで共通する単一の設定のセットアップ方法を説明します。ワークスペースごとに異なる認証情報を使用するには、ワークスペースごとあるいはワークスペースのグループごとに手順を繰り返します。

注意
異なるS3バケット名を使用するには、別のIAMロールを作成する必要があります。

  1. 管理者権限を持つユーザーとしてAWSコンソールにログインし、IAMサービスに移動します。

  2. サイドバーからRolesタブをクリックします。

  3. Create roleをクリックします。

    1. Select type of trusted entityAWS serviceをクリックします。
    2. Common Use CasesEC2をクリックします。
    3. Next: Permissionsボタンをクリックします。
    4. Next: Tagsボタンをクリックします。
    5. Next: Reviewボタンをクリックします。
    6. Role nameフィールドにロール名を入力します。
    7. Create roleをクリックします。ロール一覧が表示されます。
  4. ロール一覧で、作成したロールをクリックします。

  5. インラインポリシーを追加します。

    1. PermissionsタブでAdd inline policyをクリックします。
    2. ポリシーエディタでJSONタブをクリックします。
    3. アクセスポリシーをコピーして修正します。ポリシーの以下の値をご自身の設定値で置き換えます。
    • <s3-bucket-name>: お使いのAWS S3バケットのバケット名
    • <s3-bucket-path-prefix>: (オプション)S3バケットのデリバリーロケーションへのパス。指定されない場合、ログはバケットのルートにデリバリーされます。このパスはlog delivery APIを呼び出す際の引数delivery_path_prefixと一致する必要があります。
    JSON
    {
      "Version":"2012-10-17",
      "Statement":[
        {
          "Effect":"Allow",
          "Action":[
            "s3:GetBucketLocation"
          ],
          "Resource":[
            "arn:aws:s3:::<s3-bucket-name>"
          ]
        },
        {
          "Effect":"Allow",
          "Action":[
            "s3:PutObject",
            "s3:GetObject",
            "s3:DeleteObject",
            "s3:PutObjectAcl",
            "s3:AbortMultipartUpload"
          ],
          "Resource":[
            "arn:aws:s3:::<s3-bucket-name>/<s3-bucket-path-prefix>/",
            "arn:aws:s3:::<s3-bucket-name>/<s3-bucket-path-prefix>/*"
          ]
        },
        {
          "Effect":"Allow",
          "Action":[
            "s3:ListBucket",
            "s3:ListMultipartUploadParts",
            "s3:ListBucketMultipartUploads"
          ],
          "Resource":"arn:aws:s3:::<s3-bucket-name>",
          "Condition":{
            "StringLike":{
              "s3:prefix":[
                "<s3-bucket-path-prefix>",
                "<s3-bucket-path-prefix>/*"
              ]
            }
          }
        }
      ]
    }
    

    パスプレフィックスの使用法をカスタマイズすることができます。

    • バケットパスのプレフィックスを使いたくない場合には、<s3-bucket-path-prefix>/(最後のスラッシュを含みます)が表示される箇所を削除してください。
    • 複数のワークスペースでS3バケットは共有しますが、異なるパスプレフィックスを使用したい場合、複数のパスプレフィックスを含める様にIAMロールを定義することができます。<s3-bucket-path-prefix>を参照する部分が2ヶ所ポリシーに存在します。それぞれのケースで、パスプレフィックスを参照する連続する2行を複製します。以下の様に、新たなパスプレフィックスごとに行のペアを繰り返します。
    JSON
    {
      "Resource":[
        "arn:aws:s3:::<mybucketname>/field-team/",
        "arn:aws:s3:::<mybucketname>/field-team/*",
        "arn:aws:s3:::<mybucketname>/finance-team/",
        "arn:aws:s3:::<mybucketname>/finance-team/*"
      ]
    }
    
    1. Reveiw policyをクリックします。
    2. Nameフィールドでポリシー名を入力します。
    3. Create policyをクリックします。
    4. AWSアカウントレベルで特定のアクションを拒否するサービスコントロールポリシーを使用しているのであれば、Databricksがクロスアカウントロールを仮定できるようにsts:AssumeRoleが許可されていることを確認してください。
  6. ロールのサマリーページでTrust Relationshipsタブをクリックします。

  7. エディタに以下のアクセスポリシーを貼り付け、以下の値をご自身の設定値で置き換えます。

    • <databricks-account-id>: お使いのDatabricksアカウントID
    JSON
    {
      "Version":"2012-10-17",
      "Statement":[
        {
          "Effect":"Allow",
          "Principal":{
            "AWS":"arn:aws:iam::414351767826:role/SaasUsageDeliveryRole-prod-IAMRole-3PLHICCRR1TK"
          },
          "Action":"sts:AssumeRole",
          "Condition":{
            "StringEquals":{
              "sts:ExternalId":[
                "<databricks-account-id>"
              ]
            }
          }
        }
      ]
    }
    
  8. ロールサマリーページでRole ARNをコピーしておき、後のステップのために保存しておきます。

  9. IAMロールに対応するDatabricks認証設定IDを作成します。認証設定作成API(POST /accounts/<account-id>/credentials)を呼び出します。このリクエストはクロスアカウントの信頼関係を確立し、新たなワークスペースを作成する際に使用するリファレンスIDを返却します。

    <account-id>をお使いのDatabricksアカウントIDで置き換えます。リクエスト本体では、

    • credentials_nameにはお使いのアカウントで一位の名前をつけます。
    • aws_credentialsには、sts_roleプロパティを含むオブジェクトを設定します。このオブジェクトでは、作成したロールのrole_arnを指定する必要があります。

    レスポンスのボディには、新規ワークスペースを作成する際に必要となるDatabricks認証設定のIDであるcredentials_idフィールドが含まれます。後ほどのステップでログデリバリー設定を作成する際に使用するのでこのフィールドをコピーしておきます。

    サンプル:

    Bash
     curl -X POST -n \
       'https://accounts.cloud.databricks.com/api/2.0/accounts/<databricks-account-id>/credentials' \
       -d '{
       "credentials_name": "databricks-credentials-v1",
       "aws_credentials": {
         "sts_role": {
           "role_arn": "arn:aws:iam::<aws-account-id>:role/my-company-example-role"
         }
       }
     }'
    

    レスポンス:

    JSON
     {
       "credentials_id": "<databricks-credentials-id>",
       "account_id": "<databricks-account-id>",
       "aws_credentials": {
         "sts_role": {
           "role_arn": "arn:aws:iam::<aws-account-id>:role/my-company-example-role",
           "external_id": "<databricks-account-id>"
         }
       },
       "credentials_name": "databricks-credentials-v1",
       "creation_time": 1579753556257
     }
    

    後で使うので、レスポンスのcredentials_idをコピーしておきます。

ステップ3: (オプション)クロスアカウントのサポート

ログデリバリーで使うIAMロールと同じAWSアカウントにS3バケットがある場合には、このステップはスキップしてください。

ログデリバリーのために作成したIAMロールがあるアカウントと異なるAWSアカウントにログをデリバリーするためには、以下で説明するS3バケットポリシーを追加します。このポリシーは、以前のステップで作成したクロスアカウントIAMロールのIDを参照します。

  1. AWSコンソールからS3サービスに移動します。

  2. バケット名をクリックします。

  3. Permissionsタブをクリックします。

  4. Bucket Policyボタンをクリックします。

  5. バケットポリシーをコピーし編集します。

    <s3-bucket-name>をお使いのS3バケット名で置き換えます。<customer-iam-role-id>を新規に作成したIAMロールのロールIDで置き換えます。<s3-bucket-path-prefix>を希望のバケットパスプレフィックスで置き換えます。パスプレフィックスンポカスタマイズに関する情報についてはポリシーサンプルの後にある注意を参照ください。

    JSON
    {
      "Version": "2012-10-17",
      "Statement": [
          {
              "Effect": "Allow",
              "Principal": {
                  "AWS": ["arn:aws:iam::<customer-iam-role-id>"]
              },
              "Action": "s3:GetBucketLocation",
              "Resource": "arn:aws:s3:::<s3-bucket-name>"
          },
          {
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::<customer-iam-role-id>"
              },
              "Action": [
                  "s3:PutObject",
                  "s3:GetObject",
                  "s3:DeleteObject",
                  "s3:PutObjectAcl",
                  "s3:AbortMultipartUpload",
                  "s3:ListMultipartUploadParts"
              ],
              "Resource": [
                  "arn:aws:s3:::<s3-bucket-name>/<s3-bucket-path-prefix>/",
                  "arn:aws:s3:::<s3-bucket-name>/<s3-bucket-path-prefix>/*"
              ]
          },
          {
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::<customer-iam-role-id>"
              },
              "Action": "s3:ListBucket",
              "Resource": "arn:aws:s3:::<s3-bucket-name>",
              "Condition": {
                  "StringLike": {
                      "s3:prefix": [
                          "<s3-bucket-path-prefix>",
                          "<s3-bucket-path-prefix>/*"
                      ]
                  }
              }
          }
      ]
    }
    

    パスプレフィックスの使用法をカスタマイズすることができます。

    • バケットパスのプレフィックスを使いたくない場合には、<s3-bucket-path-prefix>/(最後のスラッシュを含みます)が表示される箇所を削除してください。
    • 複数のワークスペースでS3バケットは共有しますが、異なるパスプレフィックスを使用したい場合、複数のパスプレフィックスを含める様にIAMロールを定義することができます。<s3-bucket-path-prefix>を参照する部分が2ヶ所ポリシーに存在します。それぞれのケースで、パスプレフィックスを参照する連続する2行を複製します。以下の様に、新たなパスプレフィックスごとに行のペアを繰り返します。
    JSON
    {
      "Resource":[
        "arn:aws:s3:::<mybucketname>/field-team/",
        "arn:aws:s3:::<mybucketname>/field-team/*",
        "arn:aws:s3:::<mybucketname>/finance-team/",
        "arn:aws:s3:::<mybucketname>/finance-team/*"
      ]
    }
    

ステップ4: log delivery APIの呼び出し

ログデリバリーを設定するには、ログデリバリー設定API(POST /accounts/<account-id>/log-delivery)をコールします。

以前のステップでコピーした以下の値が必要となります。

  • credentials_id: クロスアカウントロールの認証情報を表現するDatabricks認証設定ID。
  • storage_configuration_id: お使いのルートS3バケットを表現するDatabricksストレージ設定ID。

また、以下のフィールドを設定します。

  • log_type: 常にBILLABLE_USAGEに設定します。

  • output_format: 常にCSVに設定します。CSVファイルフォーマットの詳細については、Databricksにおける利用課金ログデータの分析をご覧下さい。

  • delivery_path_prefix: (オプション)パスプレフィックスを設定します。ロールポリシーで使用したパスプレフィックスとマッチする必要があります。

  • workspace_ids_filter: (オプション)デフォルトでは、このログ設定はお使いのアカウントIDに紐づけられるすべてのワークスペースに適用されます。いくつかのタイプのデプロイメントでは、アカウントIDごとに一つのワークスペースしか存在しないので、このフィールドは不要です。あなたのアカウントでワークスペースがAccount APIを用いて作成された場合、アカウントIDに複数のワークスペースが関連づけられている場合があります。オプションとして、設定を適用するワークスペースの配列をこのフィールドに設定することができます。別のワークスペースには別のログデリバリー設定を使用することを考えているのであれば、ブランクのままとするのではなく明示的に設定してください。これをブランクにすると、お使いのアカウントIDは今後作成される他のワークスペースにも関連づけられるので、この設定も新規ワークスペースに適用されます。ワークスペースには1つ以上のログデリバリー設定を適用することができ、この場合には複数のロケーションにログが書き込まれます。

    重要!
    アカウントで作成できるログデリバリー設定の数には制限があります。アカウントレベル(ワークスペースのフィルタなし)では最大2つの有効な設定を作成することができ、有効な2つの設定はすべて固有のワークスペースに割り当てられます(2つの設定のワークスペースフィルタで同じworkspaceIdが含まれることは許容されます)。ログデリバリー設定を削除することはできませんが、無効化することはできます。無効化した設定を再度有効化することはできますが、上述した様に制限を超えるリクエストは失敗します。

    • delivery_start_time: (オプション)ログデリバリーを開始する年月です。デフォルトは現在の月ですう。フォーマットはテキストでYYYY-MM形式となります。2019-03以降の任意の年月を指定することができます。

サンプル:

Bash
curl -X POST -n \
  'https://accounts.cloud.databricks.com/api/2.0/accounts/<databricks-account-id>/log-delivery' \
  -d '{
  "log_delivery_configuration": {
    "log_type": "BILLABLE_USAGE",
    "config_name": "billable usage config",
    "output_format": "CSV",
    "credentials_id": "<databricks-credentials-id>",
    "storage_configuration_id": "<databricks-storage-config-id>",
    "delivery_path_prefix": "usage-data",
    "delivery_start_time": "2020-06",
    "workspace_ids_filter": [
        6383650456894062,
        4102272838062927
    ]
    }
}'

レスポンス:

JSON
{
    "log_delivery_configuration": {
        "config_id": "<config-id>",
        "config_name": "billable usage config",
        "log_type": "BILLABLE_USAGE",
        "output_format": "CSV",
        "account_id": "<account-id>",
        "credentials_id": "<databricks-credentials-id>",
        "storage_configuration_id": "<databricks-storage-config-id>",
        "workspace_ids_filter": [
            6383650456894062,
            4102272838062927
        ],
        "delivery_path_prefix": "usage-data",
        "delivery_start_time": "2020-06",
        "status": "ENABLED",
        "creation_time": 1591638409000,
        "update_time": 1593108904000,
        "log_delivery_status": {
          "status": "CREATED",
          "message": "Log Delivery Configuration is successfully created. Status will be updated after the first delivery attempt."
        }
    }
}

log delivery APIのその他の機能

log delivery APIには、その他の機能があります。詳細についてはAPIリファレンスのドキュメントをご覧ください。

その他の機能には以下の様なものがあります。

ログデリバリー設定のステータスは、APIレスポンスのlog_delivery_statusオブジェクトで確認することができます。log_delivery_statusを用いることで、ステータス(成功あるいは失敗)とデリバリーの試行や成功の最後の日付をチェックすることができます。

重要!
アカウントで作成できるログデリバリー設定の数には制限があります。アカウントレベル(ワークスペースのフィルタなし)では最大2つの有効な設定を作成することができ、有効な2つの設定はすべて固有のワークスペースに割り当てられます(2つの設定のワークスペースフィルタで同じworkspaceIdが含まれることは許容されます)。ログデリバリー設定を削除することはできませんが、無効化することはできます。無効化した設定を再度有効化することはできますが、上述した様に制限を超えるリクエストは失敗します。

ステップ5: 分析のためにログファイルにアクセス

ログは<bucket-name>/<prefix>/billable-usage/csv/にデリバリーされ、<prefix>はログデリバリーの設定でセットアップしたオプションのデリバリーパスのプレフィックスとなります。ファイル名は、workspaceId=<workspace-id>-usageMonth=<month>.csvとなります。ファイルは、ワークスペースごと月ごとのCSVファイルを上書きすることでデリバリーされます。

CSVのスキーマについては、CSVファイルスキーマをご覧ください。

Databricksを用いたこれらのファイルの分析方法の詳細はDatabricksで利用ログを分析するをご覧ください。

Terraformを用いた設定の自動化

databricks_mws_log_deliveryリソースを活用することで、利用量ログデリバリーを自動で設定するためにDatabricks Terraformプロバイダーを使用することができます。以下に、利用量と監査ログデリバリーのエンドツーエンドのサンプルを示します。

variable "databricks_account_id" {
  description = "Account ID. You can get your account ID in the bottom left corner of the account console. See https://accounts.cloud.databricks.com"
}

resource "aws_s3_bucket" "logdelivery" {
  bucket = "${var.prefix}-logdelivery"
  acl    = "private"
  versioning {
    enabled = false
  }
  force_destroy = true
  tags = merge(var.tags, {
    Name = "${var.prefix}-logdelivery"
  })
}

resource "aws_s3_bucket_public_access_block" "logdelivery" {
  bucket             = aws_s3_bucket.logdelivery.id
  ignore_public_acls = true
}

data "databricks_aws_assume_role_policy" "logdelivery" {
  external_id = var.databricks_account_id
  for_log_delivery = true
}

resource "aws_iam_role" "logdelivery" {
  name               = "${var.prefix}-logdelivery"
  description        = "(${var.prefix}) UsageDelivery role"
  assume_role_policy = data.databricks_aws_assume_role_policy.logdelivery.json
  tags               = var.tags
}

data "databricks_aws_bucket_policy" "logdelivery" {
  full_access_role = aws_iam_role.logdelivery.arn
  bucket           = aws_s3_bucket.logdelivery.bucket
}

resource "aws_s3_bucket_policy" "logdelivery" {
  bucket = aws_s3_bucket.logdelivery.id
  policy = data.databricks_aws_bucket_policy.logdelivery.json
}

resource "databricks_mws_credentials" "log_writer" {
    account_id       = var.databricks_account_id
    credentials_name = "Usage Delivery"
    role_arn         = aws_iam_role.logdelivery.arn
}

resource "databricks_mws_storage_configurations" "log_bucket" {
    account_id                 = var.databricks_account_id
    storage_configuration_name = "Usage Logs"
    bucket_name                = aws_s3_bucket.logdelivery.bucket
}

resource "databricks_mws_log_delivery" "usage_logs" {
    account_id = var.databricks_account_id
    credentials_id = databricks_mws_credentials.log_writer.credentials_id
    storage_configuration_id = databricks_mws_storage_configurations.log_bucket.storage_configuration_id
    delivery_path_prefix = "billable-usage"
    config_name = "Usage Logs"
    log_type = "BILLABLE_USAGE"
    output_format = "CSV"
}

resource "databricks_mws_log_delivery" "audit_logs" {
    account_id = var.databricks_account_id
    credentials_id = databricks_mws_credentials.log_writer.credentials_id
    storage_configuration_id = databricks_mws_storage_configurations.log_bucket.storage_configuration_id
    delivery_path_prefix = "audit-logs"
    config_name = "Audit Logs"
    log_type = "AUDIT_LOGS"
    output_format = "JSON"
}

Databricks 無料トライアル

Databricks 無料トライアル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?