「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
関連記事
-
-
特定AWSアカウント特定リージョンのCloud9環境を削除するLambda(Python)
やりたいこと 特定アカウント内特定リージョン内のCloud9環境を全部削除したい …
-
-
No-Code JP 第0回で様々な熱い言葉を聞いて思ったこと
以下は、気になったことのメモとか感想を書いています。 登壇者、発表者、主催企業な …
-
-
実録 JAWS DAYS 2017 ~RoadTrip,スタッフ,ハンズオンメンターで参加しまして~
今年もJAWS DAYSにいってまいりました。 RoadTripの話 去年に引き …
-
-
Developers Summit 2024 「アーキテクチャから学ぶKubernetesの全体像」を見ました
株式会社スリーシェイク bells17さん Kubernetesの基盤となるCo …
-
-
S3リクエストメトリクスをプレフィックスを指定して有効化
検証でどのリクエストがどれぐらい発生しているのか、さっと知りたくなったので、特定 …
-
-
AWS Lambda(Python)からTwitterに投稿する
「GoogleフォームからAPI Gatewayで作成したREST APIにPO …
-
-
「機械学習・データサイエンス基礎講座(1)」に参加しました
異業種データサイエンス研究会を主宰されている井伊さんが開催される連続の基礎講座の …
-
-
Amazon CloudWatch Anomaly Detectionをダッシュボードに設定
Amazon CloudWatch クロスリージョンクロスアカウントダッシュボー …
-
-
「四国クラウドお遍路 2024 in 高知」に参加しました
JAWS-UGの四国4支部合同による四国クラウドお遍路に参加してきました。 せっ …
-
-
「RPALT vol.24~Google Apps Scriptスペシャル~」でLTしました〜
RPAの勉強とLTのイベント、RPALT vol.24でLTしました〜。 今回は …