AWS Marketplace Commerce Analytics Serviceを使ってS3に販売者レポートを保存する

2022.08.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Marketplace Commerce Analytics Servicは、販売者側がAWS SDKを通じてMarketplaceの利用状況、サブスクリプション、およびに請求レポート等にアクセスできるようになります。

SDKを使用してリクエストしたデータは、データセットとしてAWSアカウントにあるS3バケットに配信されます。 配信されるデータはMarketplaceのコンソールからDLできる販売者レポートと同じデータに対応しています。

今回の目的として、Marketplaceでのデータを手動でDLして確認することもできるのですが、他のデータと連携したり、販売状況を確認してマーケティング等に活用するためにデータを溜めて分析できる状況を作りたいともいます。

やってみる

オンボーディングガイドによると、AWS Marketplace Commerce Analytics Service を使用するためには以下の手順に従っていけば良いとのこと。

  • AWSアカウントで権限を設定
  • 宛先のAmazon S3バケットを作成
  • レスポンス通知用のAmazon SNSトピックを設定
  • サービスプログラムに登録
  • 設定を確認

AWSアカウントで権限を設定

SDKやCLIからデータセットをリクエストするために,以下のIAMアクセス許可ポリシーを作成してIAMユーザーに付与します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "marketplacecommerceanalytics:GenerateDataSet",
            "Resource": "*"
        }
    ]
}

S3バケットを作成

リクエストしたデータが、指定したAmazon S3バケットに配信されるように専用のものを作成します。

S3バケットを作成する を参照。

レスポンス通知用のAmazon SNSトピックを設定

データセットが利用可能になったり、エラーが発生したりしたときに、この作成したトピックにメッセージを発行して通知できるようにします。

Amazon SNS トピックを作成するを参照。

作成したSNSトピックのARNが今後必要になるので控えておきます。

Commerce Analytics Service プログラムに登録

トピックの ARN およびバケットの名前を使用してサービスを設定すると、Commerce Analytics Service はその Amazon S3 バケットおよび Amazon SNS トピックにアクセスするようになるので、有効になるようにしていきます。

