Azure FunctionsとSendGridの活用事例 ~メールサーバがない環境下でアプリ内アンケート機能を実現する方法~

Azure FunctionsとSendGridの活用事例

この記事は Using SendGrid With Azure Functions to Send Mobile App Survey Data の抄訳です。

SendGridのコミュニティには、様々な企業のエンジニアが参加しており、面白い事例がたくさんあります。本日のブログでは、アメリカ国防総省をはじめとする様々な政府機関に向けて、安全性・拡張性に優れたシステム構築を手掛けている企業の事例をご紹介します。

政府系のシステムは中央集権的なシステム(モノリシックなシステム)が多く、利用するインフラも様々な制約に縛られています。今回の事例は、このような環境下でAzure FunctionsSendGridを上手く活用して、モバイルアプリケーションのアプリ内アンケート機能を効率的に開発したお話です。

解決すべき課題

モバイルアプリケーションからメールを送信するのは簡単ですが、政府機関向けのアプリケーションだと少し事情が異なります。以前、国防総省の軍事司令部が、軍人のキャリアを参照するモバイルアプリをリリースしたことがあります。よくある情報参照系アプリの構成で、パブリックに公開されているAPIからデータを取得して、組織内のキャリアパスを表示するアプリです。国防総省はこのアプリに対して「アプリ内アンケートの仕組みを入れたい。アンケートデータの収集や送信はアプリが直接行ってセキュアにしたい。」という要望を出しました。

効率よくセキュリティやスケーラビリティを確保するには、実現する機能に対して、うまく適合するサービスを探し出し、活用することが大切です。国防総省ではセキュリティ上の理由から外部へ公開しているメールサーバがなく、モバイルアプリからのメール送信は課題となっていました。

しかし、この課題は、SendGridのAPIとAzure Functionsを採用することで解決できました。また、課題解決だけではなく「無駄なコストを抑える」「技術的な負債を抱えない」ということも実現できました。

課題の解決方法 – 具体的な設定手順 –

SendGridとAzure Functionsを利用した課題の解決について、ここからは具体的な設定手順を交えてご紹介します。

1.Microsoft AzureとSendGridの準備

Microsoft AzureとSendGridのアカウントをそれぞれ用意します。SendGridはFreeプランのアカウントで構いません。

2.App ServiceでFunction Appを作成

App Serviceで新しくFunction Appを作成します。アプリ名は「sendTestFunctionEmail」としました。Function Appを作成すると、Functionコードを保持するストレージアカウントも同時に作成されます。

App ServiceでFunction Appを作成

3.SendGrid API Keyの作成と追加

Functionがデプロイされて準備が整ったら、”アプリケーション設定”でSendGridのAPI Keyを環境変数として追加します。API KeyはSendGridの画面から発行してください。環境変数の名前は”SendGridKey”としました。

SendGrid API Keyの作成と追加

4.メール送信 Functionの定義

Functionからのメール送信はいくつかの方法があり、それぞれテンプレートが用意されています。今回は用途に合わせて「HTTP trigger」のテンプレートを利用しました。(「SendGrid」テンプレートもあるので是非一度確認してみてください。)

Functionの定義Functionの定義

Functionで使うプログラミング言語を選択して、関数に付ける名前を入力します。承認レベルはデフォルトのまま、Functionを作成します。

Functionで使うプログラミング言語を選択

下図のように、HTTP trigger functionのコードが表示されます。

HTTP trigger functionのコード

5.Functionコードの修正

自動生成されたFunctionコードをすべて削除して、Runメソッドを以下のように定義します。

Runメソッドの定義

続いて、先頭行に以下のコード3行を追加します。

コードを追加

SendGridライブラリへの参照が追加されて、コードで利用できるようになりました。あとはメールのオブジェクトを追加するだけです。

SendGridライブラリへの参照が追加された

上記コードでは、SendGridのメールオブジェクトを生成して、メールのSubjectを「アンケートデータ」、Content Typeを「text/html」に設定しました。あとはアンケートデータを入れるためにinputパラメータを加えました。

6.”function.json”でSendGridのメタデータを設定

画面右側のツールバーから「ファイルの表示」メニューを選びます。

”function.json”でSendGridのメタデータを設定

run.csx”と”function.json”の2つのファイルがあるので、”function.json”を選択してください。以下のように定義することで、Functionのコードに値をハードコーディングすることなく、メールのメッセージをバインドすることができます。

メールのメッセージをバインド

設定は以上です。Functionで作られたURLへHTTPのPOSTリクエストを送ってテストしてください。FunctionがSendGrid APIのプロキシのような役割をして、ユーザが入力したアンケートから送信データを生成します。

SendGridのようなツールがもたらす効果

今回の事例のように、パブリックに使えるリソースがない制約された環境下では、SendGridのようなクラウドベースのツールがとても便利です。「メールを送信する」というシンプルかつ独立したサービスが提供されることで、開発者はコードに集中することができます。モバイルアプリからのメール送信はSendGridを使うと非常に簡単です。是非活用してください。