AWS Startup ブログ

【週刊 Ask An Expert #37】ユーザー操作をトリガーにメールを送りたい! 先週の #AWSLoft で受けた質問10選

スタートアップソリューションアーキテクトの針原 (@_hariby): です。令和2年 (2020年) も1月6日から Ask An Expert はオープンしています。今年も週刊 Ask An Expert で質問内容をまとめていきたいと思うのでよろしくお願いします。

それでは週刊 Ask An Expert 第37回をお届けします。読んでいて「参考になった」「いい内容だ」と思って頂けたら、ハッシュタグ #AWSLoft を付けてシェアしてください。

Ask An Expert とは

皆さん AWS Loft Tokyo はご存知でしょうか。目黒セントラルスクエア17Fにある、AWS を利用中のスタートアップ・デベロッパーのためのコワーキング及びイベントスペースです。その一角に AWS のエキスパート – Solutions Architect (SA) や Cloud Support Engineer (CSE)、時にはサービス開発チームや 私の場合、Customer Success Manager (CSM) – といった中の人に技術的な質問ができる Ask An Expert カウンターがあります。そこでは毎月100件以上にものぼるご相談を来場者の方からお受けしています。

写真はある日の Ask An Expert の光景で、SA 松原・木村がお客様の相談に乗っているところです。


この連載「週刊 Ask An Expert」では、多くのご相談の中から我々スタートアップソリューションアーキテクトの独断で面白かった質問を毎週 10 個ずつ選び紹介していきます。他の AWS Loft 利用者がどんな質問をしているのか、自分が知らない新しいトピックはないか、Ask An Expert ってどんなところなのか、一緒に見ていきましょう。Let’s ask an expert!

週刊 Ask An Expert #37 (2020/01/06 – 01/10)

この週の対応者は SA: 江川・金澤・松﨑・中武・松原・木村・北澤・矢形・能仁・兼松・廣瀬・大薗・吉田・永山・木村・石倉・小川と、CSE: 嶋本、CSM: 坂田でした。

Q1: コンシューマー向け (to-C) のサービスを AWS Amplify と AWS AppSync で構築しています。ユーザー操作をトリガーにメールを送りたい場合はどんなサービスが使えますか?

Amazon Pinpoint では、特定のイベント(≒ ユーザー操作)が発生したときに該当の宛先に通知を送信する機能を提供しています。ドキュメント「キャンペーンをイベント発生時に送信する」あるいは「Amazon Pinpoint ジャーニー」を確認してみて下さい。

Q2: バッチ処理を Amazon EC2 で動かしていて、バッチが終わったタイミングでリアルタイムにウェブアプリ側に通知したいがどうすればいいか?

ウェブアプリ側に API の口を作り、バッチ処理が終わった際にそちらにリクエストする方法がシンプルかと思います。
なお、ジョブを AWS Lambda, AWS Batch, Amazon ECS/AWS Fargate に移行して AWS Step Functions で管理することで、実行ステータスの変化を Amazon EventBridge (Amazon CloudWatch Events) イベントで取得することもできます。ドキュメント「Step Functions の実行ステータスの変更のための CloudWatch イベント」も参考にしてみてください。

Q3: 5G のアプリを開発しているが、モバイル・エッジに近いところで処理をするいい方法を考えたい。

AWS Wavelength を使うと、モバイルデバイス・エンドユーザーに対して、遅延を 10 ms 未満に抑えるアプリケーションを構築することができます。アプリケーションを Wavelength Zone と呼ばれる AWS インフラストラクチャにデプロイすることで、モバイルから 5G ネットワークで到達できる範囲内でアプリケーションに接続します。VPC を Wavelength Zone へと拡張することで、使い慣れた AWS サービスを利用することができます。What’s New「5G 向けの超低レイテンシーアプリケーションを提供する AWS Wavelength の発表」にあるとおり、日本を含む地域で2020年ローンチ予定です。

Q4: WordPress を使ったサイトの構築案件に取り掛かりたいものの、社内に有識者がおらず人的リソースもありません。いい方法はないでしょうか?

一番簡単なのは、Amazon Lightsail を使う方法です。Wordpress のサイトを簡単に立ち上げることができます。今後の拡張性を考えた場合 AWS Elastic Beanstalk も選択肢に入ると思います。構築方法についてはドキュメント「外部 Amazon RDS データベースを備えた高可用性の WordPress ウェブサイトを Elastic Beanstalk にデプロイする」に沿って進めてみて下さい。

静的ウェブサイトのホスティングを行いたいという話もありましたが、Amplify Console がオススメです。Amazon S3 を使った方法もドキュメント「Amazon S3 での静的ウェブサイトのホスティング」に記載されています。

Q5: インスタンスの死活監視をしたいです。

CloudWatch エージェントを入れて CloudWatch メトリクスの変化から死活監視をして、例えばインスタンスが落ちたりしたら CloudWatch イベントでアラートを飛ばしたり AWS Lambda で何か処理をしたりできます。EC2 インスタンスでもオンプレサーバーでも使える監視方法です。ヘルスチェックも CloudWatch エージェント・メトリクスでできます。
インストール手順などはドキュメント「CloudWatch エージェントを使用して Amazon EC2 インスタンスとオンプレミスサーバーからメトリクスとログを収集する」にあります。

Q6: Amazon RDS の AWS IAM 認証で他人のデータベースアカウントを利用できないようにしたい。

