Logic AppsでGmail受信した時にメール本文から仮想マシン名を取得して起動するワークフロー

Azure,Logic Apps,Virtual Machines

システム運用業務に携わっていると、メールで作業依頼を受け取るケースがあります。
メールから作業依頼の内容を自動的に取得できると便利そうだということで、仮想マシン(Azure VM)の起動依頼を例にワークフローを作成してみました。

Logic Appsにはメール関連のコネクタが用意されており、定期的なメール受信の確認や、条件に合致した際にワークフローを実行することができます。
メール本文に記載されたAzure VM(仮想マシン)名を抽出し、そのVMを起動するワークフローを作成しています。
メール本文からAzure VM名を特定するため、indexOf、lastIndexOf、sliceなどの関数を使用しています。

    • 前提条件
      • Gmailコネクタを利用し、メール受信を定期的にチェックする
      • 特定のFromアドレス・件名の場合を条件に処理を行う
      • メール本文から仮想マシン名を抽出する(VM名および文字数は可変)
      • メール本文に記載された仮想マシンを起動する
      • 権限付与はシステム割り当てマネージドIDを利用する

※本記事内では、Azure Virtual Machines(Azure VM)を仮想マシンとして表記しています。
※本記事内では、Azure Logic AppsをLogic Appsとして表記しています。

スポンサーリンク

Logic Appsリソース作成からマネージドID割り当て

Logic Appsのリソースを作成します。
システム割り当てマネージドIDの有効化から権限付与を行います。

Logic Appsのリソース作成

Logic Appsのリソース作成手順については、こちらで紹介しています。

システム割り当てマネージドIDの設定

今回は、Azure VMコネクタの認証として、システム割り当てマネージドIDを利用しています。
Logic Appsに対しては、仮想マシンの起動に必要なロール(役割)を割り当てる必要があります。
今回は、仮想マシンの共同作成者のロールを割り当てています。

システム割り当てマネージドID設定
マネージドIDを有効化します。
Logic AppsのリソースメニューでIDを選択します。
状態をオンにし保存します。
システム割り当てマネージドID有効化確認メッセージが表示されます。
”はいを選択します。
ロールを割り当てます。
Azureロールの割り当てを選択します。
ロールの割り当ての追加を選択します。
スコープはリソースグループを選択します。
仮想マシンがあるリソースグループを選択します。
役割は仮想マシン共同作成者を選択しています。
リソースグループに対してロールの割り当てが設定されていることが確認できます。

ワークフローで起動する仮想マシンのリソース

メール本文に記載された対象の仮想マシンのリソースです。
今回はこの仮想マシンを起動します。

    • リソースグループ名:test-rg
    • 仮想マシン名:test-vm-01
起動対象の仮想マシン

起動対象の仮想マシンです。

Logic Appsを使った仮想マシン起動停止手順については、こちらで紹介しています。

—広告—

メール受信内容を確認して仮想マシンを再起動するワークフロー

今回のワークフローで利用した、Logic Appsのトリガーとアクションです。

    • トリガー
      • Gmail 
        • 新しいメールを1時間間隔で確認
    • アクション
      • 変数の初期化
        • ワークフローで利用する変数を初期化
      • 変数の設定
        • 初期化した変数の値を設定
      • 条件(制御)
        • 送信者メールアドレスや件名を確認し、処理条件を判定
      • Azure VM
        • 指定された仮想マシンを開始

メール本文の例

メール本文の例です。
仮想マシン名は可変であり、文字数も異なる場合を想定しています。
ワークフロー内では、この可変の"仮想マシン名"に続く部分を抽出する処理を実装しています。

※今回は検証目的です。”仮想マシン名”と言う文字列はメール本文に1つと言う想定にしています。

メールテンプレート

想定するメールの文章例です。
仮想マシン名は以下の部分に記載される想定としています。

—–
仮想マシン名:XXXXXXXXXXXXX
—–

 

Gmaiコネクタで新しいメールが届いたときのトリガーを設定

今回は、メール受信の確認にGmailコネクタを使用しています。
Gmailコネクタの新しいメールが届いたときのトリガーを使用します。

