Slide 1

Slide 1 text

© LayerX Inc. AWS アーキテクチャクイズ 2024-03-15 バクラクエンジニア共有会 LT

Slide 2

Slide 2 text

© LayerX Inc. 2 AWS アーキテクチャクイズ これからクイズを3問出題します ぜひコメントで回答を! 勘でもいいです!!

Slide 3

Slide 3 text

© LayerX Inc. 3 第1問

Slide 4

Slide 4 text

© LayerX Inc. 4 第1問 室温センサーから室温データ (JSON) が定期的に飛んできます データを DynamoDB に溜めたい場合、前段に何を置くといいでしょう? ここに何を置く? IoT 室温センサー Amazon DynamoDB JSON

Slide 5

Slide 5 text

© LayerX Inc. 5 第1問 室温センサーから室温データ (JSON) が定期的に飛んできます データを DynamoDB に溜めたい場合、前段に何を置くといいでしょう? Amazon API Gateway IoT 室温センサー Amazon DynamoDB JSON

Slide 6

Slide 6 text

© LayerX Inc. 6 API Gateway では、リクエスト内容を変換して別の AWS コンポーネントへリクエストできる 第1問 Amazon API Gateway 室温センサー Amazon DynamoDB

Slide 7

Slide 7 text

© LayerX Inc. 7 API Gateway では、リクエスト内容を変換して別の AWS コンポーネントへリクエストできる 第1問 Amazon API Gateway 室温センサー Amazon DynamoDB JSON データ (例) { "time": 1710408430033, "temperature": 18.5 }

Slide 8

Slide 8 text

© LayerX Inc. 8 API Gateway では、リクエスト内容を変換して別の AWS コンポーネントへリクエストできる 第1問 Amazon API Gateway 室温センサー Amazon DynamoDB JSON データ (例) { "time": 1710408430033, "temperature": 18.5 } マッピングテンプレート #set($data = $input.path('$')) { "TableName": "hoge", "Item": { "time": { "N": "$data.time" }, "temperature": { "N": "$data.temperature" } } }

Slide 9

Slide 9 text

© LayerX Inc. 9 API Gateway では、リクエスト内容を変換して別の AWS コンポーネントへリクエストできる 第1問 Amazon API Gateway 室温センサー Amazon DynamoDB JSON データ (例) { "time": 1710408430033, "temperature": 18.5 } マッピングテンプレート #set($data = $input.path('$')) { "TableName": "hoge", "Item": { "time": { "N": "$data.time" }, "temperature": { "N": "$data.temperature" } } } DynamoDB へのリクエスト内容 { "TableName": "hoge", "Item": { "time": { "N": "1710408430033", }, "temperature": { "N": "18.5" } } }

Slide 10

Slide 10 text

© LayerX Inc. 10 API Gateway では、リクエスト内容を変換して別の AWS コンポーネントへリクエストできる 第1問 Amazon API Gateway 室温センサー Amazon DynamoDB JSON データ (例) { "time": 1710408430033, "temperature": 18.5 } マッピングテンプレート #set($data = $input.path('$')) { "TableName": "hoge", "Item": { "time": { "N": "$data.time" }, "temperature": { "N": "$data.temperature" } } } DynamoDB へのリクエスト内容 { "TableName": "hoge", "Item": { "time": { "N": "1710408430033", }, "temperature": { "N": "18.5" } } } 記録したよ

Slide 11

Slide 11 text

© LayerX Inc. 11 第2問

Slide 12

Slide 12 text

© LayerX Inc. 12 メッセージをオウム返しする LINE bot を作ります 第2問

Slide 13

Slide 13 text

© LayerX Inc. 13 メッセージをオウム返しする LINE bot を作ります ※ メッセージは Webhook で届く ※ LINE Reply API へリクエストを送って返信する 第2問 ここに何を置く? LINE bot LINE Reply API メッセージ Webhook 返信

Slide 14

Slide 14 text