Amazon RDS の認証を IAM ユーザー・ロールを使って行う際に、データベースのアカウントの関係をどう記述するかという質問です。DB インスタンスへの接続の許可は IAM ポリシーを作成し、それを IAM ユーザー・ロールに関連づけることで行います。このとき、IAM ポリシーで適切にデータベースアカウントを設定すれば、特定のアカウント (データベースユーザー) だけを利用させることができます。ドキュメント「IAM データベースアクセス用の IAM ポリシーの作成と使用」に具体的な IAM ポリシーの記述方法が書かれています。

Q7: IoT 機器の課金について質問します。機器から来るデータは AWS Step Functions での処理を介して課金情報が S3 にファイルとして保存されます。作成したファイルを Amazon SQS や AWS Lambda を利用して集計する予定なのでアーキテクチャとして考慮するポイントを教えてほしいです。

集計で扱うデータ量に合わせた Lambda の設計や集計のアーキテクチャが必要です。ご相談段階では具体的な集計単位や件数が想定されていなかったので、まずはそこの規模感を把握するところから始めましょう。キューに溜まったメッセージ数に応じてオートスケーリングさせることも可能で、ドキュメント「Amazon SQS に基づくスケーリング」に詳しく書かれています。

Amazon SQS や AWS Lambda を使うといった縛りがなければ (Lambda がタイムアウトするぐらい大きいデータ量になれば)、ECS タスクや AWS Glue を使うのも手です。Step Function との連携もドキュメント「Step Functions で Amazon ECS または Fargate タスクを管理する」「Step Functions を使用した AWS Glue ジョブの管理」にあるように可能です。

場合によってはデバイスごとに Lambda で集計するのではなく、Amazon Athenaで集計した方がシンプルにできるかもしれません。

Q8: Apache と Web アプリのクリックのログを収集、可視化したい。

EC2 であれば基本は CloudWatch エージェントか Kinesis エージェントをお使いになり、永続化する場合ログは Amazon S3 に貯めておくのがいいと思います。Amazon Athena で集計しつつ Amazon QuickSight を使うと可視化もできます。コンテナ (Amazon ECS / Amazon EKS) 、Fargate の場合はドキュメント「awslogs ログドライバーを使用する」にあるようにログドライバーを使ってログを取り出すことができます。FireLens というのもあります、詳しくはドキュメント「カスタムログルーティング」を。
パターン別のログのため方は Startup Day などで開催している春期講習シリーズにまとまっています。スライド「[AWS Start-up ゼミ] よくある課題を一気に解説! 御社の技術レベルがアップする 2019 春期講習 補講&おかわり編」を確認してみて下さい。

また、リアルタイムに Amazon Elasticsearch Service にストリームで流して可視化という選択肢もあります。ドキュメント「Amazon Elasticsearch Service にストリーミングデータをロードする」を参考にして下さい。

Q9: AWS AppSync + GraphQL でスカウトサイトを作成中です。画面上のスカウト数を増減させるのはどうやるのがよいか?フロントエンド・サーバーサイドのどちらに機能を実装するかも迷っています。

AWS AppSync のサブスクリプションを使うと DynamoDB のデータ更新をリアルタイムに受け取ることが可能です。ドキュメント「リアルタイムデータ」に GraphQL スキーマサブスクリプションディレクティブの詳細がまとまっています。
方針は、素早く作りたいのであれば DynamoDB をデータソースに設定した AppSync を使うことを検討し、より柔軟な処理が必要なときはデータソースに AWS Lambda 関数を設定して実装するのが良いでしょう。

Q10: マルチアカウントの管理についてベストプラクティスを教えて下さい。

例えば開発・ステージング・プロダクションの運用環境で AWS アカウントを分けるケースがあると思います。複数アカウントの作成は AWS Organizations を使えば、一括請求もできます。個々のアカウントに個別でリソースをデプロイすると運用コストがかさむので、構成は AWS CloudFormation や Terraform でコード化して一元管理するというのがマルチアカウント運用を考えたときに最低限必要かと思います。この際、IAM ユーザーは1つのアカウントに集約し、AWS Security Token Service (STS) の AssumeRole API で取得した一時的な認証情報で各アカウントにアクセスする、というのが良いです。AWS CloudFormation 自体のベストプラクティスに関しては、ドキュメント「AWS CloudFormation のベストプラクティス」が参考になると思います。

また、セキュリティ・コンプライアンス観点の情報は AWS Summit 2017 のセッションスライド「AWSにおけるマルチアカウント管理の手法とベストプラクティス」を参考にして頂いたり、AWS Control Tower の利用も検討ください。


週刊 Ask An Expert まとめ、今回はここまで!

最後までお読み頂きありがとうございます。冒頭に書いたように執筆者の独断で興味深かった質問のみをピックアップの上、要約して記載しているので実際にはより具体的な質問をより多く頂いています。まだ Ask An Expert カウンターをご利用されたことがない方も、AWS Loft Tokyo にお越しの際はぜひお気軽にご質問ください。

※Ask An Expert が混雑してお待ちいただく場合、またはエキスパートが不在の場合がございます。何卒ご容赦ください。

このブログの著者

針原 佳貴

2018年4月アマゾン ウェブ サービス ジャパン株式会社入社。現在はソリューションアーキテクトとして、スタートアップにおける機械学習基盤設計などの技術支援に従事。最近は「Cinnamon AI は、Amazon SageMaker マネージドスポットトレーニングで ML モデルのトレーニングコストを 70% 節約」というブログを書きました。