Azure Automationアカウント(Runbook)でSendGridを使ったメール送信

Automationアカウント,Azure,SendGrid

Azure AutomationアカウントのRunbookでSendGridを使ったメール送信を試してみました。
 今回はAzure VMのPower Statusを取得してメール送信するRunbook(PowerShell)を作成してみました。

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

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

スポンサーリンク

Automationアカウントの資格情報にSendGridアカウントを保存

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

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

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

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

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

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

AutomationアカウントでRunbookを作成

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

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

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

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

Runbookを編集(SendGrid(SMTP Relay)を使ってメール送信)

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

今回はVMのステータスを取得してSendGrid経由でメール送信を行うようにしています。資格情報名(今回は”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メールを送信する事が出来ました。