Slide 1

Slide 1 text

第15回 雲勉LT【オンライン】 Amazon EventBridge Pipesのご紹介、 SQSのメッセージをECSに配信する

Slide 2

Slide 2 text

0.講師⾃⼰紹介 2 n 名前 • ⻘⽊ 侑甫 (あおき ゆうすけ) • カスタマー⽀援事業部インフラセクション構築グループ • 新卒からエンジニアで、アイレットで4社⽬ • 趣味はポーカー • EventBridgeやLambdaなどサーバレス系のサービスが好き • 資格はまだまだ取得中

Slide 3

Slide 3 text

アジェンダ 3 0. ⾃⼰紹介 1. EventBridge Pipesについて 2. EventBridge Pipesを使⽤してみた 3. EventBridge Pipes まとめ

Slide 4

Slide 4 text

1. EventBridge Pipesについて 4

Slide 5

Slide 5 text

1.初めに 5 • EventBridge Pipesというサービスがあることに気がつく • EventBridge Pipesというサービスのユースケースを考えてみたり⾊々触りたい・・・ • 仮想要件 • スマホアプリを作成している • スマホアプリはAPI Gateway / Lambda / RDS構成で構成されている • 別のシステムからスマホアプリで表⽰させたい • 別のシステムはSQSに連携したい内容をメッセージで置くところまで実装してくれる • ここから、RDSにメッセージをおくまでどうするかを考える

Slide 6

Slide 6 text

2. EventBridge Pipesを使⽤してみた 6 n 構成図 n 考えた構成 n ネットワーク構成は考慮してません

Slide 7

Slide 7 text

1. EventBridge Pipesについて 7 • 1-1. EventBridge Pipesとはどんなサービス︖ • EventBridgeとStep Functionsを⾜して2で割ったようなイメージ • 両⽅のサービスのいいとこどりがされている • EventBridgeで実⾏のログが⾒れる

Slide 8

Slide 8 text

1. EventBridge Pipesについて 8 n EventBridge Pipesの4step • ⼤事なステップとしては以下の4つ ソース フィルタリング エンリッチメント ターゲット

Slide 9

Slide 9 text

1. EventBridge Pipesについて 9 n EventBridge Pipesの4step ソース n イベントを受け付けるためのソース n 例して以下のようなものがある n Amazon SQS,Amazon Kinesis Data Streams,Amazon DynamoDB ストリーム …etc ソース フィルタリング エンリッチメント ターゲット

Slide 10

Slide 10 text

1. EventBridge Pipesについて 10 n EventBridge Pipesの4step フィルタリング n フィルター条件「FilterCriteria」というフィルタリングパターン (Pattern) を定義可能な、リスト(Filters)構成のオブジェクト構造が あり、JSON⽂字列で表現 ソース フィルタリング エンリッチメント ターゲット

Slide 11

Slide 11 text

1. EventBridge Pipesについて 11 n 例えば ソース フィルタリング エンリッチメント ターゲット { "Metadata1": [ test1 ], "data": {"Data1": [ test2 ]} } 左のjsonは メタデータプロパティ : FilterCriteria.Metadata1 データプロパティ : FilterCriteria.Data1 で参照できる

Slide 12

Slide 12 text

1. EventBridge Pipesについて 12 n EventBridge Pipesの4step エンリッチメント n ソースからの情報をターゲットに渡す前に加⼯する n 例えば受け取った時に別のデータを加える︖もしくは整合性確認︖ などの要素に使えそう n 現時点で私が確認した限りでは使い⽅が未知数 n とはいえ使⽤⽤途はありそうな印象 ソース フィルタリング エンリッチメント ターゲット

Slide 13

Slide 13 text

1. EventBridge Pipesについて 13 n EventBridge Pipesの4step ターゲット n データの処理先/送り先 n 例として、API Gateway/ECS/SNS/SQS….etc ソース フィルタリング エンリッチメント ターゲット

Slide 14

Slide 14 text

2. EventBridge Pipesを使⽤してみた 14

Slide 15

Slide 15 text

2. EventBridge Pipesを使⽤してみた 15 n 想定構成図 • 構成としてはSQS/EventBridge Pipes/ECS構成 • フローとしてはSQSに⼊ってきたメッセージをEventBridge Pipesが処理し、ECSに渡す • データを受け取って処理するようなユースケースが多いと考えているので、シンプルに応 ⽤が効くような構成とした • ECSの処理の結果はDBへの保存などを想定 • 今回の構成ではネットワークの記⼊は排除しています • ECSをプライベートサブネットに配置する場合は、ECSとECRを疎通させるVPCエンドポイ ントの設定が必要です

Slide 16

Slide 16 text

2. EventBridge Pipesを使⽤してみた 16 n 構成図 n 検証として考えた構成は右図 n ネットワーク構成は考慮してません

Slide 17

Slide 17 text

2. EventBridge Pipesを使⽤してみた 17 n 設定内容 n SQSの設定のためソースからSQSを選択する n オプションは必要に応じて考慮 ソース フィルタリング エンリッチメント ターゲット

Slide 18

Slide 18 text

