AWS学習10日目:EventBridge × Lambda × DynamoDB
今日のテーマ
AWS学習10日目は、これまで個別に学んできたAWSサービスを組み合わせました。
今回作った構成は、次のとおりです。
EventBridgeをきっかけにLambdaを実行し、LambdaからDynamoDBへアクセスするところまで進みました。
今日できたこと
- AWSサービス連携に関する基本単語を学習した
- EventBridgeからLambdaを実行した
- LambdaからDynamoDBへアクセスした
- Lambdaのexecution roleへDynamoDB操作権限を付与した
- CloudWatch LogsでLambdaの実行ログを確認した
- EventBridge・Lambda・DynamoDB・CloudWatch Logsの関係を確認した
- 権限設定がサービス連携に必要であることを体験した
今日のハンズオン
基本単語学習
今日覚えた用語は次の10個です。
| 用語 | 現時点での理解 |
|---|---|
| execution role | LambdaがAWSサービスへアクセスするために使用する権限 |
| permission | IAM policyなどで定義する操作の許可 |
| PutItem | DynamoDBへitemを追加・上書きする操作 |
| GetItem | primary keyを指定してDynamoDBからitemを1件取得する操作 |
| resource | AWS上で操作対象となるもの |
| integration | AWSサービス同士を連携させること |
| trigger | Lambdaを実行するきっかけ |
| execution | Lambdaが実行される1回分の単位 |
| log | 実行結果や発生した出来事の記録 |
| architecture | システム全体の構成・設計 |
integrationとは何か
integrationは、複数のシステムやAWSサービスを連携させることです。
今回の構成には、複数のintegrationがあります。
今回確認したintegration
| 連携 | 内容 |
|---|---|
| EventBridge → Lambda | スケジュールをきっかけに関数を実行 |
| Lambda → DynamoDB | コードからitemを追加・取得 |
| Lambda → CloudWatch Logs | 実行内容やエラーを記録 |
triggerとexecutionの関係
triggerは、Lambdaを動かすきっかけです。
executionは、そのきっかけによってLambdaが実際に動いた1回分を表します。
今回の場合、EventBridgeのスケジュールがtriggerです。
スケジュール条件を満たすたびにLambdaが実行され、その1回ずつがexecutionになります。
| 用語 | 今回の例 |
|---|---|
| trigger | EventBridgeのスケジュール |
| execution | Lambdaが1回動いたこと |
| log | その実行で何が起きたかの記録 |
execution roleとは何か
LambdaがDynamoDBへアクセスするためには、execution roleに必要な権限を付与する必要があります。
LambdaのコードにDynamoDB操作を記述しただけでは、実際にアクセスできるとは限りません。
現時点での理解
execution roleは、LambdaがDynamoDBなどのAWSサービスへアクセスするときに使用する権限。
例えば、LambdaからDynamoDBのitemを取得したい場合、execution roleにはGetItemを許可するpermissionが必要です。
permissionとは何か
permissionは、AWS上でどの操作を許可するかを表します。
IAM policyには、主に次のような情報が記述されます。
| 項目 | 意味 |
|---|---|
| Effect | 許可するか拒否するか |
| Action | どの操作を対象にするか |
| Resource | どのAWSリソースを対象にするか |
概念的には、次のような内容です。
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem"
],
"Resource": "対象のDynamoDBテーブル"
}
PutItemとGetItem
今回学んだDynamoDB操作は、PutItemとGetItemです。
PutItem
PutItemは、DynamoDBへitemを追加または上書きする操作です。
同じprimary keyを持つitemがすでに存在する場合、条件を付けなければ上書きされる可能性があります。
GetItem
GetItemは、primary keyを指定してitemを1件取得する操作です。
違い
| 操作 | 役割 |
|---|---|
| PutItem | itemを追加・上書きする |
| GetItem | primary keyを使ってitemを1件取得する |
resourceとは何か
resourceは、AWS上で作成・管理・操作する対象です。
今回の構成では、次のようなものがresourceに該当します。
- Lambda function
- DynamoDB table
- EventBridge rule
- IAM role
- CloudWatch Logsのlog group
permissionを設定するときは、どのresourceに対して操作を許可するかを考える必要があります。
CloudWatch Logsで確認したこと
Lambdaを実行したあと、CloudWatch Logsで実行内容を確認しました。
今回のログ確認では、次の流れを追いました。
ハンズオン
今日作ったarchitecture
EventBridgeからLambdaを実行
前回と同じように、EventBridgeをtriggerとしてLambdaを実行しました。
LambdaからDynamoDBへアクセス
Lambdaの処理からDynamoDBへアクセスしました。
そのために、Lambdaのexecution roleへDynamoDB操作のpermissionを付与しました。
CloudWatch Logsで確認
最後に、Lambdaの実行ログを確認しました。
つまずいたこと
EventBridgeのroleを使い回したことで、最初は正しく動かなかった
今回のつまずきは、前回作成したEventBridge用のroleをそのまま使用したことで、最初は期待どおりに連携できなかったことです。
AWSでは、roleを使い回せる場合もあります。
ただし、roleに付与されているpermissionや、どのサービスがそのroleを利用できるかを確認する必要があります。
今回学んだこと
- どのpermissionが付いているか確認する
- どのサービスがroleを利用できるか確認する
- 以前使えたroleでも、今回の用途に合うとは限らない
- エラー時はCloudWatch Logsや権限設定を確認する
LifeOSではどう使えそうか
今日作った構成は、LifeOSの自動処理の原型として使えそうです。
朝のタスク確認を行う例
学習記録を自動保存する例
LifeOSでの役割
| サービス | LifeOSでの用途 |
|---|---|
| EventBridge | 定期処理を開始する |
| Lambda | タスク確認やデータ保存を行う |
| DynamoDB | タスクや学習記録を保存する |
| IAM | 必要な操作だけを許可する |
| CloudWatch Logs | 自動処理が成功したか確認する |
資格学習として覚えておきたいこと
Cloud Practitionerだけでなく、SAAやDeveloper Associateに向けても、今日の内容は重要そうです。
| ポイント | 内容 |
|---|---|
| execution role | LambdaがAWSサービスへアクセスするための権限 |
| permission | 許可するAWS操作 |
| PutItem | DynamoDBへitemを追加・上書き |
| GetItem | primary keyでitemを1件取得 |
| resource | AWS上の操作対象 |
| integration | AWSサービス同士の連携 |
| trigger | Lambda実行のきっかけ |
| execution | Lambdaの1回分の実行 |
| log | 実行内容やエラーの記録 |
| architecture | サービス全体の構成・設計 |
特に重要そうな比較
| 比較 | 覚えておきたいこと |
|---|---|
| triggerとexecution | triggerはきっかけ、executionは1回の実行 |
| execution roleとpermission | roleは権限を引き受ける仕組み、permissionは操作許可 |
| PutItemとGetItem | 追加・上書きと、1件取得 |
| codeとpermission | コードに処理を書いても、権限がなければ実行できない |
| LambdaとDynamoDB | Lambdaは処理、DynamoDBはデータ保存 |
| architectureとservice | architectureは複数serviceの役割と接続を含む全体設計 |
現時点でまだ曖昧なこと
- IAM roleの信頼ポリシー
- EventBridgeがLambdaを呼び出す権限の詳細
- DynamoDB policyのResource指定
- PutItemで既存itemを上書きしない方法
- LambdaでGetItemの結果を扱う方法
- エラー時の再実行や通知方法
今日の振り返り
今日できるようになったこと
- EventBridgeからLambdaを実行できる
- LambdaからDynamoDBへアクセスできる
- Lambdaのexecution roleへpermissionを追加できる
- PutItemとGetItemの役割を説明できる
- architectureとして複数サービスの関係を考え始められる
- roleの設定が連携結果に影響すると理解できる
次回
次回は、 API Gateway を学びます。
Discussion