新しいメールが届いた時のトリガーを設定
空のロジックアプリを選択します。
検索欄にGmailと入力します。
“新しいメールが届いたとき"を選択します。

Gmailの認証画面が表示されます。
Use default shared applicationを選択すると、利用できるコネクタに制限がかかります。
仮想マシンの起動などAzureリソースの操作を行うコネクタは承認されていません。

Google によって承認されたコネクタ

認証にはBring your own applicationを利用します。
Gmailコネクタの設定に関する詳細については、こちらに記載がございます。

Google で OAuth クライアント アプリケーションを作成する

Client IDとClient SecretはGoogle APIの管理画面で確認します。
これらの値を、トリガーの認証画面で入力します。

Google API コンソール

※事前にGoogle Cloud側でOAuth同意画面の設定と、認証情報(OAuth 2.0 クライアントID)の作成が必要です。

トリガーの認証前に必要な設定があります。
Google Cloud側でリダイレクトURIを設定しておく必要があります。

【リダイレクトURI】

※この設定を忘れると、Googleでの認証時に404エラーが発生します。

トリガーの認証画面でサインインを選択すると、Googleの認証ポップアップが表示されます。
表示された画面で続行を選択します。

アクセス許可の確認画面が表示されます。
Gmailへのアクセスにチェックを入れます。
続行を選択します。

※Gmailのアクセス権限は、必要な作業に応じて調整します。OAuth同意画面のスコープ設定で変更が可能です。

メール受信時の設定が表示されます。
Add new parametersでタイムゾーンと開始時刻を選択します。

メール受信をチェックする間隔や実行時間を選択します。
今回は毎時00分に確認する設定としています。

ワークフローで利用した変数の設定

今回ワークフローで利用する変数は、全部で6種類です。

    • 変数
      • 開始位置取得:仮想マシン名が設定されている文字列の開始位置を取得
      • 終了位置取得:仮想マシン名の次に設定されている文字列の位置を取得
      • 開始位置文字数:仮想マシン名の開始位置の文字数を取得
      • 終了位置文字数:仮想マシン名の終了位置の文字数を取得
      • Mail本文:メール本文
      • 仮想マシン名:再起動対象の仮想マシン名

仮想マシン名は、文字数の情報を利用して抽出しています。

各文字位置の取得について

開始位置取得は、メール本文内に"仮想マシン名"という文字列がある位置(文字数)を取得します。

終了位置取得は、メール本文内で一番最後に記載されている"—–“の位置(文字数)を取得します。

開始位置文字数は、開始位置取得(変数)に"仮想マシン名:"(7文字)を加算して、仮想マシン名の開始位置の文字数としています。

終了位置文字数は、終了位置取得(変数)から1を減算して、仮想マシン名の終了位置の文字数としています。

変数の初期化

ワークフローで利用する変数を初期化します。

変数の初期化
検索欄に"変数を初期化"と入力します。
“変数を初期化する"を選択します。
変数"開始位置取得"を初期化します。
種類には整数を選択します。
変数”終了位置取得”を初期化します。
種類には整数を選択します。
変数”開始位置文字数”を初期化します。
種類には整数を選択します。
変数”終了位置文字数”を初期化します。
種類には整数を選択します。
変数”Mail本文”を初期化します。
種類には文字列を選択します。
値には”新しいメールが届いた時”の本文を選択します。
変数”仮想マシン名を初期化します。
種類には文字列を選択します。
変数の初期化設定が完了すると、6個のアクションが定義されます。

indexOfを使って文字列の開始位置を取得

式関数indexOfを使用して、メール本文中の仮想マシン名の開始位置を取得します。

indexOf

indexOfを使用すると、指定した文字列がメール本文のどの位置から始まるか(文字数)を取得することができます。
戻り値は数値となります。
今回は、メール本文内の"仮想マシン名"の"仮"が現れる文字列位置を取得しています。

取得対象となるメール本文の文字位置
想マシン名:test-vm-01

indexOfを使って文字列の位置を取得
検索欄に"変数の設定"と入力します。
表示された"変数の設定"を選択します。

名前で"開始位置取得"を選択します。
値には以下の式関数を設定します。

