西村祐二(106)41この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。!大阪オフィスの西村祐二です。開発環境で使っていたデータを本番環境など別環境でも使いたい場面はよくあると思います。私もあるAWSアカウント上にあるDynamoDBの特定のデータを別のアカウントのDynamoDBへコピーしたい場面に出くわしましたので、Lambda+SQSを使ってDynamoDBの負荷をあげずにコピーする仕組みを作ってみました。※今回紹介する方法以外にも色んな方法があります。こんな方法もあるんだな程度で考えてもらえれば幸いです。個人的に思うこの構成の良さそうな点をあげてみます。アカウントを跨ぐときの設定がSQSで許可するだけで簡単ある程度速度調整ができる(今回は負荷をあげないようにゆっくりコピーするようにしているが速くもできる)コスト削減できるかも?ただ、以下を考慮しないといけないです。複数回DynamoDBに書き込まれても大丈夫なように考慮するLambdaが起動しまくることを考慮するでは、さっそくやっていきましょう。主な作業コピー先のDynamoDBテーブル作成SQSの設定SQSをトリガーとしたLambdaの作成コピー元のDynamoDBからデータを取得し、コピー先アカウントのSQSへputするスクリプト作成コピー元アカウントのDynamoDBテーブル(アカウントA)テストデータとして、ユーザ情報をもつテーブルがあるとします。その中の特定のデータだけ別のアカウントへコピーしたいというシナリオです。プライマリキーは「userid」としています。コピー先のDynamoDBテーブル(アカウントB)コピー元と同じテーブルを作成しておきます。プライマリキーは「userid」として作成しています。SQSの設定(アカウントB)別のAWSアカウント(アカウントA)からのアクセスを受け付けるSQSキューを作成します。▼「test」というキューを作成します。他の値はデフォルトのままです。▼「アクセス許可の追加」をクリックし、別アカウントからキューにアクセスできるようにします。▼12桁のAWSアカウントを入力し、許可するアクションを設定します。今回はすべてアクションを許可しています。▼プリンシパルの値がrootで設定されているので、適切なIAMユーザに変更しておくのがいいかと思います。Lambdaの作成(アカウントB)SQSをトリガーとしたコピー先のDynamoDBテーブルにputするLambdaを作成します。LambdaのポリシーにDynamoDBとSQSを実行する権限を付与しておいてください。ちなみに、LambdaからSQSを実行するためのマネージドポリシーがあります。「AWSLambdaSQSQueueExecutionRole」Lambdaのタイムアウト時間はトリガーに設定したSQSのキューの「デフォルトの可視性タイムアウト」の値以上に設定する必要があります。今回は30秒に設定しているので、Lambdaのタイムアウト時間を30秒に設定します。DynamoDBへの書き込み速度を調整します。同時実行数を「1」にしておくそうしないと複数のLambdaが並列に実行されて、DynamoDBの負荷があがるまた、同時実行の制限に引っかかり、他のLambdaに影響与える可能性があるトリガーとなるSQSのバッチサイズを「1」にしておくLambdaが複数のデータを取得しないように制限DynamoDBの負荷をあげないように1アイテムずつputさせるためDynamoDBへputするプログラムをpythonで作成します。今回は定期的にコピーを行う予定がなかったので、ローカルでの実行を想定しています。ディレクトリ構成は下記のようになっています。別アカウントにコピーしたいデータのキーを行ごとにテキストファイル(get_key_list.txt)に書き出しておきます。get_key_list.txtプログラムはpythonで作成します。main()13行目コピー元のDynamoDBテーブル名を指定します。19行目コピー先のSQSキュー名を指定します。コピー元の負荷もなるべくあげたくなかったので、1アイテム取得し、SQSにputした後、1秒のスリープ処理を入れています。data_put_sqs.pyアカウントAのコピー元のDynamoDBの負荷状況をみてみます。今回3000アイテムほどコピーしましたが、コピー元のDyanamoDBの読み込みキャパシティは低い値で一定した負荷でコピーすることができました。(へこんでいる部分はテスト実行したところの間になります。)アカウントBのコピー先のDynamoDBの負荷状況をみてみます。こちらも同様にコピー先のDyanamoDBの書き込みキャパシティは一定の低い負荷でコピーすることができました。(へこんでいる部分はテスト実行したところの間になります。)さいごにいかがだったでしょうか。Lambda+SQSを使ってDynamoDBの特定のデータを負荷をあげずに別アカウントのDynamoDBへコピー(移行)する仕組みを作ってみました。誰かの参考になれば幸いです。1,061,452大阪オフィス所属。サーバレスに興味があります。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。濱田孝治416re:Invnetの動画検索でもめちゃくちゃ便利ですが、その他ブログやホワイトペーパーやGitHubも横断検索できるので、是非一度使ってみてください。CAFEの他、NTTデータとセブンイレブンの取り組みや、サインポスト、Zippinなどの各社と流通・小売業との連携を業界マップに作成してみました。泰雨111皆さん、こんにちは。コンサル部のテウです。2020年もあっという間に2ヶ月が経ちました。今年こそ機械学習に入門しようぜ!!って決心された方もいらっしゃると思います。入門できる方法をご紹介させて頂きたいと思います。本記事の手順通り、ランチタイム等の時間を活かして、手軽に入門してみてください。濱田孝治416re:Invnetの動画検索でもめちゃくちゃ便利ですが、その他ブログやホワイトペーパーやGitHubも横断検索できるので、是非一度使ってみてください。夏目祐樹414こんにちは、CX事業本部の夏目です。MacのタッチバーのタッチIDが非常に便利なのですが、Terminalでsudoを叩かないと行けないときに使えたらなぁと思ったので、情報を共有します。臼田佳祐296ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介257SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。