存在は知っていましたが、試したことがなかったので課金利用ログ(billable usage log)を設定します。
Databricksを本格的に利用することになれば当然コスト管理が大切となります。
こちらの記事も参考にさせていただきました。
S3の設定
-
バケットを作成します。
ty-db-billable-usage-log
という名前にしています。 -
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" ] } ] }
IAMロールの作成
-
ty-db-billable-log
というロールを作成します。 -
インラインポリシーを追加します。ポリシー名は
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/*" ] } } } ] }
-
信頼関係タブをクリックして、以下の信頼ポリシーを追加します。
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>" } } } ] }
ストレージ設定情報(Storage configuration)の作成
ここからはローカルマシンのターミナルなどからコマンドを実行します。curlとjqを使います。
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>
をメモしておきます。
{
"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)の作成
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
レスポンスは以下の様になります。
{
"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>
をメモしておきます。
ログデリバリーの設定
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
でも指定する様にしてください。
レスポンスは以下の様になります。
{
"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."
}
}
}
有効化されたので、デリバリーされるのを待ちます。デリバリーされたらダッシュボードを作成します。
続きはこちらです。