© LayerX Inc. 14 メッセージをオウム返しする LINE bot を作ります ※ メッセージは Webhook で届く ※ LINE Reply API へリクエストを送って返信する 第2問 Amazon API Gateway LINE bot LINE Reply API メッセージ Webhook 返信

Slide 15

Slide 15 text

© LayerX Inc. 15 API Gateway では、リクエスト内容を変換して別エンドポイントへリクエストできる 第2問 Amazon API Gateway LINE bot LINE Reply API

Slide 16

Slide 16 text

© LayerX Inc. 16 API Gateway では、リクエスト内容を変換して別エンドポイントへリクエストできる 第2問 LINE Webhook (抜粋) { "events": [ { "timestamp": 1710408430033, "message": { "type": "text", "text": "こんにちはこんにちは!!" }, "replyToken": "710c805bd4bae907" } ] } Amazon API Gateway LINE bot LINE Reply API

Slide 17

Slide 17 text

© LayerX Inc. 17 API Gateway では、リクエスト内容を変換して別エンドポイントへリクエストできる 第2問 LINE Webhook (抜粋) { "events": [ { "timestamp": 1710408430033, "message": { "type": "text", "text": "こんにちはこんにちは!!" }, "replyToken": "710c805bd4bae907" } ] } マッピングテンプレート #set($data = $input.path('$.events[0]')) { "messages": [ { "type": "text", "text": "$data.message.text" } ], "replyToken": "$data.replyToken" } Amazon API Gateway LINE bot LINE Reply API

Slide 18

Slide 18 text

© LayerX Inc. 18 API Gateway では、リクエスト内容を変換して別エンドポイントへリクエストできる 第2問 LINE Webhook (抜粋) { "events": [ { "timestamp": 1710408430033, "message": { "type": "text", "text": "こんにちはこんにちは!!" }, "replyToken": "710c805bd4bae907" } ] } マッピングテンプレート #set($data = $input.path('$.events[0]')) { "messages": [ { "type": "text", "text": "$data.message.text" } ], "replyToken": "$data.replyToken" } LINE Reply API へのリクエスト内容 { "messages": [ { "type": "text", "text": "こんにちはこんにちは!!" } ], "replyToken": "710c805bd4bae907" } Amazon API Gateway LINE bot LINE Reply API

Slide 19

Slide 19 text

© LayerX Inc. 19 第3問

Slide 20

Slide 20 text

© LayerX Inc. 20 第3問 Slack には、外部からメッセージを送る Incoming Webhook という機能があります 秘密の URL にメッセージを送ると認証なしで Slack に届きます (秘密の URL) User Slack Message バクラク! バクラク!

Slide 21

Slide 21 text

© LayerX Inc. 21 第3問 ユーザには URL を隠蔽しつつ IP 制限をかけるために AWS を挟むことにしました どの AWS コンポーネントを使うといいでしょうか? (秘密の URL) User Slack Message ここに何を置く?

Slide 22

Slide 22 text

© LayerX Inc. 22 第3問 ユーザには URL を隠蔽しつつ IP 制限をかけるために AWS を挟むことにしました どの AWS コンポーネントを使うといいでしょうか? (秘密の URL) User Slack Message Amazon API Gateway

Slide 23

Slide 23 text

© LayerX Inc. 23 第3問 (秘密の URL) User Slack Message API Gateway では、届いたリクエストを別の URL へ中継できます アクセス元 IP アドレスも制限できます Amazon API Gateway

Slide 24

Slide 24 text

© LayerX Inc. 24 第3問 User Slack Message API Gateway では、届いたリクエストを別の URL へ中継できます アクセス元 IP アドレスも制限できます Amazon API Gateway バクラク! バクラク! IP アドレスを 確認して通す (秘密の URL)

Slide 25

Slide 25 text

© LayerX Inc. 25 まとめ 色々な使い道がある Amazon API Gateway は便利! ※ クイズの正解となる構成は他にもあります ※ API の前段で認可周りや流量制御を任せるのが標準的な使い方です