はじめに
本記事はAWSで提供されているサーバレスサービスを使用し、文章の感情分析および翻訳を行うサービスを構築するハンズオンです。
全3記事の構成となっており、本記事は第3回となります。
- AWSサーバレスアーキテクチャで文章解析サービスを構築する その1
- AWSサーバレスアーキテクチャで文章解析サービスを構築する その2
- AWSサーバレスアーキテクチャで文章解析サービスを構築する その3
構築するアーキテクチャ、使用するサービスなどについては第1回目の記事を参照ください。
注意①
本資料内スクショのAWS管理コンソールのデザインは資料作成当時のものです。
デザインは今後変更される可能性があり、スクショと差異がある場合がありますのでご了承ください。
注意②
今までのハンズオン(前提条件・知識に記載)で実施した手順は基本省略して記載するのでご了承ください。
複雑な手順等は例外として記載する場合があります。
注意③
ハンズオンで作成したリソースについてはハンズオン終了後、各自削除をお願いします。
ゴール
- Amazon API Gateway(以降、API Gatewayと略)の概要が理解できている
- Amazon DynamoDB(以降、DynamoDBと略)の概要が理解できている
- REST APIの概要が理解できている
- リレーショナルデータベースとNoSQLデータベースの違いが理解できている
- API GatewayでREST APIを作成し、実行できる
- ステートマシンからDynamoDBにデータを格納する処理を作成できる
前提条件・知識
- 前回ハンズオンを実施していること
使用サービス紹介
本ハンズオンで触るAWSサービスを説明します。
その他サービスについては以降その都度説明いたします。
Amazon API Gateway
Amazon API Gatewayとは、AWSが提供する、API
の作成および管理を行うことができるフルマネージドサービス
です。
作成したAPIはAmazon S3やAWS Lambda
などのAWSサービスと簡単に統合することができ、バックエンドとして利用することができます。
また、HTTPSリクエストを受け付けるAWS以外のサービスにもリクエストを転送することができます。
名前の通りAPIのゲートウェイ(入り口)となるサービスです。
2015年7月
に一般公開されました。
以下の図は外部から AWS のバックエンドサービス利用を実現する仕組みをグラレコで解説より
用語
用語 | 意味 |
---|---|
API | Application Programming Interfaceの略。主にソフトウェアやプログラム同士を定められたルールに従ってつなぐもののことを指す |
Web API | HTTPなどのWeb技術によってやりとりするAPI |
REST API | REST(Representational State Transfer)の原則に従って作成されたWeb API。この設計原則は現在主流であるが、GraphQLを使用したAPIが注目を集めている |
マネージドサービス | サービスで使用するサーバの管理(セキュリティ、可用性、障害対応など)の一部を委託できるサービス |
フルマネージドサービス | マネージドサービスで提供している内容に加え、より細かく管理業務を委託することができるサービス |
サーバレスサービス | サーバの設置や管理不要(サーバを意識しない)で利用できるサービス |
AWS Lambda | サーバの設置や管理不要でコードを実行できるサーバレスサービス(コンピューティングサービス) |
REST APIの4原則について
REST APIとは先ほど説明した通り、REST(Representational State Transfer)の原則に従って作成されたWeb APIを指します。
この原則は大きく4つに集約されます。
- 原則1:ステートレス
- 過去行ったHTTP通信による状態を記憶しておく必要がありません。
- HTTP通信のリクエストのメッセージに全て必要な情報が含まれており、各HTTP通信は独立、分離しています。
- 原則2:全ての情報(リソース)は汎用的な構文で一意に識別できる
- URIによってリソースの場所を文字列で表現できます。
- そのためURIのパス部分が名詞になる場合が多いです。例を以下に示します。
- URIによってリソースの場所を文字列で表現できます。
- 原則3:リソースを操作する命令の体系が予め定義・共有されている
- HTTPのGETやPOSTなどのメソッドで操作方法を表現します。例を以下に示します。
-
POST /user HTTP/1.1
だとシステムにユーザを登録するようなAPI呼び出しを表します。 -
GET /animal/dogs HTTP/1.1
だと犬の一覧情報を取得するようなAPI呼び出しを表します。
-
- このように、
GET
は取得
、POST
は登録
など操作が定められています。
- HTTPのGETやPOSTなどのメソッドで操作方法を表現します。例を以下に示します。
- 原則4:接続性
- やりとりされる情報内部に、別の情報やその情報の別の状態へのリンクを含めることができます。
- イメージ図はこちらの記事から拝借しました。
Amazon DynamoDB
Amazon DynamoDBとは、AWSが提供する、フルマネージド
・サーバレス
なキーバリュー型NoSQLデータベースサービス
です。
DynamoDBはAmazon.comの現CTO兼副社長のWerner Vogels氏が開発したDynamo
という技術を採用しています。
このDynamo
はショッピングシーズンの大量のトラフィックに対してスケーラビリティと可用性を併せ持ったデータベースが必要、というAmazonからの要望から生まれました。
1桁ミリ秒のパフォーマンス、最大99.999%の高可用性を実現しています。
2012年1月
に一般公開されました。
以下の図は高速で柔軟な NoSQL データベースサービス。Amazon DynamoDB をグラレコで解説より
用語
用語 | 意味 |
---|---|
リレーショナルデータベース | 関連があるデータを表形式で管理するデータベース。関係モデルという理論が基礎となっている。データベース内のデータ操作は主にSQLを使用し行われる |
NoSQLデータベース | リレーショナルデータベース以外のデータベースを指す。年々増加するデータ量、さまざまなデータ形式、サイズに対して柔軟に対応するため誕生した |
概念
DynamoDBの以下の概念についてAWS公式資料DynamoDB の基礎と設計 / DynamoDB Design Practiceを参考に説明します。
- キーバリュー型
- プライマリーキー
- Secondary Index
まず、キーバリュー型
についてです。
DynamoDBはNoSQLデータベースであり、その中でもキーバリュー型
の分類にあたります。
キーバリュー型
はデータをキー
とバリュー(値)
の1対1の単純な構造で保持します。
このような単純な構造であるため、データの取得がしやすく、高速であるという特徴があります。
次に、プライマリーキー
についてです。
プライマリーキー
はデータを一意に識別する項目を指します。
プライマリーキー
にはPartition Key
とSort Key
の2種類があります。
Partition Key
はリレーショナルデータベースでいう、主キーに当たります。
Sort Key
はPartition Key
と組み合わせることでデータを一意にする項目です。
Partition Key
とSort Key
の組み合わせはリレーショナルデータベースでいう、複合主キーに当たります。
Partition Key
とSort Key
を条件にすれば、SQLのWHERE句のようにクエリ(検索)することができるようになります。
しかし、それ以外の項目は条件として指定することができません。
指定できるようにするためには項目をSecondary Index
として指定する必要があります。
最後に、Secondary Index
についてです。
Secondary Index
はLocal Secondary Index(LSI)
とGlobal Secondary Index(GSI)
の2種類があります。
LSI
はSort Key
の代わりとなるKeyを指定することができます。ただし、Partition Key
は同じです。
GSI
はPartition Key
の代わりとなるKeyを指定することができます。テーブルにもう一つ検索可能なPartition Key
(+ Sort Key
も指定可能)を追加するイメージです。ただ、GSI
とした項目の属性は一意でなくても構いません。
以下に例を示します。
PKはPartition Key
、SKはSort Key
、GSI-PKはGSI
のPartition Key
、GSI-SKはGSI
のSort Key
を表します。
Name(PK) | Color(SK) | Season(GSI-SK) | Kind(LSI) | Country(GSI-PK) |
---|---|---|---|---|
Apple | Red | Winter | Fruit | Japan |
Apple | Green | Winter | Fruit | NZ |
Orange | Orange | Summer | Fruit | USA |
Tomato | Red | Winter | Vegetable | Japan |
以上のテーブル設定で検索条件に指定可能な項目は以下になります。
- Name(PK)
- Name(PK) + Color(SK)
- Name(PK) + Kind(LSI)
- Country(GSI-PK)
- Country(GSI-PK) + Season(GSI-SK)
AWSが提供するデータベースサービス
AWSが提供しているデータベースサービスはリレーショナルデータベースサービス
、NoSQLデータベースサービス
の大きく分けて2種類あります。
また、ユースケースごとにさまざまなサービスを提供しています。
-
リレーショナルデータベースサービス
-
NoSQLデータベースサービス
今回ハンズオンで作成する構成
今回は赤枠で囲まれた部分をハンズオンで作成します。
処理の流れとしては以下になります。(前回記事で記載した流れは省略しています)
- Amazon API Gatewayで用意したREST APIを実行し、Amazon S3に日本語文章が記載されたテキストファイルをアップロードする
- EventBridgeで起動したステートマシンは以下の処理を行う
- Amazon Translate、Amazon Comprehendの結果をAmazon DynamoDBに登録する
ハンズオン
S3バケットにファイルをアップロードするREST APIをAPI Gatewayに定義する
IAMロールにポリシーを追加
S3バケットにファイルをアップロードするためには、API Gatewayにアップロードするための権限が必要です。
Step Functionsと同様にIAMロールに必要な権限を付与します。
必要な権限はs3:PutObjectです。
実はこの権限は、第1回目「IAMロールに権限(IAMポリシー)を追加」でIAMロールに付与したAmazonS3FullAccess
ポリシーにすでに含まれています。
実際に当該権限が付与されているか確認します。
画面上部の検索窓にiam
と入力し、表示されたIAM
をクリックしてください。
左側または中央にあるロール
をクリックしてください。
一覧の検索窓にユーザ名を入力し、当該IAMロールを選択します。
許可
タブを選択し、許可ポリシー
一覧に表示されているAmazonS3FullAccess
リンクをクリックしてください。
AmazonS3FullAccess
ポリシーの詳細画面に遷移します。
許可
タブを選択し、このポリシーで定義されている許可
一覧のサービス
蘭に表示されているS3
リンクをクリックしてください。
再び許可
タブを選択し、検索窓にputobject
と入力してください。
このポリシーで定義されている許可
一覧の書き込み
セクションのアクション
蘭にPutObject
が表示されていることを確認してください。
IAMロールに信頼関係の追加
API GatewayにIAMロールの権限の使用を許可するため、信頼ポリシーを追加します。
IAMロールの詳細画面に戻り、信頼関係
タブを選択し、信頼ポリシーを編集
をクリックしてください。
続いて、信頼ポリシーを追加します。既存のStatement
オブジェクトに以下のJsonオブジェクトを追加し、ポリシーを更新
ボタンを押下してください。
{
"Effect": "Allow",
"Principal": {
"Service": "apigateway.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
APIの作成
画面上部の検索窓にapi
と入力し、表示されたAPI Gateway
をクリックしてください。
作成するAPIの種類を選択します。
今回はREST API
を作成します。(プライベートではない)REST API
の構築
ボタンをクリックしてください。
APIのプロトコルや名前などを入力します。
プロトコルを選択する
はREST
になっていることを確認してください。
新しいAPIの作成
は新しいAPI
を選択してください。
つづいて名前と説明
の入力です。
API名
は<ユーザ名>API
としてください。
説明
は入力不要です。
エンドポイントタイプ
はリージョン
を選択してください。他にエッジ最適化
、プライベート
が選択できます。
細かい説明は省略しますが、リージョン
はリージョンにデプロイされるパブリックなAPI、エッジ最適化
は高パフォーマンスなAPI、プライベート
はパブリックからアクセスできないAPIという感じです。
入力し終わったら、画面右下APIの作成
ボタンをクリックしてください。
リソースの作成
フォルダを表すリソースを作成します。
左メニューリソース
が選択されていることを確認し、アクション
プルダウンを選択、リソースの作成
をクリックしてください。
リソース情報を入力します。
リソース名
にbucket
と入力してください。
リソースパス
は{bucket}
と入力してください。
リソースパスを中括弧で指定することでその部分は可変項目になります。
可変項目にしたい場合、この後のURLパスパラメータ
の設定も必要です。
入力し終わったら、画面右下リソースの作成
ボタンをクリックしてください。
作成が終わるとリソースに/{bucket}
が追加されていることを確認し、クリックしてください。
そして、再度アクション
プルダウンを選択、リソースの作成
をクリックしてください。
bucket
リソース配下のリソース情報を入力します。
リソース名
にfolder
と入力してください。
リソースパス
は{folder}
と入力してください。
入力し終わったら、画面右下リソースの作成
ボタンをクリックしてください。
作成が終わるとリソースに/{folder}
が追加されていることを確認し、クリックしてください。
そして、再度アクション
プルダウンを選択、リソースの作成
をクリックしてください。
folder
リソース配下のリソース情報を入力します。
リソース名
にobject
と入力してください。
リソースパス
は{object}
と入力してください。
入力し終わったら、画面右下リソースの作成
ボタンをクリックしてください。
メソッドの作成
リソースへの操作を表すメソッドを作成します。
object
リソースの作成が終わるとリソースに/{bucket}/{folder}/{object}
が追加されていることを確認し、クリックしてください。
そして、アクション
プルダウンを選択、メソッドの作成
をクリックしてください。
/{bucket}/{folder}/{object}
リソース配下にメソッドを選択するプルダウンが表示されます。
PUT
を選択し、チェックマークをクリックしてください。
PUTメソッドの情報を入力します。
統合タイプ
はAWSサービス
を選択してください。
AWSリージョン
はap-northeast-1
を選択してください。
AWSサービス
はSimple Storage Service (S3)
を選択してください。
AWSサブドメイン
は空で構いません。
HTTPメソッド
はPUT
を選択してください。
アクションの種類
はパス上書きの使用
を選択してください。
パス上書き(省略可能)
は{bucket}/{folder}/{object}
と入力してください。
※パスの上書きを使用すると、API GatewayはリクエストをAmazon S3のREST APIに対応するリクエストに変換して転送してくれます。
実行ロール
はIAMロールにポリシーを追加で扱ったIAMロールのARNを入力してください。
コンテンツの処理
はパススルー
を選択してください。
入力し終わったら、画面右下保存
ボタンをクリックしてください。
パラメータマッピング
リクエスト情報を加工し、バックエンドのAWSサービスに渡したり、AWSサービスから受け取った返却値を加工し、APIのレスポンスとして返却する設定を行います。
/{bucket}/{folder}/{object}
リソースのPUT
メソッドを選択した状態で、統合リクエスト
リンクをクリックしてください。
URLパスパラメータ
を選択し、パスの追加
をクリックしてください。
この設定はリソースの作成で指定したパスパラメータを有効にするため必要です。
名前
にbucket
と入力してください。
メソッドの作成のパス上書き(省略可能)
で{bucket}/{folder}/{object}
を指定しました。
この{bucket}
の値と名前
に指定する値を同じにすることでリクエスト時に指定したパスの値が自動的にマッピングされるようになります。
例えば、パス上書き(省略可能)
が{hoge}/{folder}/{object}
である場合、名前もhoge
にしなければ、パスの値がマッピングされず、パス上書き
で指定した値そのままでリクエストされます。
マッピング元
にmethod.request.path.bucket
と入力し、チェックマークをクリックしてください。
末尾部分bucket
はリソースの作成で指定したリソースパス(中括弧は除く)
と一致させる必要があります。
再度パスの追加
をクリックしてください。
名前
にfolder
と入力してください。
マッピング元
にmethod.request.path.folder
と入力し、チェックマークをクリックしてください。
再度パスの追加
をクリックしてください。
名前
にobject
と入力してください。
マッピング元
にmethod.request.path.object
と入力し、チェックマークをクリックしてください。
APIのデプロイ
作成したAPIを実際呼べるようにデプロイを行います。
左メニューリソース
を選択し、アクション
プルダウンを選択、APIのデプロイ
をクリックしてください。
デプロイに関する情報を入力します。
デプロイされるステージ
は[新しいステージ]
を選択してください。
ステージ名
はv1
と入力してください。
入力し終わったら、右下デプロイ
ボタンをクリックしてください。
APIファイルアップロード確認
APIはCloudShell
でcurl
コマンドを叩いて実行します。
CloudShell
はブラウザベースのコマンドラインです。Amazon Linuxベースであり、手軽にShellを実行させることができます。
curl
コマンドはさまざまなプロトコル(HTTPなど)で通信を行うことができるコマンドです。
画面上部の右側にCloudShellのアイコンがあるのでクリックしてください。
CloudShellの右上のアクション
プルダウンをクリックしてください。
ファイルのアップロード
をクリックし、翻訳、感情分析対象のテキストファイルを選択してアップロードしてください。
ls
コマンドでアップロードしたファイルが表示されることを確認してください。
ファイルをアップロードするAPIを実行するcurlコマンドは以下です。CloudShellで実行してください。
APIID
はAPI GatewayのAPI一覧から確認してください。
curl -i --location --request PUT 'https://<APIID>.execute-api.ap-northeast-1.amazonaws.com/v1/<S3バケット名>/uploads/<アップロードしたファイル名>' --data '@<アップロードしたファイル名>'
実行例は以下になります。HTTP/2 200
が表示されたらAPIの実行に成功です。
[cloudshell-user@ip-10-6-53-91 ~]$ curl -i --location --request PUT 'https://<APIID>.execute-api.ap-northeast-1.amazonaws.com/v1/<S3バケット名>/uploads/<アップロードしたファイル名>' --data '@<アップロードしたファイル名>'
HTTP/2 200
date: Mon, 21 Aug 2023 16:10:06 GMT
content-type: application/json
content-length: 0
x-amzn-requestid: xxxxxxxxxxxxxxxxx
x-amz-apigw-id: xxxxxxxxxxxxxxxxx
x-amzn-trace-id: xxxxxxxxxxxxxxxxx
S3バケットのuploads
フォルダに遷移し、ファイルがアップロードされていることを確認してください。
英訳結果、感情分析結果をDynamoDBに格納する
テーブルを設計する
天下り的ですが、今回は以下の項目をテーブルに格納させたいと思います。
実施日時(ExecutionDateTime)(PK)、翻訳後テキスト(TranslatedText)、センチメント(Sentiment)(GSI-PK)
実施日時
はPartition Key
とし、フォーマットはYYYY-MM-DDThh:mm:ss.fffZ
とします。
翻訳後テキスト
は出力文字列をそのまま格納します。
センチメント
は検索項目としたいという想定でGSI
にします。出力文字列をそのまま格納します。
今回はテーブルがシンプルであるため、設計は楽でしたが、複雑な場合、ER図作成などデータモデリングをしていく必要があります。
詳細は以下の記事を参照ください。
テーブルを作成する
設計に従ってDynamoDBのテーブルを作成します。
画面上部にある検索窓にdynamo
と入力し、検索結果にDynamoDB
が表示されるので、クリックしてください。
左メニューテーブル
を選択するとテーブル一覧が表示されます。
一覧右上のテーブルの作成
ボタンをクリックしてください。
作成するテーブルに関する情報を入力します。
テーブルの詳細
セクションの入力です。
テーブル名
は<ユーザー名>Table
にしてください。
パーティションキー
はExecutionDateTime
と入力し、文字列
を選択してください。
ソートキー - オプション
は未入力で構いません。
テーブル設定
セクションの入力です。
テーブル設定
は設定をカスタマイズ
を選択してください。
テーブルクラス
セクションの入力です。
テーブルクラス
はDynamoDB標準
を選択してください。
読み込み/書き込みキャパシティーの設定
セクションの入力です。
キャパシティーモード
はプロビジョンド
を選択してください。
読み込みキャパシティー
のAuto Scaling
はオフ
にしてください。
読み込みキャパシティー
のプロビジョンドキャパシティーユニット
は1
にしてください。
書き込みキャパシティー
のAuto Scaling
はオフ
にしてください。
書き込みキャパシティー
のプロビジョンドキャパシティーユニット
は1
にしてください。
セカンダリインデックス
セクションの入力です。
今回センチメント
をグローバルインデックスに指定するため、グローバルインデックスの作成
ボタンをクリックしてください。
なお、ローカルインデックスの作成
はテーブル作成時のみ実施可能です。必要な場合忘れずに追加してください。(GSIはいつでも追加可能です)
パーティションキー
にSentiment
と入力し、文字列
を選択してください。
ソートキー - オプション
は未入力で構いません。
インデックス名
は自動的に入力されるSentiment-index
であることを確認してください。
属性の射影
はAll
を選択してください。
この値はセカンダリインデックスでの検索結果で何を返却するかを指定します。指定項目はKEYS_ONLY
、INCLUDE
、ALL
の3種類です。
KEYS_ONLY
は文字通り、キーの値のみ返却する設定です。
INCLUDE
はキーの他指定した項目を返却する設定です。
ALL
は検索された行を全て返却する設定です。
入力し終わったら、インデックスの作成
ボタンをクリックしてください。
それ以降の値はデフォルト値で構いません。
画面最下部右下のテーブルの作成
ボタンをクリックしてください。
テーブル一覧に遷移します。テーブルの状態
がアクティブ
になれば作成完了です。
さて、作成するテーブルに格納したい情報は以下でした。
しかし、テーブル作成時に翻訳後テキスト
について何も指定はせず、実施日時(PK)
とセンチメント(GSI-PK)
のみ入力しました。
リレーショナルデータベースに慣れていると翻訳後テキスト
はテーブルに格納できないのではないかと感じます。本当でしょうか?
実施日時(ExecutionDateTime)(PK)、翻訳後テキスト(TranslatedText)、センチメント(Sentiment)(GSI-PK)
DynamoDBはキーバリュー型のNoSQLでありスキーマレスです。リレーショナルデータベースとは異なり、格納することができます。
以下の通り、プライマリーキー
以外は何を入力しても構わないのです。
結果を格納する
テーブルができたのでStep Functionsのステートマシンから必要なデータを格納するステートを追加しましょう。
前回ハンズオンで作成したステートマシンのWorkflow Studio
に移動してください。
次に、左メニューでアクション
タブを選択し、検索窓にdynamo
と入力してください。
検索結果のPutItem
ステートをParallel
の箱の下にそれぞれドラッグ&ドロップしてください。
Amazon Translate
の翻訳結果を格納する処理を追加します。
Amazon Translate
のステートを選択してください。
APIパラメータ
のJsonにどのテーブルのどのカラムにどのような値をINSERTするか定義します。
Jsonの構文は以下の通りです。
【データ型】
は文字列や数値を表します。S
は文字列、N
は数値を表します。その他は以下を参照ください。
{
"TableName": "【テーブル名】",
"Item": {
"【カラム名】": {
"【データ型】": "【値】"
}
}
}
格納するデータの元となるParallelステート後のJsonを以下に示します。
[
{
"SourceLanguageCode": "ja",
"TargetLanguageCode": "en",
"TranslatedText": "Good morning!"
},
{
"Sentiment": "POSITIVE",
"SentimentScore": {
"Mixed": 0.000012929639,
"Negative": 0.00003391724,
"Neutral": 0.00018313748,
"Positive": 0.99977
}
}
]
翻訳後テキスト(TranslatedText)
、センチメント(Sentiment)(GSI-PK)
は上記Jsonから取得できそうですが、実施日時(ExecutionDateTime)(PK)
はどのように取得するのでしょうか?
方法は色々ありますが、今回はステートマシンのContextオブジェクトから取得します。
Contextオブジェクトはステートマシン起動時に生成されるオブジェクトでステートマシンのメタ情報が含まれます。
この情報にはExecution.StartTime
という、ステートマシンの起動時間(UTC)が含まれているのでこれを格納することにします。
Contextオブジェクトへのアクセスは$$
ですることができます。
以下が今回APIパラメータに指定する値です。入力してください。
{
"TableName": "【テーブル名】",
"Item": {
"ExecutionDateTime": {
"S.$": "$$.Execution.StartTime"
},
"TranslatedText": {
"S.$": "$.[0].TranslatedText"
},
"Sentiment": {
"S.$": "$.[1].Sentiment"
}
}
}
入力が終わったら、ステートマシンの状態を保存してください。
IAMロールにポリシーを追加
このままではステートマシンにDynamoDBを操作する権限がないため実行に失敗します。
ステートマシンに付与しているIAMロールに必要な権限を付与します。
画面上部の検索窓にiam
と入力し、表示されたIAM
をクリックしてください。
左側または中央にあるロール
をクリックしてください。
一覧の検索窓にユーザ名を入力し、当該IAMロールを選択します。
許可
タブを選択すると許可ポリシー
が表示されます。
その右上の許可を追加
プルダウンを選択し、ポリシーのアタッチ
をクリックしてください。
検索窓にdynamo
と入力し、Enterしてください。
ポリシーAmazonDynamoDBFullAccess
が表示されるのでチェックし、右下の許可を追加
をクリックしてください。
許可ポリシー
の一覧にAmazonDynamoDBFullAccess
が表示されたら追加完了です。
処理確認
今まで作成したものが期待通り動くか確認します。
最初にAPI Gatewayで作成したファイルアップロードAPIの実行です。
APIファイルアップロード確認と同様にCloudShellでcurlコマンドを実行し、S3にファイルをアップロードしてください。
次に、ステートマシンの実行の確認です。
作成したステートマシンの直近の実行結果を確認し、全てのステートが成功していることを確認してください。
最後に、DynamoDBにデータが格納されているかの確認です。
DynamoDBのダッシュボードに遷移し、左メニュー項目を探索
をクリックしてください。
テーブル
で自分が作成したテーブルを選択し、期待通りのデータが表示されていることを確認してください。
参考
- https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html
- https://tenshoku-careerchange.jp/column/3737/
- https://dev.classmethod.jp/articles/aws-release-durable-redis-amazon-memorydb-for-redis/
- https://tech.nri-net.com/entry/aws_history_and_chronology_all
- https://xtech.nikkei.com/it/article/NEWS/20120119/378871/