Marketplace 製品を管理するために使用する AWS アカウントでログインし、Commerce Analytics Service 登録ページに移動します。

  • Your SNS Topic ARNには作成したSNSトピックのARNを入力し、
  • Your S3 Bucket Nameには作成したS3バケットの名前を入力します。
  • New IAM Role Name`ですが、これは登録の際、Commerce Analytics Serviceが自動的に作成するRoleの名前です。
    • > AWS MarketplaceがAmazon S3バケットに書き込み、Amazon SNSトピックに通知を発行することを可能にします。 AWS Marketplaceは、このIAMロールでこれらの関連アクションを実行するために、アカウント452565589796を使用します。

上記の入力後、Enrollボタンを押して登録します、

IAM RoleにMarketplaceCommerceAnalyticsRoleという名前のロールが作成されているはずです。

設定を確認

設定が正常に動作しているかどうかを確認します。

AWS CLIで以下のコマンドを実行してみます。

aws marketplacecommerceanalytics generate-data-set \
--data-set-type "customer_subscriber_hourly_monthly_subscriptions" \
--data-set-publication-date "{TODAY'S-DATE}" \
--role-name-arn "{YOUR-ROLE-NAME-ARN}" \
--destination-s3-bucket-name "{YOUR-S3-BUCKET}" \
--destination-s3-prefix "test-prefix" \
--sns-topic-arn "{YOUR-SNS-TOPIC-ARN}" \
--profile {YOUR-PROFILE} \
--region us-east-1
  • --data-set-publication-dateは、ISO-8601形式を使用して現在の日付YYYY-MM-DDT00:00:00Z を指定する必要があります。
  • --role-name-arnは、登録プロセスで受け取ったロールのARNを指定します。
  • --destination-s3-bucket-nameは、作成したS3バケットの名前を指定します。
  • --destination-s3-prefixは、データセットを保存する場所を指定します(ディレクトリ的な)
  • --sns-topic-arnは,作成したSNSトピックのARNを指定します。
  • --profileは,作成したIAMユーザーの権限で動かすAWS Credencialの名前を指定します。
  • --regionは、us-east-1を指定します。
    • AWS MarketplaceCommerce Analytics Service は、米国東部 (バージニア北部) リージョンでのみ利用できる

が、ダメです。

以下のエラーが出ました

An error occurred (ValidationException) when calling the GenerateDataSet operation: User: arn:aws:sts::1111222233334444:assumed-role/MarketplaceCommerceAnalyticsRole/AWSMPBusinessIntelligenceService is not authorized to perform: iam:ListAttachedRolePolicies on resource: role MarketplaceCommerceAnalyticsRole because no identity-based policy allows the iam:ListAttachedRolePolicies action (Service: AmazonIdentityManagement; Status Code: 403; Error Code: AccessDenied; Request ID: ab98903b-dfc8-431d-887a-0c7090f29090; Proxy: null)

MarketplaceCommerceAnalyticsRoleiam:ListAttachedRolePoliciesが許可されていないとのことなので追加してみます。

MarketplaceCommerceAnalyticsRoleに追加されているポリシーで、Statementに以下を追加します。

{
            "Effect": "Allow",
            "Action": [
                "iam:ListAttachedRolePolicies"
            ],
            "Resource": "arn:aws:iam::[[アカウントID]]:role/service-role/MarketplaceCommerceAnalyticsRole"
        },

追加後、もう一度コマンドを実行してみます。

が、またしてもダメです。

An error occurred (ValidationException) when calling the GenerateDataSet operation: Unable to find a policy given role name arn as arn:aws:iam::1111222233334444:role/service-role/MarketplaceCommerceAnalyticsRole, role policy name as MarketplaceCommerceAnalyticsPolicy

というエラーが出ました。

MarketplaceCommerceAnalyticsPolicyという名前のポリシーがないよと。。。

Commerce Analytics Service プログラムに登録した時にできたRoleには、

oneClick_MarketplaceCommerceAnalyticsRole_<<ランダム数字>> といった命名規則のポリシー名が作成されます。

ですので、このポリシーの中身をコピーし、新しくMarketplaceCommerceAnalyticsPolicyポリシーを作りました。

その後コマンドを実行してみると、

{
    "dataSetRequestId": "6625b6fd-3a6e-495c-9a30-3acda650ba91"
}

ようやく成功しました。

ドキュメントにも記載がありますが、dataSetRequestIdが返ってくると正常な応答とのことです。

リクエストしたデータが保存されているか確認

コマンド実行時に指定したS3バケットにレポートファイルが保存されたかどうか確認してみます。

customer_subscriber_hourly_monthly_subscriptions_2022-08-01.csv といったように、

data-set-typeとdata-set-publication-dateに指定した内容のファイルが作成されていると成功です。

SNSでの通知

SNSトピックのサブスクリプションを何か登録し、受信すると、以下のようなメッセージが届きました。

{
  "dataSetRequestId" : "445b8ded-12c6-42d3-aeb4-c8ae1a932665",
  "success" : true,
  "dataSetS3Location" : {
    "bucketName" : "<<保存したバケット名>>",
    "key" : "test-prefix/customer_subscriber_hourly_monthly_subscriptions_2022-08-01.csv"
  },
  "dataSetMetaDataS3Location" : {
    "bucketName" : "<<保存したバケット名>>",
    "key" : "test-prefix/customer_subscriber_hourly_monthly_subscriptions_2022-08-01.meta.json"


  }
}

保存バケットとレポートの場所を示すkey名が記載されていますね。

成功・失敗もわかるので自動化などを取り組む際は活用できそうです。


さまざまなデータセットを出力できるので、マーケットプレイスで販売しているのであればぜひ役に立てたいデータだと思われます。

色々出力して解析してみよう。

参考