1
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の課金利用ログを設定してみる

Last updated at Posted at 2022-10-03

存在は知っていましたが、試したことがなかったので課金利用ログ(billable usage log)を設定します。

Databricksを本格的に利用することになれば当然コスト管理が大切となります。

こちらの記事も参考にさせていただきました。

S3の設定

  1. バケットを作成します。ty-db-billable-usage-logという名前にしています。

  2. バケットポリシーを設定します。
    Screen Shot 2022-10-03 at 19.48.26.png

    JSON
    {
    	"Version": "2012-10-17",
    	"Statement": [
    		{
    			"Sid": "Grant Databricks Access",
    			"Effect": "Allow",
    			"Principal": {
    				"AWS": "arn:aws:iam::414351767826:root"
    			},
    			"Action": [
    				"s3:GetObject",
    				"s3:GetObjectVersion",
    				"s3:PutObject",
    				"s3:DeleteObject",
    				"s3:ListBucket",
    				"s3:GetBucketLocation"
    			],
    			"Resource": [
    				"arn:aws:s3:::ty-db-billable-usage-log/*",
    				"arn:aws:s3:::ty-db-billable-usage-log"
    			]
    		}
    	]
    }
    
  3. オブジェクト所有者を編集し、ACL有効に設定した上で希望するバケット所有者を選択して保存します。
    Screen Shot 2022-10-03 at 19.49.35.png

IAMロールの作成

  1. ty-db-billable-logというロールを作成します。

  2. インラインポリシーを追加します。ポリシー名はty-db-billable-policyにしました。

    注意
    以下のポリシーではS3バケットにbillable-logというプレフィクスを付与して保存する様にしています。このプレフィックスは後のステップでも指定するのでメモしておいてください。

    JSON
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetBucketLocation"
                ],
                "Resource": [
                    "arn:aws:s3:::ty-db-billable-usage-log"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject",
                    "s3:GetObject",
                    "s3:DeleteObject",
                    "s3:PutObjectAcl",
                    "s3:AbortMultipartUpload"
                ],
                "Resource": [
                    "arn:aws:s3:::ty-db-billable-usage-log/billable-log/",
                    "arn:aws:s3:::ty-db-billable-usage-log/billable-log/*"
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:ListMultipartUploadParts",
                    "s3:ListBucketMultipartUploads"
                ],
                "Resource": "arn:aws:s3:::ty-db-billable-usage-log",
                "Condition": {
                    "StringLike": {
                        "s3:prefix": [
                            "billable-log",
                            "billable-log/*"
                        ]
                    }
                }
            }
        ]
    }
    
  3. 信頼関係タブをクリックして、以下の信頼ポリシーを追加します。

    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アカウントID>"
                    }
                }
            }
        ]
    }
    

    Screen Shot 2022-10-03 at 19.52.51.png

作成したロールのARNをメモしておきます。
Screen Shot 2022-10-03 at 19.58.17.png

ストレージ設定情報(Storage configuration)の作成

ここからはローカルマシンのターミナルなどからコマンドを実行します。curlとjqを使います。

Bash
curl -X POST -u <Databricksアカウントオーナーのメールアドレス>:<パスワード> \
    'https://accounts.cloud.databricks.com/api/2.0/accounts/<DatabricksアカウントID>/storage-configurations' \
  -d '{
    "storage_configuration_name": "databricks-workspace-billable-log-storageconf-v1",
    "root_bucket_info": {
      "bucket_name": "ty-db-billable-usage-log"
    }
  }' | jq

レスポンスは以下の様になります。<ストレージ設定情報のID>をメモしておきます。

JSON
{
  "storage_configuration_id": "<ストレージ設定情報のID>",
  "account_id": "<DatabricksアカウントID>",
  "root_bucket_info": {
    "bucket_name": "ty-db-billable-usage-log"
  },
  "storage_configuration_name": "databricks-workspace-billable-log-storageconf-v1",
  "creation_time": 1664792184307
}

認証設定情報(Credential configuration)の作成

Bash
curl -X POST -u <Databricksアカウントオーナーのメールアドレス>:<パスワード> \
   'https://accounts.cloud.databricks.com/api/2.0/accounts/<DatabricksアカウントID>/credentials' \
   -d '{
   "credentials_name": "databricks-billable-log-credentials-v1",
   "aws_credentials": {
     "sts_role": {
       "role_arn": "<上で作成したIAMロールのARN>"
     }
   }
 }' | jq

レスポンスは以下の様になります。

JSON
 {
  "credentials_id": "<認証設定情報のID>",
  "account_id": "<DatabricksアカウントID>",
  "aws_credentials": {
    "sts_role": {
      "role_arn": "<上で作成したIAMロールのARN>",
      "external_id": "<DatabricksアカウントID>"
    }
  },
  "credentials_name": "databricks-billable-log-credentials-v1",
  "creation_time": 1664792541898
}

<認証設定情報のID>をメモしておきます。

ログデリバリーの設定

Bash
curl -X POST -u <Databricksアカウントオーナーのメールアドレス>:<パスワード>  \
  'https://accounts.cloud.databricks.com/api/2.0/accounts/<DatabricksアカウントID>/log-delivery' \
  -d '{
  "log_delivery_configuration": {
    "log_type": "BILLABLE_USAGE",
    "config_name": "billable usage config",
    "output_format": "CSV",
    "credentials_id": "<認証設定情報のID>",
    "storage_configuration_id": "<ストレージ設定情報のID>",
    "delivery_path_prefix": "<IAMロールのポリシー設定時に指定したプレフィックス>",
    "delivery_start_time": "2020-06",
    "workspace_ids_filter": [
    ]
    }
}' | jq

注意
IAMロールの作成のポリシーで、ログ保存場所のプレフィックスを指定している場合には、上のdelivery_path_prefixでも指定する様にしてください。

レスポンスは以下の様になります。

JSON
{
  "log_delivery_configuration": {
    "config_id": "<ログデリバリー設定のID>",
    "config_name": "billable usage config",
    "log_type": "BILLABLE_USAGE",
    "output_format": "CSV",
    "account_id": "<DatabricksアカウントID>",
    "credentials_id": "<認証設定情報のID>",
    "storage_configuration_id": "<ストレージ設定情報のID>",
    "delivery_path_prefix": "<IAMロールのポリシー設定時に指定したプレフィックス>",
    "delivery_start_time": "2020-06",
    "status": "ENABLED",
    "creation_time": 1664792846000,
    "update_time": 1664792846000,
    "log_delivery_status": {
      "status": "CREATED",
      "message": "Log Delivery Configuration is successfully created. Status will be updated after the first delivery attempt."
    }
  }
}

有効化されたので、デリバリーされるのを待ちます。デリバリーされたらダッシュボードを作成します。

続きはこちらです。

Databricks 無料トライアル

Databricks 無料トライアル

1
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
1
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?