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