2. EventBridge Pipesを使⽤してみた 18 n 設定内容 n フィルタリングが必要な要件があれば使⽤する n 今回はシンプルな構成なので、使⽤しない ソース フィルタリング エンリッチメント ターゲット

Slide 19

Slide 19 text

2. EventBridge Pipesを使⽤してみた 19 n 設定内容 n 必要があれば利⽤ n 今回は使⽤しない ソース フィルタリング エンリッチメント ターゲット

Slide 20

Slide 20 text

2. EventBridge Pipesを使⽤してみた 20 n 設定内容 n 設定内容としてはECSのクラスターとタスク定義を指定する n ECSのサービスを⽴ち上げるわけではないので、ネットワーク設定の対応が必要 ソース フィルタリング エンリッチメント ターゲット

Slide 21

Slide 21 text

2. EventBridge Pipesを使⽤してみた 21 n 設定内容 n ネットワークの設定については別途設定が必要です n セキリュティグループは、ECSからRDSなどのその他VPCに依存するサービスに アクセスをする場合などに利⽤してください ソース フィルタリング エンリッチメント ターゲット 補⾜ですが、最近課⾦対象になっています

Slide 22

Slide 22 text

2. EventBridge Pipesを使⽤してみた 22 n 特記事項 n 初期設定(左)、設定後(右)

Slide 23

Slide 23 text

2. EventBridge Pipesを使⽤してみた 23 n 特記事項 n 次のページにsamplejsonを作成しています。Samplejsonを使⽤し てEventBrdige Pipesをアップデートコマンドを発⾏する必要があ ります n 例えばsamplejsonをupdate.jsonのように名前をつけた場合は以下 のコマンドで更新ができます n aws pipes update-pipe --cli-input-json file://update.json

Slide 24

Slide 24 text

2. EventBridge Pipesを使⽤してみた 24 { "Name": "#eventbridge pipe名", "RoleArn": "#eventbridge pipe role名", "TargetParameters": { "EcsTaskParameters": { "EnableECSManagedTags": true, "EnableExecuteCommand": false, "LaunchType": "FARGATE", "NetworkConfiguration": { "awsvpcConfiguration": { "AssignPublicIp": "ENABLED", "SecurityGroups": [ "#sg-xxxxxx" ], "Subnets": [ "#subnet-xxxxxx", "#subnet-xxxxxx" ] } }, "Overrides": { "ContainerOverrides": [ { "Environment": [ { "name" : "#sqsmessage", "value" : "$.body" } ], "Name": "#containerの名称" } ] }, "TaskCount": 1, "TaskDefinitionArn": "#task定義arn" }, "InputTemplate": "{¥n ¥"body¥": <$.body>¥n}" } }

Slide 25

Slide 25 text

2. EventBridge Pipesを使⽤してみた 25 n ログの設定とモニタリング n EventBridgeの呼び出された回数の確認がしやすい n 以下は実際に適当な回数呼び出してみて表⽰したメトリクス

Slide 26

Slide 26 text

2. EventBridge Pipesを使⽤してみた 26 n ログの設定とモニタリング n 以下のようなログが規則正しく出⼒される n Errorになった場合は詳細は出⼒されないのでCloudTrailでの確認が必要 n ただし、ログの保存などは別途設定が必要 { "resourceArn": ”xxxxxx", "timestamp": 1707809529425, "executionId": "dc8fb743-a2d4-4cb7-ae51-dff74da81e60", "messageType": "TargetTransformationStarted", "logLevel": "TRACE" }

Slide 27

Slide 27 text

2. EventBridge Pipesを使⽤してみた 27 n 動作確認 n SQSにメッセージを⼊れていきます

Slide 28

Slide 28 text

2. EventBridge Pipesを使⽤してみた 28 n 動作確認 n スクショでまとめているので動きがわかりにくいかもしれませんが、SQSにメッ セージを⼊⼒すると、ECSのタスクが⽴ち始めます n メッセージ1回につき1タスク⽴ち上がります n 写真の例ではtest ~ test1を4回⼊れたので、4タスク⽴ち上がります

Slide 29

Slide 29 text

2. EventBridge Pipesを使⽤してみた 29 n 動作確認 n コンテナで受け取ったメッセージを確認するにはECS側で環境変数を取得する設 定が必要です n 例えば、pythonでsqsmessageという環境変数名で渡した場合は以下のように sqsmessageを確認することができます import os body = os.environ.get(”sqsmessage")

Slide 30

Slide 30 text

3. EventBridge Pipes まとめ 30

Slide 31

Slide 31 text

3. EventBridge Pipes まとめ 31 n 使⽤してみて • AWS Step Functionsのような印象を受けたが、設定項⽬がよりシンプルでわかりや すくなっていた • ECSを使⽤するケースだとコマンドでアップデートしないとECSに引数を渡せないの でそこが少し厄介 • ログの設定もわかりやすくデバックがしやすい • モニタリングもありサービスがどのように利⽤されたかわかる • イベント駆動開発をしていてLambdaだと処理能⼒が⾜りないケースだと効果を発揮 しそう