Logic AppsでGmail本文内のAzure VM名を取得して起動
システム運用をやっているとメールで作業依頼を頂くことがあります。
この作業依頼を自動化出来ないか?と言う事でやってみました。
Azure VM(仮想マシン)起動の作業依頼を例にLogic Apps(ロジックアプリ)を使って自動化してみました。
Logic Apps(ロジックアプリ)にはMail関連のコネクタが準備されています。
定期的にMailを受信を確認してLogic Apps (ロジックアプリ)のワークフローを実行させることが出来ます。
今回はメール本文に記載したAzure VM(仮想マシン)を抽出し起動するワークフローを作成しています。
メール本文のAzure VM(仮想マシン名)の取得には、indexOf、lastindexOf、Sliceを使っています。
-
- 前提
- Gmailのコネクタを使う
- メール受信を定期的にチェックする
- 特定のFromアドレス、件名の場合を条件にする
- メール本文からAzure VM(仮想マシン)名を抽出する
- Azure VM(仮想マシン)名は可変(文字数も可変)とする
- メール本文記載のAzure VM(仮想マシン)を起動する
- 権限付与はシステム割り当てマネージドIDを利用する
- 前提
※Gmailを使っているのは検証環境の都合です。
Logic Apps(ロジックアプリ)リソース作成からマネージドID割り当て
Logic Apps(ロジックアプリ)のリソースを作成します。
システム割り当てマネージドIDの有効化から権限付与を行います。
リソース作成
Logic Apps(ロジックアプリ)のリソースを作成します。
マネージドID設定
今回はAzure VMのコネクタの認証にはシステム割り当てマネージドIDを利用します。
Logic Apps(ロジックアプリ)にはAzure VM(仮想マシン)起動に必要な役割を付与します。
起動対象のAzure VM(仮想マシン)
今回はこちらのAzure VM(仮想マシン)を起動します。
仮想マシン | |
今回の起動対象にAzure VM(仮想マシン)です。
|
Logic Apps (ロジックアプリ)を使ったAzure VM(仮想マシン)起動停止についてはこちらでやっております。
メール受信内容を確認してAzure VM(仮想マシン)を再起動するワークフロー
Logic Apps(ロジックアプリ)はこちらのトリガーとアクションで構成しています。
-
- トリガー
- Gamail
- 日本時間朝9時にスケジュール実行
- Gamail
- アクション
- 変数の初期化
- ワークフローで利用する変数を初期化
- 変数の設定
- ワークフローで利用する変数の値を設定
- 条件(制御)
- 送信者メールアドレスや件名かを確認
- Azure VM
- Azure VM(仮想マシン)を開始
- 変数の初期化
- トリガー
メール本文のテンプレート
メール本文のテンプレートです。
Azure VM(仮想マシン)名は可変の想定です。文字数も変わる想定です。
ワークフロー内で可変のAzure VM(仮想マシン)名を抽出します。
メールテンプレート | |
想定するメールのテンプレートです。 —– ※”仮想マシン名”と言う文字列はメール本文に1つと言う想定にしています。 |
Gmaiトリガー
今回はGmailを利用します。
Gmailコネクタの新しいメールが届いた時トリガーを利用します。
ワークフローで利用する変数
今回ワークフローで利用する変数は全部で6種類になります。
-
- 変数
- 開始位置取得:Azure VM(仮想マシン)名が設定されている文字列の位置を取得
- 終了位置取得:Azure VM(仮想マシン)名の次に設定されている文字列の位置を取得
- 開始位置文字数:Azure VM(仮想マシン)名の開始文字数を取得
- 終了位置文字数:Azure VM(仮想マシン)名の開始文字数を取得
- Mail本文:メール本文
- 仮想マシン名:再起動対象のAzure VM(仮想マシン名)
- 変数
Azure VM(仮想マシン)名は文字数を取得して抽出するようにしています。
変数の初期化
ワークフローで利用する変数を初期化します。
indexOfを使って文字列の位置を取得
式関数indexOfを使ってメール本文の仮想マシン名の開始位置を取得します。
indexOfを使うと開始位置の文字数を取得する事が出来ます。戻り値は数値になります。
メール本文の”仮想マシン名”の”仮”の文字位置を取得しています。
取得対象となるメール本文の文字位置
仮想マシン名:test-vm-01
indexOf | |
検索欄に変数の設定と入力します。 変数の設定を選択します。 |
|
名前で開始位置取得を選択します。 【式関数】 |
lastIndexOfを使って文字列の位置を取得
式関数lastIndexOfを使ってメール本文の仮想マシン名の終了位置を取得します。
Azure VM(仮想マシン名)から続く文字列”—–”の位置を取得します。
lastIndexOfの場合は、複数同じ値が存在する場合に一番最後の値の開始位置の文字数を取得する事が出来ます。
今回メール本文に”—–”が2回登場しますが2回目の戻り値を取得します。
取得対象となるメール本文の文字位置
—–
仮想マシン名:test-vm-01
–—-
lastIndexOf | |
名前で終了位置取得を選択します。 【式関数】 |
取得した文字位置を調整する
Azure VM(仮想マシン名)の文字位置にあわせる為に固定の文字数分を調整します。
-
- 開始位置文字数:開始位置取得から”仮想マシン名:”の7文字分を追加
- 終了位置文字数:終了位置取得から2文字減算(改行があるので2文字になります)
文字位置を取得 | |
addを使って変数(開始位置取得)に7を追加します。 【式関数】 式関数の詳細の詳細はaddを参照願います。 |
|
subを使って変数(終了位置取得)から2減算します。 【式関数】 式関数の詳細の詳細はsubを参照願います。 |
Sliceを使ってAzure VM(仮想マシン)名を取得
式関数Sliceを使ってメール本文からAzure VM(仮想マシン)名を取得します。
Sliceは指定した文字位置の値を取得する事が出来ます。
Sliceを使ってAzure VM(仮想マシン)名を取得 | |
名前で仮想マシン名を選択します。 【式関数】 Slice(variables('Mail本文’), variables('開始位置文字数’), variables('終了位置文字数’))
|
|
すべての変数の設定が完了すると5つのアクションが作成されます。 | |
条件を設定
今回は差出人と件名で条件設定しています。
-
- 条件(And条件)
- 差出人は特定のメールアドレスである事
- 件名には”仮想マシン起動”と含まれる事
- 条件(And条件)
条件の設定 | |
条件には2つ設定します。 Andを選択します。 |
|
新しいメールが届いた時のアクションの差出人を選択します。 次の値を含むを選択します。 |
|
新しいメールが届いた時のアクションの件名を選択します。 次の値を含むを選択します。 |
Azure VM(仮想マシン)を起動
Azure VM(仮想マシン)を起動するアクションを設定します。
条件がTrueを選択します。 アクションの追加を選択します。 |
|
検索欄に仮想マシンと入力します。 仮想マシンの開始を選択します。 |
|
Azure VM(仮想マシン)がある、サブスクリプションやリソースグループを選択します。 仮想マシンには変数(仮想マシン名)を指定します。 |
|
Trueの場合に仮想マシンの開始アクションが設定されす。 |
メールを送信してワークフローを確認
メールを送信してワークフローが実行されるか確認します。
最後に
Logic Apps(ロジックアプリ)を使ってメール本文からAzure VM(仮想マシン)名を取得出来る事が確認出来ました。
取得したAzure VM(仮想マシン)名を使って起動する事も出来ました。
ワークフロー自体はまだまだ改善する部分はあるのですが動作自体は確認出来ました。
今回はAzure VM(仮想マシン名)を抽出していますがその他でも応用できそうです。
今後も引き続き色々試してみたいと思います。
Logic Apps(ロジックアプリ)を使ってLog Analyticsのクエリ実行結果をメール送信する方法についてはこちらに纏めています。
Logic Apps(ロジックアプリ)を使ってLog Analyticsのクエリ実行結果をストレージアカウントに保管する方法についてはこちらに纏めています。