ぴろログ

Output Driven

モーニングコールが欲しくって。- 概要編 -

Amazon Connectでモーニングコールシステムを作った

AWSのお勉強として、実際にサービスを開発してみようということでモーニングコールシステムを作った。自分の生活に役立つし、何より「動くもの」を自分で作れたのでモチベーション高く取り組めたと思う。

電話といえばAmazon Connectっしょ、と思って着手したけど、一方的に自分のスマホに電話かけるだけなのでほとんどの機能(コールセンター用途)には触れることなく、どちらかといえばCloudFormationやIAMに苦しめられた。

個々の構成要素やハマった話は別で書くとして、概要を記しておく。

できたサービス

  • 時刻と電話番号を指定すると、電話(モーニングコール)がかかってくる。設定画面はS3上のHTMLファイル。
  • 電話に出た後に流れるメッセージは任意で設定可能。(amazon pollyのmizukiによるテキスト読み上げ) ※電話に出ずに切っちゃえば通話料が発生しない。かつ、電話に出てもmizukiたんのささやきボイスがイマイチなこともあり、電話にでんわ状態。
  • Dash Buttonをクリックすると、次回のコールはキャンセル。 (今日は起きてるのでコールいりませーんの通知。実際はあまり使わない。だって起きれないから。)

使ったサービス・技術

  • サービスの構成要素
  • デプロイ周り
    • CloudFormation / SAM(Serverless Application Model
    • CodePipeline
    • GitHub

学んだこと

  • ハマりポイント①:IAM
    • なぜか動かないってなったら大抵コイツのせい。(自分がIAMで適切な権限を付与していないせい)
    • AWSのセキュリティの考え方:権限は最小限にすべし、を体現。明示的に権限を付与しないと動かん。
    • 最小限に留めようとしたらうまく動かないので、結局Fullでふっちゃうっていう。。ビジネス用途だと許されないだろうなと思う。
  • ハマりポイント②:CloudFormation
    • 最初からCloudFormationで構築しようとして詰んだ。全然わからん。一度実現したい構成を作ったあとに、テンプレート化していくことで何とか頑張れた。
    • いきなり書き始めずに(できないし)、以下の流れで進めるのが効率良かった。
      1. ネット上に転がっているサンプルを見つけて雰囲気をつかむ
      2. AWS CloudFormation デザイナー(GUI)で類似構成を組んで、自動生成されるテンプレートを確認
      3. リファレンスで補完しながらyamlを書く https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-product-property-reference.html
  • 環境変数を活用する
    • 電話番号やドメイン名など、世の中にノーガードで知らしめたく無い情報は環境変数で隠蔽すする。…${xxx}
    • Amazon ConnectのインスタンスIDやフローIDなど、プロジェクト単位で変わりそうな箇所も環境変数として外出ししておく。
  • 気づきは小まめに残しておくべし
    • この記事のように「やったことを後から振り返ってきれいにまとめよう」とすると忘れちゃう情報が出てくる。良くない。
    • 少なくとも一日単位で、きっちり「備忘」としての役割を果たせる運用をしようと思う。 とりあえず個々の構築をなぞって、思い出していきたい。

感想

  • 今回の構成はインフラ周りの設定が不要だったので、ネットワークやらセキュリティグループやらの登場はなかった。アプリに専念ってこういうことね、と実感。
  • CodePipelineでgit push→GitHubからのソース取り込み→デプロイまでを自動化したので、楽っちゃ楽なんだけど待ち時間が長いのが嬉しくない。今回のケースだと、デプロイまでに5〜10分弱かかった。小さい修正を繰り返していくのにはアンマッチな印象。あとは、Lambdaのコードを書き換えても内容が反映されないことがあった。設定(権限?)が足りていないのかも。調査が必要。

(後日追記)

  • 完成翌日、しっかり06:30にモーニングコールがかかってきたことを確認し、電話をとらずに切って、次に気づいた時には07:20だった。うすうすわかっていたけど、強力なスヌーズ機能が必須。おまけで組み込んだDash Buttonを活用して、クリックしないと延々と電話をかけ続ける仕組みにしよう。