【式関数】
indexOf(variables('Mail本文’),’仮想マシン名’)

lastIndexOfを使って文字列の終了位置を取得

式関数lastIndexOfを使用して、メール本文の仮想マシン名の終了位置を取得します。
仮想マシン名に続く文字列"—–“の位置を取得します。

lastIndexOf

lastIndexOfは、指定した文字列が複数回含まれている場合、最も後ろ(最後)に出現する文字列の開始位置を取得できます。
今回、メール本文に"—–“が2回登場していますが、2回目(最後)の開始位置を取得します。

取得対象となるメール本文の文字位置

—–
想マシン名:test-vm-01
—-

lastIndexOfを使って文字列の位置を取得

名前で"終了位置取得"を選択します。
値には以下の式関数を設定します。

【式関数】
lastIndexOf(variables('Mail本文’),’—–')

取得した文字位置を調整する

仮想マシン名の正確な文字位置に合わせるため、固定の文字数分を調整します。

    • 開始位置文字数:開始位置取得に"仮想マシン名:"の7文字分を加算
    • 終了位置文字数:終了位置取得から2文字を減算(改行が含まれているため、2文字減算します)
取得した文字位置を修正

add関数を使って、変数(開始位置取得)に7を加算します。

【式関数】
add(variables('開始位置取得’),7)

add

sub関数を使って、変数(終了位置取得)から2減算します。

【式関数】
sub(variables('終了位置取得’),2)

sub

Sliceを使って特定の範囲の文字を取得

式関数sliceはを利用して、指定した開始位置から終了位置までの文字列を抽出することができます。
今回の場合は、メール本文から仮想マシン名を取得します。

Sliceを使って仮想マシン名を取得

名前には"仮想マシン名"を選択します。
値には以下の式関数を設定します。

【式関数】
Slice(variables('Mail本文’), variables('開始位置文字数’), variables('終了位置文字数’))

すべての変数の設定が完了すると、5つのアクションが作成されます。

ワークフローの実行条件を設定

今回は差出人と件名で条件を設定しています。

    • 条件(And条件)
      • 差出人が特定のメールアドレスであること
      • 件名に"仮想マシン起動"が含まれていること
条件の設定
条件は2つ設定します。
Andを選択します。

新しいメールが届いた時のアクションの差出人を選択します。
次の値を含むを選択します。
新しいメールが届いた時のアクションの件名を選択します。
次の値を含むを選択します。

条件に合致する場合は仮想マシンを起動

条件に合致する場合に実行するワークフローを設定します。
仮想マシンを起動するアクションを設定します。

仮想マシンを起動するアクションを設定
条件がTrueの場合を選択します。
アクションの追加を選択します。
検索欄に仮想マシンと入力します。
仮想マシンの開始を選択します。
仮想マシンがあるサブスクリプションやリソースグループを選択します。
仮想マシンには変数(仮想マシン名)を指定します。
Trueの場合に、仮想マシンの開始アクションが設定されます。

—広告—

メールを受信した時に仮想マシンが起動するかワークフローを実行して確認

メールを受信した時に、ワークフローが正しく実行されるかを確認します。

ワークフローの実行状況を確認
条件に合致する送信先に、メールを送信します。
メールを受信するとワークフローの実行が開始されます。
実行後の結果を確認します。
開始位置の取得値は72になります。
終了位置取得は91になります。
開始位置の文字数は79になります。
終了位置の文字数は89になります。
仮想マシン名はtest-vm-01です。
メール本文から仮想マシン名が正しく抽出できていることが確認できます。
仮想マシンの開始も正常に実行されていることが確認できます。

—広告—

最後に

Logic Appsを使用してメール受信から、メール本文から仮想マシン名を取得、起動できることを確認しました。
取得した仮想マシン名を使用して仮想マシンを起動することもできました。
今回は検証用のワークフローなので最低限の設定としていますが、基本的な動作は確認できました。
今回はメール本文から仮想マシン名を抽出しましたが、他の用途にも応用できそうです。

引き続き、いろいろ試してみたいと思います。

Logic Appsを使ってLog Analyticsのクエリ実行結果をメール送信する方法については、こちらで紹介しています。

Logic Appsを使ってストレージアカウントのファイル操作する方法については、こちらで紹介しています。

スポンサーリンク