
AWSトレーニングコースで使用している質問フォームのアーキテクチャ(2019年6月版)
「コース中の質問をサーバーレスなアーキテクチャで受けて共有」で掲載しました質問フォームのアーキテクチャを一部変更しましたので、今回は設計を書いておきたいと思います。
動作などは上記リンクをご参照ください。
目次[非表示]
Amazon Route 53
個人で所有しているドメインでアクセスできるようにしていますので、Route 53のAレコードのエイリアスで、CloudFrontのドメインを指定しています。
AWS Certificate Manager
Certificate Managerでドメインの証明書を発行して、Route 53のCNAMEでドメイン認証をしています。
Amazon CloudFront
CloudFrontにはCertificate Managerで発行した証明書を設定しています。
オリジンにはS3バケットを指定して、OAIにてバケットへのCloudFrontを介さない直接のアクセスをできないようにしています。
Amazon S3
S3のバケットポリシー
S3バケットにはHTML, CSS, JavaScriptを配置して入力フォームをCloudFront経由で配信しています。
Amazon API Gateway
[質問]ボタンが押されると質問内容がURLパラメータとしてAPI GatewayでデプロイしたAPIにPOSTされます。
API GatewayではURlパラメータをJSONに変換してLambdaにEventデータとして渡しています。
最初のAWS Lambda
最初のLambdaはメッセージを受け取って、SNSトピックへ発行します。
Amazon SNS, Amazon SQS
SNSトピックは3つのSQSキューへメッセージをファンアウトします。
Teamsに投稿するAWS Lambda
1つ目のSQSキューからメッセージを受信したLambdaはTeamsに通知します。
Backlogにチケット登録するAWS Lambda
2つ目のSQSキューからメッセージを受信したLambdaはBacklog APIにPOSTしてチケット登録を行います。
DynamoDBにデータを入れるAWS Lambda
3つ目のSQSキューからメッセージを受信したLamndaはリクエスト内容と時間、送信元IPアドレスなどの情報とともにDynamoDBへ書きます。