Azure Automationアカウント RunbookでSend Gridを使ったメール送信

Azure Automationアカウント+SendGridの組み合わせてRunbookを使ったメール送信を試してみました。

 今回はサンプルでAzure VMのPower Statusを取得してメール送信するRunbook(Power Shell)を作成してみました。

Send Gridのアカウント作成についてはこちら。

Send Gridアカウント作成後の設定についてはこちら。

スポンサーリンク

AutomationアカウントでSend Gridアカウントを資格情報に保存する

Send Gridを使ってメール送信する場合は、Send Gridの認証が必要になります。今回はSend Gridでの送信はSmtp Relayを利用します。(Web Api Keyによる方法もあります。)

Automationアカウントの場合は資格情報に保存します。

資格情報のメニューで資格情報の追加をクリックします。

新しい資格情報が表示されるので、Send Gridアカウントの名前、ユーザー名、パスワードを入力します。Send GridでApi Keyを利用している場合はAPI Keyの値を入力します。今回名前はSendGridAccountとしています。

      • 名前:任意の名前(今回はSendGridAccountと設定)
      • ユーザー名:apikey(API Keyを利用の場合)
      • パスワード:SendGridのAPI Keyに設定されているパスワード

作成が完了すると、下記のように資格情報の一覧が表示されます。

AutomationアカウントでRunbookを作成する。

AutomationアカウントでPower Shellを実行する為にはRunbookを使います。

1) Runbook をクリックし画面上部の [Runbook の追加] をクリックします。

2)Runbookの作成画面が表示されます。名前(今回はVM-Status)を入力し、Runbookの種類を選択します。今回はPower Shellを選択します。

これでRunbookの作成は終了です。

Runbookを編集する(Send Grid(SMTP Relay)を使ってVMのステータスをメール送信)

Runbookの編集画面が表示されますのでこちらのサンプルを入力してください。GitHubにも同じものを置いてます。

今回はVMのステータスを取得してSend Grid経由でメール送信を行うようにしています。資格情報名(今回は”SendGridAccount”としています)は必要に応じて修正下さい。

      • Azure VMを指定(VM名、リソースグループ名)
      • FromアドレスとToアドレスを指定

#VM Status
Param(
[parameter(Mandatory=$True)]
[string]$vmName,
[parameter(Mandatory=$True)]
[string]$resourceGroupName,
[parameter(Mandatory=$True)]
[string]$FromMailAddress,
[parameter(Mandatory=$True)]
[string]$ToMailAddress
)

$Conn = Get-AutomationConnection -Name AzureRunAsConnection
Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID `
-ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint

# VMのステータスを取得
$VMStatus = Get-AzVM -Name $vmName -resourceGroupName $resourceGroupName -Status| `
select-Object Name,@{n="Status"; e={$_.Statuses[1].Code}}| `
ConvertTo-HTML

# SendGrid の資格情報を取得
$SmtpCredential = Get-AutomationPSCredential -Name “SendGridAccount

function EncodeSubject($s) {
$enc = [Text.Encoding]::GetEncoding(“csISO2022JP")
$s64 = [Convert]::ToBase64String($enc.GetBytes($s), [Base64FormattingOptions]::None)
return [String]::Format(“=?{0}?B?{1}?=", $enc.HeaderName, $s64)
}

$Subject = EncodeSubject(EncodeSubject(“$vmName のステータス"))

Send-MailMessage `
-To “$ToMailAddress" `
-Subject $Subject `
-Body “$VMStatus" `
-UseSsl `
-Port 587 `
-SmtpServer 'smtp.sendgrid.net’ `
-BodyAsHtml `
-From $FromMailAddress `
-Encoding ([System.Text.Encoding]::UTF8) `
-Credential $SmtpCredential

AutomationアカウントでRunbookのテストをする

Runbookで編集を選択します。

Runbookのテストはテストウィンドウを利用します。

テストウィンドウを開くと以下のようにパラメータが表示されますので、確認したいVMや送信したいメールアドレス等を環境に合わせて設定します。設定が終わったら開始をクリックします。

無事に完了すると完了のメッセージが表示されます。

ToMailAddressに指定したメールアドレスへ、VMのStatusメールを送信する事が出来ました。