「JAWS-UG DE&I AWS re:Invent 2024 recap サーバーレス ハンズオン」でサポーターしてきました
JAWS-UG DE&I開催の「AWS re:Invent 2024 recap サーバーレス ハンズオン」にハンズオンお手伝いとして参加しました。
いつもすてきな会場を提供いただいているアールスリーインスティテュートさんのgusuku Ashibinaa OSAKA!
ありがとうございます!
お土産コーナーにはAWS re:Invent2024で配布されていたステッカーやお菓子などなどがありました。
JAWS-UG大阪やDE&Iももう10周年とのことです。
目次
Serverless Data Processing with AWS Lambda and Apache Kafka解説
配車ならぬ配ユニコーンサービスみたいなのをMSK, Lambda, AppSyncで作成するハンズオン。
最初にAWS下川さんから各サービスの解説がありました。
ありがたい!
型指定されたスキーマにクエリーを投げるのがGraphQL。
クライアント側が取得したいフィールドをリクエストできるなどが嬉しいポイント。
ワークショップではSubscriptionとMutationを使ってDynamoDBテーブルのアイテムに変化があればイベントを実行する。
KafkaはREST APIでアクセス可能で、イベントのバスとしても、データストアとしても使えるOSSのストリーミング。
MSK(Amazon Managed Streaming for Apache Kafka)はKafkaのマネージドサービス。
Serverlessで容量性能の見積もりなく動的にスケールできる。
KafkaのパーティションはKinesisのシャード。
パーティションキーがハッシュされてパーティションに分かれて。パーティションの中で順序性が保たれる。
KafkaのオフセットがKinesisのシーケンス番号。
Lambda Event Source MappingsでKafka、Kinesis、SQS、DynamoDBストリームなどを設定すると、ポーラーは実装しなくてもLambdaサービスがやってくれる。
Serverless Data Processing with AWS Lambda and Apache Kafkaハンズオン
環境にリソースがすでに作成されていました。
VPC
MSKとVS Code Server用のEC2インスタンスが起動するVPCです。
MSKは複数のプライベートサブネットで起動していてNATゲートウェイへのルートがあり、ここからインターネットへアウトバウンド通信が可能です。
MSKに設定されているセキュリティグループのインバウンドはKafkaへの通信のために9098ポートへすべての送信元からの通信が可能で、アウトバウンドはすべてのポートと送信先への通信が可能です。
VS Code Serverはパブリックサブネットで起動していて、セキュリティグループのインバウンドは80ポートですべての送信元から通信可能で、アウトバウンドはすべてのポートと送信先への通信が可能です。
フロントエンドのデプロイやMSKへのプロデューサーコマンドはVS Code Serverから実行します。
MSK(Amazon Managed Streaming for Apache Kafka)
MSK Serverlessのクラスターが作成されていました。
AppSync
AppSyncでGraphQL APIが作成されていました。
Lambda関数
すでに作成されていたLambda関数に次のコードと環境変数API_CHANNELの修正をしました。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import json import os import requests import base64 API_CHANNEL = os.environ['API_CHANNEL'] API_URL = os.environ['API_URL'] API_KEY = os.environ['API_KEY'] session = requests.Session() def lambda_handler(event, context): for name, messages in event["records"].items(): for message in messages: query = 'mutation PublishData {{ publish(data: "{}", name: "{}") {{ data name }} }}' decoded_message = base64.b64decode(message["value"]).decode('utf-8') payload = {"msg": decoded_message.replace('"',"'")} merged_query = query.format(json.dumps(payload).replace('"','\\"'), API_CHANNEL) response = session.request( url=API_URL, method='POST', headers={'x-api-key': API_KEY} ,json={'query': merged_query}) print(response.json()) return { 'statusCode': 200, 'name': 'message relay', 'body': json.dumps({"msg":"unicorn telemetry updates!"}) } |
MSKから受け取ったrecord.itemsからvalueをGraphQL APIにPOSTされています。
Lambda関数自体はVPC設定ではありません。
イベントトリガーにMSKを設定すると、ENIが追加されます。
ENIはMSKクラスターが配置されているサブネットに作成されたので3つのAZのサブネットに作成されました。
複数のトリガーを設定するとその数だけENIも作成されます。
少し気になったのは試しにイベントトリガーを削除してもENIは削除されずに、ENIを手動で削除やデタッチしようとするとアタッチされているLambdaがあるのでエラーとなりますが、そのLambdaが内部のサービスのようで操作できません。
CLIとかで操作したらできるかもですが、今回はコンソールでしか試していません。
VS Code Server
フロントエンドのデプロイやMSKへのプロデューサーコマンドを実行しました。
今後のハンズオンはCloud9からVS Code Serverが主流になりそうですね。
デプロイしたフロントエンドアプリケーションにブラウザでアクセスすると、プロデューサーコマンドで送信されているであろうランダムな位置情報をもとにユニコーンの移動が地図上に現れました。
MSK、AppSyncのユースケースを学べたハンズオンでした。
LTコーナー
市野さんのIAM Identity Center前提サービス多くない?のLT!
サポートに従事されているからこその視点なんですね。
あべたくさんからDiscordのイベント投稿を自動化するLT!
未完成ではあってもアウトプットする!大切ですね。
泉さんのBedrockエージェントのLT!
チュートリアルの内容を生成AIに相談して実務に沿ったものにしてやってみられた。
ログ分析アクションと対応アクションを持ってて、必要に応じてEC2インスタンス再起動とかもしてくれる。
リアルな感じですごくいいですね。
ワークショップ化したい!
fumi9kenさんのスタッフエンジニアなどキャリアパスについてのLT!
いろんなキャリアが必要に応じてあるものなんですね。
楽しく各サービスを学べました!!
ありがとうございました!
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
「INEVITABLE ja night #7 コネクティッド社会に向けた不可避な流れ」で課題を持ち続けることの大切さを再認識した
INEVITABLE ja nightに参加しました。 今回特に思ったことは、 …
-
-
AWS EC2 でインスタンスにIPアドレスを紐付ける
AWS EC2で作ったサーバは何もしなければ起動するたびにIPアドレスが変わって …
-
-
持ち帰って欲しいもの
「カスタマーサクセス Advent Calendar 2018」にお誘いを受けま …
-
-
AWS認定のバッジ管理が新しくなったみたいです
ふと、メールが届きました。 なんでしょうね。 いきなりリンクを踏むのもあれなんで …
-
-
ALBの重み付けルーティングでカナリアリリースをしてみました
当ブログのAMIの更新と、ALBターゲットグループのヘルスチェックを変更したかっ …
-
-
PyCharmにAWS CloudFormationプラグインをインストールして入力補完してみる
JetBrainsのPython統合開発環境(IDE)のPyCharmを1年ちょ …
-
-
Developers Summit 2024「徹底解剖!?JALインフォテック様が取り組む予兆検知/早期復旧を可能にするデータ分析/活用戦略とは?」を見ました
株式会社JALインフォテック サービス事業本部 IT基盤事業部 共通サービス基盤 …
-
-
CloudFrontからのバーチャルホストなサイトのテストってどうしてます?
このブログの構成です。 AWSで構築しています。 4つのサイトを1つのEC2で配 …
-
-
Twilio エバチャンネル ONLINE vol.6でゲストトークしました
Twilio エバチャンネル ONLINEにゲストトークで呼んでいただきました〜 …
-
-
AWS Organizationsでアカウントを50作って指定したOUに移動するスクリプト
AWS Organizationsでアカウントを50個作る必要がありましたので、 …


















