
AWS Marketplace Commerce Analytics Serviceを使ってS3に販売者レポートを保存する
この記事は公開されてから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トピックを設定
データセットが利用可能になったり、エラーが発生したりしたときに、この作成したトピックにメッセージを発行して通知できるようにします。
作成した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)
MarketplaceCommerceAnalyticsRoleにiam: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名が記載されていますね。
成功・失敗もわかるので自動化などを取り組む際は活用できそうです。
さまざまなデータセットを出力できるので、マーケットプレイスで販売しているのであればぜひ役に立てたいデータだと思われます。
色々出力して解析してみよう。






