[新機能]データセットへの新たなアクセス手段 AWS Data Exchange for APIsが発表されました #reinvent

2021.12.02

みなさんこんにちは、杉金です。

AWS Data Exchangeから新機能としてAWS Data Exchange for APIsが発表されました!概要を紹介しつつ、実際に触れてみようと思います。

AWS公式アナウンス

AWS公式AWS Data Exchange for APIs紹介ブログ

そもそもAWS Data Exchangeとは

AWS Data Exchangeは、Reuters、Foursquare、Change Healthcare、Vortexa、IMDbなどのサードパーティが提供するデータセットをAmazon Simple Storage Service(Amazon S3)を介して購読・利用できるサービスです。欲しいカタログをサブスクライブして必要データをまとめて自身が持つS3バケットにエクスポートできます。データセットを利用するだけでなく、データを提供する側(データプロバイダー)になることも可能です。

サービス利用方法について以下のブログで紹介されています。

以下のブログでは本サービスのセッションレポートを紹介していまして、サービス提供の背景などが分かります。

AWS Data Exchange for APIsとは

サードパーティのデータセットを利用する際に、一定量のデータを処理・分析をするのではなく、少量の特定データだけ頻繁にやりとりしたいケースもあります。その場合に今回発表されたAWS Data Exchange for APIsの出番になります。AWS SDKを使用してRESTfulまたはGraphQL APIでAWS Data Exchange for APIsに対してアクセスを行い、同期的にデータを取得します。APIへのアクセスはIAMユーザで管理されます。

試してみる

実際に試してみましょう。AWSからテスト用カタログが提供されていますのでそちらを使います。まずはAWSコンソールにログインして「AWS Data Exchange」サービスの画面に移動します。その後に画面左の「カタログの検索」を選択するか、右側のオレンジ色のボタン「利用可能なデータ製品を調べる」を選びます。どちらを選んでも同じ画面に移動します。

カタログの検索ボックスから必要なカタログを検索します。今回はAWSから提供されているテスト用カタログを使用しますので検索ボックスから「api test product」と入力すると以下の画像にあるテスト用カタログが表示されますので、こちらを選択します。

カタログについての詳細画面が表示されますので、内容をよく読んで「サブスクリプションを続行する」を選択します。実際に利用する際はサブスクリプション料金だけでなく、使用するにあたってのライセンスまわりの注意点が無いかもチェックするとよいでしょう。

サブスクリプションが完了した旨の画面に変わります。

画面をスクロールすると自動更新についての記載があります。今回はテスト用ですので自動更新なしにして「サブスクライブ」を選択します。

AWS Data Exchangeコンソールのトップに戻り、サブスクリプションからサブスクライブしたカタログが表示されていることが確認できます。対象のカタログを選び、アクセス方法を確認します。

データセットはリビジョン単位に分かれますのでリビジョンを選びます。

APIアセットを選びます。

アセットの概要が表示されます。

ページをスクロールするとAWS CLIでのサンプルアクセス方法がありますのでこれをコピーします。

CloudShellに貼り付けて実行してみましょう。

Usageエラーとなりました。エラーになっても焦らず、とりあえず落ち着きましょう。
どうやらサブコマンドであるsend-api-assetが無いようですね。

以下のAWS CLIv2の変更履歴を確認すると2.4.3でsend-api-assetに対応したようです。(CLIv1は未対応)

https://github.com/aws/aws-cli/blob/v2/CHANGELOG.rst

CloudShellのAWS CLIのバージョンを見てみましょう。

[cloudshell-user@ip-10-0-135-202 ~]$ aws --version
aws-cli/2.2.43 Python/3.8.8 Linux/4.14.248-189.473.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off

2.4.3より前ですね。ということでaws cliをバージョンアップしましょう。

wget https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip
unzip awscli-exe-linux-x86_64.zip 
sudo ./aws/install --update
aws --version

再度バージョンを確認します。

[cloudshell-user@ip-10-0-135-202 ~]$ aws --version
aws-cli/2.4.4 Python/3.8.8 Linux/4.14.248-189.473.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off

バージョンアップしました。それでは気を取り直してリトライします。
お試しですので必須ではないオプションもついでに取り除きます。

aws dataexchange send-api-asset \
   --data-set-id 8d494cba5e4720e5f6072e280daf70a8 \
   --revision-id b655d5be3da04fcbdca21a5a2932d789 \
   --asset-id 8550cfab16b444a794402f2c3f11eae1 \
   --method POST

結果が返ってきました。結果の中身にアクセス元のデータが多分に含まれてますので結果にぼかしを入れています。気になる方は試してみてください。

新機能あるあるですが、利用する際はAWS SDKも本機能に対応しているかのバージョン確認が必要です。
たとえばLambda(Python)で利用できるboto3バージョンも執筆時点では本機能に対応していないため、Lambda Layerを使ってboto3とbotocoreのバージョンを上げる必要があります。バージョンアップ方法は以下の記事が参考になります。

Lambdaのランタイムバージョン情報
https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html

boto3の変更履歴:本機能は1.20.16以降で対応
https://github.com/boto/boto3/blob/develop/CHANGELOG.rst

利用料

AWS Data Exchangeの利用料はデータ提供側(Data Providers)とデータ利用側(Data Subscribers)で異なります。Data Subscribersの場合は以下の利用料が発生します。

  • サブスクリプション料金
  • データ転送

詳細は以下の料金ページをご確認ください。

https://aws.amazon.com/data-exchange/pricing/

最後に

AWS Data Exchange for APIsを使ってみました。普段あまり利用しないサービスですので使い方に最初苦戦しましたが、使い方が分かるとシンプルなサービスなんだなということが理解できました。カタログを検索すると意外と無料で使えるものがあって、自動更新と料金改定に注意すれば上手く活用できる場はありそうです。映画好きなのでIMDbさんのカタログ使ってみようかなと思いました。今回は利用する側でしたが、データプロバイダーとして名乗りを上げるのも面白そうです。色々と夢が膨らむサービスですね!