「Amazon S3」にアップロードしたCSVファイルを「Amazon DynamoDB」に自動登録する「AWS Lambda」関数の作り方AWSチートシート

AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、「AWS Lambda」を使って「Amazon S3」にアップロードしたCSVを「Amazon DynamoDB」に自動登録する方法を紹介する。

» 2021年09月24日 05時00分 公開
[天野盛介東京ITスクール]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は、「AWS Lambda」を使って「Amazon S3」にアップロードしたCSVファイルを「Amazon DynamoDB」に自動登録する方法を紹介します。

 DynamoDBは、メンテナンスや管理、運用、スケーリングをAWSが行うフルマネージドNoSQLデータベースサービスです。主なユースケースとして、Webやスマホアプリのユーザー情報、セッション情報の管理、広告やゲームのユーザー行動履歴管理などがあります。

 このDynamoDBを利用しているとたびたび出くわすのが「CSV形式のデータを一括でDynamoDBテーブルに取り込みたい」というシーンです。こちらの実現方法として、今回はLambdaとS3を利用します。

DynamoDBへのCSVファイル登録手順と構成

 今回行うDynamoDBへのCSV登録は図1のような構成です。

図1 DynamoDBにCSVファイルをインポートする構成

 下記の手順に沿って作業します。

  1. DynamoDBテーブルの作成
  2. S3バケットを作成してCSVファイルをアップロード
  3. Lambda関数が利用する「AWS Identity and Access Management」(IAM)ロールの作成
  4. DynamoDBにデータを登録するLambda関数の作成
  5. 作成したLambda関数のテスト
  6. S3バケットでイベントトリガーを設定

【ステップ1】DynamoDBテーブルの作成

 DynamoDBコンソールから「テーブルの作成」をクリックしてテーブル作成画面(図2)に遷移し、次の通りに値を設定します。

  • テーブル名:employee_table
  • パーティションキー:id

図2 DynamoDBのテーブル作成

 ソートキーの指定は任意なので今回は省略し、その他の設定もデフォルトのままで「テーブルの作成」をクリックします。

 数十秒〜数分でテーブルの作成が完了しステータスが「Active」になっていることを確認できます。

図3 作成したDynamoDBテーブル

【ステップ2】S3バケットを作成してCSVファイルをアップロード

 今度はS3ダッシュボードに遷移し、任意の名前を入力し、「バケットの作成」ボタンでS3バケットを作成します。

 バケットの作成が完了したらDynamoDBにインポートするCSVファイルをアップロードします。

 作成したバケット名をクリックし、「アップロード」ボタンでファイルをアップロードします。

図4 S3バケットにアップロードされたCSVファイル

 本稿でアップロードした「employee.csv」は次のような内容です。

1,杉本,男,営業部
2,徳永,男,人事部
3,北田,女,システム部
4,赤松,女,システム部
5,志賀,男,総務部
6,藤原,女,システム部

【ステップ3】Lambda関数が利用するIAMロールの作成

 Lambda関数の実行に必要となるIAMロールを作成します。

 IAMダッシュボードから「ロール」→「ロールの作成」とクリックして遷移した画面で、次のように選択して「次のステップ:アクセス権限」に進みます。

  • エンティティの種類:AWSサービス
  • 一般的なユースケース:Lambda

図5 IAMロールのエンティティとユースケースを選択

 IAMロールにアタッチするIAMポリシーは、以下のAWS管理ポリシーとユーザー管理ポリシーを指定します。

  • AWS管理ポリシー
    • AWSLambdaBasicExecutionRole
    • AWSLambdaInvocation-DynamoDB
    • AmazonS3ReadOnlyAccess

 ユーザー管理ポリシーは自分で作成する必要があります。

  • ユーザー管理ポリシー
    • 名前:dynamodb-put-batchwrite
    • アクセス権限:以下のポリシーを付与
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Resource": "*",
            "Action": [
                "dynamodb:PutItem",
                "dynamodb:BatchWriteItem"
            ]
        }
    ]
}

 最後にロール名を指定して「ロールの作成」をクリックすれば、ステップ3は完了です。

  • ロール名:lambda-import-csv-into-dynamodb

図6 ロール名を指定してIAMロールを作成

【ステップ4】DynamoDBにデータを登録するLambda関数の作成

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。