メンバーズ CUR を Q in QuickSight で利用するためのデータセット作成方法
はじめに
「AWS Cost and Usage Reports のデータを生成 AI の力で分析、可視化すれば最強のコスト分析ダッシュボードができるのでは?」
クラスメソッドメンバーズが提供する Cost and Usage Reports(以降 メンバーズ CUR)の分析を生成 AI の機能付きの AWS の BI ツール Q in QuickSight に任せようと思った夏の午後、Q in QuickSight でメンバーズ CUR を扱うには工夫が必要でしたので共有します。
前提条件
メンバーズ CUR の出力設定と Glue データカタログ設定は以下の記事を参考に設定してください。
序章
メンバーズ CUR を QuickSight で分析をはじめる
Glue データカタログをソースにし Athena からデータセットを作成しました。
あとは、Q in QuickSight の機能で自然言語によるグラフを作成や、コスト分析を試す予定でした。ですが、データセットのカラム数が 200 を超えると Build visual 機能が使えませんでした。
データセット作成時のカスタム SQL でメンバーズ CUR のカラム数を調整することになりました。
メンバーズ CUR のカラム数を確認
Athena のクエリエディタで確認すると、メンバーズ CUR には 288 カラムが存在します。ここを 200 以内に抑えないと Q in QuickSight のお目当ての機能が使えないです。
必要な CUR 項目の選定
メンバーズ CUR は CUR の互換です。そのため、CUR のドキュメントから各項目を確認できます。現在は 288 カラムでしたが、AWS 側で CUR の項目に変更は入れば、メンバーズ CUR にも変更が入ってきます。
全 288 項目確認するのは骨が折れるので、ヘッダーからある程度絞る方針にしました。特に lineitem
系の項目はコスト分析に必須です。product
系は AWS サービスごとに細かく別れているため、EC2、RDS の様な主要なサービスを抑えつつ、product
の項目を減らすことにしました。
引用: AWS Cost and Usage Reports
カスタム SQL でカラム数を 200 以内に調整
Q in QuickSight の制限に対応するためカスタム SQL を使用します。
分析に必要な項目を維持しながら、product
系カラムを厳選しました。SPICE の容量の都合、アカウント ID を 2 つに制限しています。
SELECT
-- ========================================
-- 基本項目
-- ========================================
bill_invoice_id,
bill_billing_entity,
bill_bill_type,
bill_payer_account_id,
bill_billing_period_start_date,
bill_billing_period_end_date,
bill_invoicing_entity,
-- ========================================
-- 明細項目情報
-- ========================================
line_item_usage_account_id,
line_item_line_item_type,
line_item_usage_start_date,
line_item_usage_end_date,
line_item_product_code,
line_item_usage_type,
line_item_operation,
line_item_availability_zone,
line_item_resource_id,
line_item_usage_amount,
line_item_normalization_factor,
line_item_normalized_usage_amount,
line_item_currency_code,
line_item_unblended_rate,
line_item_unblended_cost,
line_item_line_item_description,
line_item_tax_type,
line_item_legal_entity,
-- ========================================
-- 価格情報
-- ========================================
pricing_term,
pricing_unit,
pricing_public_on_demand_cost,
pricing_public_on_demand_rate,
pricing_lease_contract_length,
pricing_purchase_option,
pricing_offering_class,
-- ========================================
-- リザーブドインスタンス情報
-- ========================================
reservation_amortized_upfront_cost_for_usage,
reservation_amortized_upfront_fee_for_billing_period,
reservation_availability_zone,
reservation_effective_cost,
reservation_end_time,
reservation_modification_status,
reservation_normalized_units_per_reservation,
reservation_number_of_reservations,
reservation_recurring_fee_for_usage,
reservation_reservation_a_r_n,
reservation_start_time,
reservation_total_reserved_normalized_units,
reservation_total_reserved_units,
reservation_units_per_reservation,
reservation_unused_amortized_upfront_fee_for_billing_period,
reservation_unused_normalized_unit_quantity,
reservation_unused_quantity,
reservation_unused_recurring_fee,
reservation_upfront_value,
-- ========================================
-- Savings Plans情報
-- ========================================
savings_plan_total_commitment_to_date,
savings_plan_savings_plan_a_r_n,
savings_plan_region,
savings_plan_instance_type_family,
savings_plan_offering_type,
savings_plan_payment_option,
savings_plan_purchase_term,
savings_plan_start_time,
savings_plan_end_time,
savings_plan_amortized_upfront_commitment_for_billing_period,
savings_plan_recurring_commitment_for_billing_period,
savings_plan_savings_plan_effective_cost,
savings_plan_savings_plan_rate,
savings_plan_used_commitment,
-- ========================================
-- コスト配分タグ
-- ========================================
resource_tags_user_cm_billing_group,
-- ========================================
-- Product系カラム(125個)
-- ========================================
-- 基本情報(20個)
product_product_name,
product_sku,
product_region,
product_location,
product_location_type,
product_servicecode,
product_servicename,
product_group,
product_group_description,
product_usagetype,
product_operation,
product_category,
product_description,
product_availability,
product_availability_zone,
product_fee_code,
product_fee_description,
product_from_location,
product_to_location,
product_transfer_type,
-- EC2/コンピュート関連(40個)
product_instance,
product_instance_capacity10xlarge,
product_instance_capacity12xlarge,
product_instance_capacity24xlarge,
product_instance_capacity2xlarge,
product_instance_capacity4xlarge,
product_instance_capacity8xlarge,
product_instance_capacity_large,
product_instance_capacity_xlarge,
product_instance_family,
product_instance_type,
product_instance_type_family,
product_instancesku,
product_instances,
product_vcpu,
product_memory,
product_memory_gib,
product_memorytype,
product_storage,
product_storage_media,
product_network_performance,
product_physical_cores,
product_physical_processor,
product_processor_architecture,
product_processor_features,
product_clock_speed,
product_cputype,
product_current_generation,
product_dedicated_ebs_throughput,
product_ecu,
product_enhanced_networking_supported,
product_gpu,
product_gpu_memory,
product_intel_avx2_available,
product_intel_avx_available,
product_intel_turbo_available,
product_normalization_size_factor,
product_capacitystatus,
product_tenancy,
product_operating_system,
-- OS/ライセンス関連(10個)
product_os_license_model,
product_license_model,
product_pre_installed_sw,
product_software_included,
product_software_type,
product_edition,
product_version,
product_attachment_type,
product_bundle,
product_addon_feature,
-- データベース関連(15個)
product_database_edition,
product_database_engine,
product_deployment_option,
product_deployment_location,
product_engine_code,
product_min_volume_size,
product_max_volume_size,
product_max_iops_burst_performance,
product_provisioned,
product_volume_type,
product_volume_api_name,
product_rootvolume,
product_uservolume,
product_elastic_graphics_type,
product_compute_family,
-- ストレージ関連(15個)
product_storage_class,
product_storage_type,
product_durability,
product_access_type,
product_ebs_optimized,
product_file_system_type,
product_data,
product_data_transfer,
product_data_transfer_quota,
product_io,
product_compute_type,
product_content_type,
product_directory_size,
product_directory_type,
product_directory_type_description,
-- ネットワーク/転送関連(15個)
product_datatransferout,
product_direct_connect_location,
product_endpoint_type,
product_routing_type,
product_routing_target,
product_from_location_type,
product_to_location_type,
product_protocol,
product_port_speed,
product_traffic_direction,
product_dominantnondominant,
product_endpoint,
product_concurrencyscalingfreeusage,
product_api_type,
product_calling_type,
-- その他サービス固有(10個)
product_activity_type,
product_alarm_type,
product_broker_engine,
product_cache_engine,
product_cache_memory_size_gb,
product_client_location,
product_codec,
product_device,
product_device_type,
product_event_type
FROM "mcur-from-other-account"."mcur"."cur"
WHERE
line_item_usage_account_id IN ('111111111111', '222222222222')
カラム数調整後
カスタム SQL の適用により以下の Q in QuickSight 機能が利用可能になりました。
Build visual でグラフ作成
カラム数を調整した結果、ビジュアル作成機能が使えるようになりました。ですが、質問内容には答えてもらえませんでした。この辺は追々調整していきます。
Q トピックへの質問
データセットに入っているデータに対して自然言語での質問も可能になりました。
補足:200 カラム超でもトピック作成は可能でした
最初の 200 カラムを超えるデータセットでもトピック作成自体は成功しました。
まとめ
メンバーズ CUR を Q in QuickSight で分析するには、200 カラム制限への対応が必要です。カスタム SQL を使用してカラム数を調整することで、一部制限のあった Q in QuickSight の機能が利用可能になります。
おわりに
今回カスタム SQL で作成したデータセットは、Cloud Intelligence Dashboards が期待するカラムを含んだデータセットではなくなりました。Cloud Intelligence Dashboards を利用する場合は、すべてのカラムを含めた別のデータセットを用意してください。