Upgrade to Pro — share decks privately, control downloads, hide ads and more …

第15回 雲勉LT【オンライン】Amazon EventBridge Pipesのご紹介、SQ...

iret.kumoben
February 27, 2024

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

下記、勉強会での資料です。
https://youtu.be/TWr1dURIJZw

iret.kumoben

February 27, 2024
Tweet

More Decks by iret.kumoben

Other Decks in Technology

Transcript

  1. 0.講師⾃⼰紹介 2 n 名前 • ⻘⽊ 侑甫 (あおき ゆうすけ) •

    カスタマー⽀援事業部インフラセクション構築グループ • 新卒からエンジニアで、アイレットで4社⽬ • 趣味はポーカー • EventBridgeやLambdaなどサーバレス系のサービスが好き • 資格はまだまだ取得中
  2. 1.初めに 5 • EventBridge Pipesというサービスがあることに気がつく • EventBridge Pipesというサービスのユースケースを考えてみたり⾊々触りたい・・・ • 仮想要件

    • スマホアプリを作成している • スマホアプリはAPI Gateway / Lambda / RDS構成で構成されている • 別のシステムからスマホアプリで表⽰させたい • 別のシステムはSQSに連携したい内容をメッセージで置くところまで実装してくれる • ここから、RDSにメッセージをおくまでどうするかを考える
  3. 1. EventBridge Pipesについて 7 • 1-1. EventBridge Pipesとはどんなサービス︖ • EventBridgeとStep

    Functionsを⾜して2で割ったようなイメージ • 両⽅のサービスのいいとこどりがされている • EventBridgeで実⾏のログが⾒れる
  4. 1. EventBridge Pipesについて 9 n EventBridge Pipesの4step ソース n イベントを受け付けるためのソース

    n 例して以下のようなものがある n Amazon SQS,Amazon Kinesis Data Streams,Amazon DynamoDB ストリーム …etc ソース フィルタリング エンリッチメント ターゲット
  5. 1. EventBridge Pipesについて 10 n EventBridge Pipesの4step フィルタリング n フィルター条件「FilterCriteria」というフィルタリングパターン

    (Pattern) を定義可能な、リスト(Filters)構成のオブジェクト構造が あり、JSON⽂字列で表現 ソース フィルタリング エンリッチメント ターゲット
  6. 1. EventBridge Pipesについて 11 n 例えば ソース フィルタリング エンリッチメント ターゲット

    { "Metadata1": [ test1 ], "data": {"Data1": [ test2 ]} } 左のjsonは メタデータプロパティ : FilterCriteria.Metadata1 データプロパティ : FilterCriteria.Data1 で参照できる
  7. 1. EventBridge Pipesについて 12 n EventBridge Pipesの4step エンリッチメント n ソースからの情報をターゲットに渡す前に加⼯する

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

    n 例として、API Gateway/ECS/SNS/SQS….etc ソース フィルタリング エンリッチメント ターゲット
  9. 2. EventBridge Pipesを使⽤してみた 15 n 想定構成図 • 構成としてはSQS/EventBridge Pipes/ECS構成 •

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

    アクセスをする場合などに利⽤してください ソース フィルタリング エンリッチメント ターゲット 補⾜ですが、最近課⾦対象になっています
  11. 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
  12. 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}" } }
  13. 2. EventBridge Pipesを使⽤してみた 26 n ログの設定とモニタリング n 以下のようなログが規則正しく出⼒される n Errorになった場合は詳細は出⼒されないのでCloudTrailでの確認が必要

    n ただし、ログの保存などは別途設定が必要 { "resourceArn": ”xxxxxx", "timestamp": 1707809529425, "executionId": "dc8fb743-a2d4-4cb7-ae51-dff74da81e60", "messageType": "TargetTransformationStarted", "logLevel": "TRACE" }
  14. 2. EventBridge Pipesを使⽤してみた 29 n 動作確認 n コンテナで受け取ったメッセージを確認するにはECS側で環境変数を取得する設 定が必要です n

    例えば、pythonでsqsmessageという環境変数名で渡した場合は以下のように sqsmessageを確認することができます import os body = os.environ.get(”sqsmessage")
  15. 3. EventBridge Pipes まとめ 31 n 使⽤してみて • AWS Step

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