Logic AppsでGmail本文内のAzure VM名を取得して起動

Azure,Logic Apps,Virtual Machine

システム運用をやっているとメールで作業依頼を頂くことがあります。
この作業依頼を自動化出来ないか?と言う事でやってみました。
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(ロジックアプリ)のリソースを作成します。

Logic Apps(ロジックアプリ)作成

Logic Apps(ロジックアプリ)のメニューで追加を選択します。

Azure Logic Apps(リソースデプロイ)

Logic Apps(ロジックアプリ)の作成画面で以下の項目を設定します。

  • リソースグループ名
  • ロジックアプリ名
  • リージョン
  • ログ分析
  • プランの種類
  • ゾーン冗長

プランの種類は消費を選択しています。
ロジックアプリ名は”Mail-de-VM-Start”としています。

”確認および作成”を選択します。

 

マネージドID設定

今回はAzure VMのコネクタの認証にはシステム割り当てマネージドIDを利用します。
Logic Apps(ロジックアプリ)にはAzure VM(仮想マシン)起動に必要な役割を付与します。

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

起動対象のAzure VM(仮想マシン)

今回はこちらのAzure VM(仮想マシン)を起動します。

仮想マシン

今回の起動対象にAzure VM(仮想マシン)です。

  •  リソースグループ名
    • test-rg
  • Azure VM名
    • test-vm-01

Logic Apps (ロジックアプリ)を使ったAzure VM(仮想マシン)起動停止についてはこちらでやっております。


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

Logic Apps(ロジックアプリ)はこちらのトリガーとアクションで構成しています。

    • トリガー
      • Gamail 
        • 日本時間朝9時にスケジュール実行
    • アクション
      • 変数の初期化
        • ワークフローで利用する変数を初期化
      • 変数の設定
        • ワークフローで利用する変数の値を設定
      • 条件(制御)
        • 送信者メールアドレスや件名かを確認
      • Azure VM
        • Azure VM(仮想マシン)を開始

メール本文のテンプレート

メール本文のテンプレートです。
Azure VM(仮想マシン)名は可変の想定です。文字数も変わる想定です。
ワークフロー内で可変のAzure VM(仮想マシン)名を抽出します。

メールテンプレート

想定するメールのテンプレートです。
Azure VM(仮想マシン)名は以下の部分に記載される想定です。

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

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

Gmaiトリガー

今回はGmailを利用します。
Gmailコネクタの新しいメールが届いた時トリガーを利用します。

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

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

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

認証にはBring your own applicationを利用します。
Gamilコネクタ設定の詳細についてはこちらも併せて参照願います。

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

Client ID、Client SecretはGoogle APIの画面で確認します。
この値を先ほどの認証画面で設定します。

Google API コンソール

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

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

【リダイレクトURL】
”https://global.consent.azure-apim.net/redirect/gmail”

※この設定を忘れるとGoogle側での認証時に404エラーになります。

サインインを選択するとGoogleの認証ポップアップが表示されます。
続行を選択します。

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

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

Gamil受信時の設定になります。
Add new parametersでタイムゾーン、開始時刻を選択します。

今回は毎時(00分)に確認するようにしています。

ワークフローで利用する変数

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

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

Azure VM(仮想マシン)名は文字数を取得して抽出するようにしています。

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

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

終了位置取得は"—–“とメール本文内で一番最後に記載がある位置(文字数)を取得します。

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

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

変数の初期化

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

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

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

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

indexOf

indexOfを使うと開始位置の文字数を取得する事が出来ます。戻り値は数値になります。
メール本文の”仮想マシン名”の”仮”の文字位置を取得しています。

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

想マシン名:test-vm-01

indexOf
検索欄に変数の設定と入力します。
変数の設定を選択します。

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

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

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

式関数lastIndexOfを使ってメール本文の仮想マシン名の終了位置を取得します。
Azure VM(仮想マシン名)から続く文字列”—–”の位置を取得します。

lastIndexOf

lastIndexOfの場合は、複数同じ値が存在する場合に一番最後の値の開始位置の文字数を取得する事が出来ます。
今回メール本文に”—–”が2回登場しますが2回目の戻り値を取得します。

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

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

lastIndexOf

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

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

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

Azure VM(仮想マシン名)の文字位置にあわせる為に固定の文字数分を調整します。

    • 開始位置文字数:開始位置取得から”仮想マシン名:”の7文字分を追加
    • 終了位置文字数:終了位置取得から2文字減算(改行があるので2文字になります)
文字位置を取得

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

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

式関数の詳細の詳細はaddを参照願います。

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

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

式関数の詳細の詳細はsubを参照願います。

Sliceを使ってAzure VM(仮想マシン)名を取得

式関数Sliceを使ってメール本文からAzure VM(仮想マシン)名を取得します。
Sliceは指定した文字位置の値を取得する事が出来ます。

Sliceを使ってAzure VM(仮想マシン)名を取得

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

【式関数】

Slice(variables('Mail本文’), variables('開始位置文字数’), variables('終了位置文字数’))
すべての変数の設定が完了すると5つのアクションが作成されます。

条件を設定

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

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

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

Azure VM(仮想マシン)を起動

Azure VM(仮想マシン)を起動するアクションを設定します。

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

メールを送信してワークフローを確認

メールを送信してワークフローが実行されるか確認します。

メール送信
テンプレートに沿ってメールを送信します。
メールを受信するとワークフローが実行開始されました。
実行後の結果を確認します。
開始位置取得は72になります。
終了位置取得は91になります。
開始位置文字数は72になります。
終了位置文字数は89になります。
仮想マシン名はtest-vm-01となっています。
メール本文からAzure VM(仮想マシン)名が抽出出来ている事が確認出来ます。
仮想マシンの開始も実行されている事が確認出来ます。

最後に

Logic Apps(ロジックアプリ)を使ってメール本文からAzure VM(仮想マシン)名を取得出来る事が確認出来ました。
取得したAzure VM(仮想マシン)名を使って起動する事も出来ました。

ワークフロー自体はまだまだ改善する部分はあるのですが動作自体は確認出来ました。
今回はAzure VM(仮想マシン名)を抽出していますがその他でも応用できそうです。
今後も引き続き色々試してみたいと思います。

Logic Apps(ロジックアプリ)を使ってLog Analyticsのクエリ実行結果をメール送信する方法についてはこちらに纏めています。

Logic Apps(ロジックアプリ)を使ってLog Analyticsのクエリ実行結果をストレージアカウントに保管する方法についてはこちらに纏めています。

スポンサーリンク