Logic AppsでGmail受信した時にメール本文から仮想マシン名を取得して起動するワークフロー
システム運用業務に携わっていると、メールで作業依頼を受け取るケースがあります。
メールから作業依頼の内容を自動的に取得できると便利そうだということで、仮想マシン(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に対しては、仮想マシンの起動に必要なロール(役割)を割り当てる必要があります。
今回は、仮想マシンの共同作成者のロールを割り当てています。
ワークフローで起動する仮想マシンのリソース
メール本文に記載された対象の仮想マシンのリソースです。
今回はこの仮想マシンを起動します。
-
- リソースグループ名:test-rg
- 仮想マシン名:test-vm-01
起動対象の仮想マシン | |
起動対象の仮想マシンです。 |
![]() |
Logic Appsを使った仮想マシン起動停止手順については、こちらで紹介しています。
—広告—
メール受信内容を確認して仮想マシンを再起動するワークフロー
今回のワークフローで利用した、Logic Appsのトリガーとアクションです。
-
- トリガー
- Gmail
- 新しいメールを1時間間隔で確認
- Gmail
- アクション
- 変数の初期化
- ワークフローで利用する変数を初期化
- 変数の設定
- 初期化した変数の値を設定
- 条件(制御)
- 送信者メールアドレスや件名を確認し、処理条件を判定
- Azure VM
- 指定された仮想マシンを開始
- 変数の初期化
- トリガー
メール本文の例
メール本文の例です。
仮想マシン名は可変であり、文字数も異なる場合を想定しています。
ワークフロー内では、この可変の"仮想マシン名"に続く部分を抽出する処理を実装しています。
※今回は検証目的です。”仮想マシン名”と言う文字列はメール本文に1つと言う想定にしています。
メールテンプレート | |
想定するメールの文章例です。 —–
|
![]() |
Gmaiコネクタで新しいメールが届いたときのトリガーを設定
今回は、メール受信の確認にGmailコネクタを使用しています。
Gmailコネクタの新しいメールが届いたときのトリガーを使用します。
ワークフローで利用した変数の設定
今回ワークフローで利用する変数は、全部で6種類です。
-
- 変数
- 開始位置取得:仮想マシン名が設定されている文字列の開始位置を取得
- 終了位置取得:仮想マシン名の次に設定されている文字列の位置を取得
- 開始位置文字数:仮想マシン名の開始位置の文字数を取得
- 終了位置文字数:仮想マシン名の終了位置の文字数を取得
- Mail本文:メール本文
- 仮想マシン名:再起動対象の仮想マシン名
- 変数
仮想マシン名は、文字数の情報を利用して抽出しています。
変数の初期化
ワークフローで利用する変数を初期化します。
indexOfを使って文字列の開始位置を取得
式関数indexOfを使用して、メール本文中の仮想マシン名の開始位置を取得します。
indexOfを使用すると、指定した文字列がメール本文のどの位置から始まるか(文字数)を取得することができます。
戻り値は数値となります。
今回は、メール本文内の"仮想マシン名"の"仮"が現れる文字列位置を取得しています。
取得対象となるメール本文の文字位置
仮想マシン名:test-vm-01
indexOfを使って文字列の位置を取得 | |
検索欄に"変数の設定"と入力します。 表示された"変数の設定"を選択します。 |
![]() |
名前で"開始位置取得"を選択します。 【式関数】 |
![]() |
lastIndexOfを使って文字列の終了位置を取得
式関数lastIndexOfを使用して、メール本文の仮想マシン名の終了位置を取得します。
仮想マシン名に続く文字列"—–“の位置を取得します。
lastIndexOfは、指定した文字列が複数回含まれている場合、最も後ろ(最後)に出現する文字列の開始位置を取得できます。
今回、メール本文に"—–“が2回登場していますが、2回目(最後)の開始位置を取得します。
取得対象となるメール本文の文字位置
—–
仮想マシン名:test-vm-01
–—-
lastIndexOfを使って文字列の位置を取得 | |
名前で"終了位置取得"を選択します。 【式関数】 |
![]() |
取得した文字位置を調整する
仮想マシン名の正確な文字位置に合わせるため、固定の文字数分を調整します。
-
- 開始位置文字数:開始位置取得に"仮想マシン名:"の7文字分を加算
- 終了位置文字数:終了位置取得から2文字を減算(改行が含まれているため、2文字減算します)
取得した文字位置を修正 | |
add関数を使って、変数(開始位置取得)に7を加算します。 【式関数】 |
![]() |
sub関数を使って、変数(終了位置取得)から2減算します。 【式関数】 |
![]() |
Sliceを使って特定の範囲の文字を取得
式関数sliceはを利用して、指定した開始位置から終了位置までの文字列を抽出することができます。
今回の場合は、メール本文から仮想マシン名を取得します。
Sliceを使って仮想マシン名を取得 | |
名前には"仮想マシン名"を選択します。 【式関数】 |
![]() |
すべての変数の設定が完了すると、5つのアクションが作成されます。 | ![]() |
![]() |
ワークフローの実行条件を設定
今回は差出人と件名で条件を設定しています。
-
- 条件(And条件)
- 差出人が特定のメールアドレスであること
- 件名に"仮想マシン起動"が含まれていること
- 条件(And条件)
条件の設定 | |
条件は2つ設定します。 Andを選択します。 |
![]() |
新しいメールが届いた時のアクションの差出人を選択します。 次の値を含むを選択します。 |
![]() |
新しいメールが届いた時のアクションの件名を選択します。 次の値を含むを選択します。 |
![]() |
条件に合致する場合は仮想マシンを起動
条件に合致する場合に実行するワークフローを設定します。
仮想マシンを起動するアクションを設定します。
仮想マシンを起動するアクションを設定 | |
条件がTrueの場合を選択します。 アクションの追加を選択します。 |
![]() |
検索欄に仮想マシンと入力します。 仮想マシンの開始を選択します。 |
![]() |
仮想マシンがあるサブスクリプションやリソースグループを選択します。 仮想マシンには変数(仮想マシン名)を指定します。 |
![]() |
Trueの場合に、仮想マシンの開始アクションが設定されます。 | ![]() |
—広告—
メールを受信した時に仮想マシンが起動するかワークフローを実行して確認
メールを受信した時に、ワークフローが正しく実行されるかを確認します。
—広告—
最後に
Logic Appsを使用してメール受信から、メール本文から仮想マシン名を取得、起動できることを確認しました。
取得した仮想マシン名を使用して仮想マシンを起動することもできました。
今回は検証用のワークフローなので最低限の設定としていますが、基本的な動作は確認できました。
今回はメール本文から仮想マシン名を抽出しましたが、他の用途にも応用できそうです。
引き続き、いろいろ試してみたいと思います。
Logic Appsを使ってLog Analyticsのクエリ実行結果をメール送信する方法については、こちらで紹介しています。
Logic Appsを使ってストレージアカウントのファイル操作する方法については、こちらで紹介しています。