[アップデート] DynamoDBの標準機能でS3から新規テーブルへのデータインポートが可能になりました!

待望のアップデートなのでは!!
2022.08.19

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

本日のアップデートによりS3から直接DynamoDBの新規テーブルへのデータインポートが可能になりました!

S3からのデータインポート

これまでDynamoDBからS3にエクスポートする機能は提供されていましたが、インポートする機能は提供されていませんでした。そのため、S3からインポートさせたい場合にはユーザー側でLambdaやData Pipeline、規模によってはEMRといったものを実装する必要がありました。

今回のアップデートによって、ユーザー側でインポートのためのコードを書く必要もなければ、追加のリソースの必要もなくなりました!やったね!

データ移行、テスト環境の構築、ディザスタリカバリーなどなど様々なユースケースでの利用ができそうです。

データのインポート

  • インポート先は新規テーブルです。既存テーブルへのインポートはサポートされていません
  • 新規テーブルへのインポートの際、WCUは消費されません
    • 大量のデータをインポートするためにWCUを余分にプロビジョニングする必要はありません

インポート可能なデータフォーマット

インポート可能なデータフォーマットは以下のとおりです。

  • DynamoDB JSON
  • Amazon Ion
  • CSV

データ圧縮については以下に対応しています。

  • 非圧縮
  • GZIP
  • ZSTD

必要なIAM権限

データのインポートにはS3、DynamoDBのほかにCloudWach Logs、必要に応じてKMSの権限が必要になります。詳細については公式ドキュメントを参照ください。

料金

S3からDynamoDBへのインポートに掛かる料金は以下のとおりです。従来の非標準機能でのインポートとコスト比較する際には、標準機能ではWCUが消費されない点を考慮に含めて検討いただくのが良いと思います。

  • 東京リージョン
    • GBあたり $0.171

データインポートの料金はソースデータの非圧縮サイズに基づく点はご注意ください。また、インポートの途中で失敗した場合も、処理されたデータは課金の対象となります。

注意事項

  • 同時実行可能なインポートジョブ
    • 最大50件
    • 合計インポートサイズはリージョンによって異なります
      • バージニア、オレゴン、アイルランド: 合計15TBまで
      • 上記以外のリージョン: 合計1TBまで
  • 各インポートジョブの最大オブジェクト数は5000
  • インポートデータの解析中のエラーはCloudWatch Logsに出力されますが、ログエントリが10,000を超えるとログの記録は停止されます
    • ログの記録は停止されますがインポート処理は継続されています

やってみる

それでは早速、東京リージョンで検証しました。今回は以下のようなCSVファイルを用意しました。また、データインポートの実行については、当該ファイルの読み込みに必要な権限を有しているIAMロールで行います。

Name,PhoneNumber,City,Occupation
Sam,(949) 555-6701,Irvine,Solutions Architect
Vinod,(949) 555-6702,Los Angeles,Solutions Architect
Jeff,(949) 555-6703,Seattle,AWS Evangelist
Jane,(949) 555-6704,Chicago,Developer
Sean,(949) 555-6705,Chicago,Developer
Mary,(949) 555-6706,Chicago,Developer
Kate,(949) 555-6707,Chicago,Developer

まず、AWSコンソールよりDynamoDBのメニューを開いてみますと、S3 からのインポートのメニューが追加されていますので、これをクリックします。

次にS3からインポートをクリックします。

次にインポートオプションを設定です。今回はソースS3URLで先程のCSVファイルを指定していますが、特定のファイルではなくバケット内のパスで指定した場合はその配下のファイルすべてが対象になります。

インポートファイルのフォーマットを選び、CSVの場合はヘッダーや区切り文字を指定することも可能です。指定できましたら次へをクリックします。

次に送信先テーブルを設定します。任意のテーブル名を入力し、パーティションキーを指定します。今回はNameを設定しています。必要に応じてソートキーも同様に設定しますが今回はパーティションキーのみです。

そしてテーブル設定に進みます。今回はデフォルト設定を採用していますが、デフォルト設定だとキャパシティモードはプロビジョンドになりますので、オンデマンドにしたい場合はカスタマイズを選択します。カスタマイズ可能な項目は以下のとおりです。

最後に設定内容を確認してインポートを実行します。

しばらく待つとインポートが完了になりました。

テーブルを確認すると問題なくインポートされています。

めちゃめちゃ簡単ですね!すばらしい!

まとめ

  • DynamoDBの標準機能だけでS3からDynamoDBへのインポートが可能になりました
    • インポート先は新規テーブルです。既存テーブルへのインポートには対応していません。
  • 料金はGBあたり $0.171
    • 標準機能によるインポートはWCUを消費しません
  • フォーマットはDynamoDB JSON、Amazon Ion、CSVの3パターン
  • GZIP,ZSTDで圧縮されているファイルもインポート可能
  • S3のパス指定はバケット、バケット内のパス、特定のファイルで指定可能

待望のアップデートではないかと思います!これまでユーザー実装している方は一度お試しいただき、問題なく使えそうであればフルマネージドなアーキテクチャへの変更を検討してみては如何でしょうか!

参考