Logic Apps - Azure Functionsからの呼び出しとGmail送信


目的

Azure Functions から Azure Logic Apps を呼び出し、
Azure Logic AppsAzure Functions から受け渡した値をGmail送信する

構成

Azure Functions と Azure Service Bus を使用してロジック アプリを呼び出すか、またはトリガーする を参考に以下構成のロジックアプリを作成する

Postmanから送信する要求本文は以下とし、文字列test-nameをメール本文に挿入する

{
    "name": "test-name"
}

ロジックアプリの作成

1. トリガ(HTTP要求の受信時)作成

トリガに HTTP要求の受信時を選択

Functionsから受信する要求本文のスキーマ定義を行う
サンプルのペイロードを使用してスキーマを生成するを選択する

サンプルのペイロードを入力することで、以下のようにスキーマが生成される

要求本文がスキーマと一致しない場合、 HTTP 400 Bad Request が返される

Functionsから送信するPOSTの宛先はロジックアプリを保存後に生成される

2. アクション(応答)追加

アクションの 応答 を選択する

以下のように 本文name を選択するとトリガで定義したスキーマの nameを応答本文に含めることができる

3. アクション(Gmail送信)追加

アクションの メールの送信 を選択する

メールの送信に使用するGmailアカウントにサインインする

宛先のメールアドレスを入力し、Add new parameter から ボディ件名 をチェックする

メールの件名、ボディを入力し、動的なコンテンツの追加 から式で triggerBody()?['name'] を入力し、トリガで定義したスキーマの nameをボディに追加する

4. POSTの宛先を取得

HTTP Trigger 関数の作成

関数の作成方法については省略

以下、Python の実装コード例

import logging
import json
import requests
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
  logging.info('Python HTTP trigger function processed a request.')

  # ロジックアプリから取得したHTTP POSTのURL
  uri = 'https://prod-11.japanwest.logic.azure.com:443/workflows/492c717d4.....'

  try:
    req_body = req.get_json()
    name = req_body.get('name')
  except ValueError:
    return func.HttpResponse("Bad Request", status_code=400)

  try:
    headers = {'Content-Type': 'application/json'}
    payload = {'name': name}

    # POST送信
    response = requests.post(uri, headers = headers, data = json.dumps(payload))
    logging.info(f'response code: {response.status_code}')
    logging.info(f'response body: {response.text}')
  except:
    return func.HttpResponse("Internal Server Error", status_code=500)

  return func.HttpResponse("OK", status_code=200)

動作確認

Functionsはローカルデバッグ実行で確認
Azure Functions - ローカルでのテスト、デバッグ(Python)参照

Postman

Funcstionsを実行しているターミナル

Gmail