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

2021-01-24Automationアカウント,Azure,SendGrid,Virtual Machine

Azure AutomationアカウントでのSendGridを使ってメール送信する手順のご紹介です。
RunbookからAutomationアカウントの資格情報を取得する手順についても記載しています。
例として仮想マシン(Azure VM)のステータスを取得してメール送信するRunbookを作成しています。

RubookはPowerShellで作成しています。
※PowerShell 7.2のRunbookを利用しています。

スポンサーリンク

RunbookでにSendGridアカウントを保存

SendGridのアカウント作成やAPI Key発行

Azure上でのSendGridのアカウント発行からAPI Key発行までの手順はこちらの記事で紹介しています

Automationアカウントの作成やRunbookの作成

AutomationアカウントやRunbookの作成手順などについてはこちらで紹介しています。

Automationアカウントの資格情報にAPI Key(SendGrid)を保管

SendGrid送信時に利用するAPI KeyはAutomationアカウントの資格情報に保管します。

※資格情報ではなくKey Vaultのシークレット使用して取得するという方法もあります。

資格情報を設定

Automationアカウントで資格情報のリソースメニューを選択します。
資格情報を追加します。
ユーザー名には"apikey"と設定します。
パスワードにはSendGridで発行したAPI Keyの値を設定します。

※ユーザー名は固定です。

Automationアカウントの資格情報取得設定画面
Automationアカウントの資格情報画面

マネージドIDを設定

マネージドIDの設定自体はSendGridを使ったメール送信には直接関連しません。
今回Runbook内で仮想マシンのステータスを取得しています。
必要な権限をAutomationアカウントに割り当てます。
今回はシステム割り当てマネージドIDで閲覧者の権限を割り当てています。

ロールの割り当て
AutomationアカウントのIDのリソースメニューでシステム割り当てマネージドIDを設定します。
閲覧者の権限を割り当てています。
ロールの割り当て画面

SendGridを使ってメール送信するRunbookを作成

Runbookを作成します。
資格情報の取得にはGet-AutomationPSCredentialを使用します。

資格情報へのアクセスに使用するその他のコマンドレット

Get-AzAutomationCredentialでは設定したパスワードの値は取得しません。

Get-AzAutomationCredential

メール送信にはSend-MailMessageを使用しています。

Send-MailMessage

SMTPサーバーとして"smtp.sendgrid.net"としています。
Credentialに取得した資格情報を設定しています。

※2024年現在ではセキュリティの観点からSend-MailMessageは推奨されてません。

仮想マシンのステータスを取得してメール送信するRunbook
#Runbookの認証処理
Disable-AzContextAutosave -Scope Process
$AzureContext = (Connect-AzAccount -Identity).context
$AzureContext = Set-AzContext -SubscriptionName $AzureContext.Subscription -DefaultProfile $AzureContext

#ステータスを取得する仮想マシン
$ResourceGroupName =“仮想マシンのリソースグループ"
$VirtualMachineName =“仮想マシン名"

#メールアドレス
$ToMailAddress = “宛先メールアドレス"
$FromMailAddress = “送信元メールアドレス"
#仮想マシンのステータスを取得
$VMStatus = Get-AzVM -Name $VirtualMachineName -resourceGroupName $ResourceGroupName -Status| `
select-Object Name,@{n="Status"; e={$_.Statuses[1].Code}}| `
ConvertTo-HTML

#SendGridの資格情報を取得(Nameには資格情報名を設定)
$SmtpCredential = Get-AutomationPSCredential -Name “sendgrid"

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(“$VirtualMachineName のステータス"))

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

Runbookをテスト

作成したRunbookをテストします。
テストウィンドウから実行しています。

テストを実行
Runbookでテストウィンドウを実行します。
正常終了している事が確認できます。
宛先に指定したメールアドレスで、仮想マシンのステータスが記載されたメールを確認できました。
Runbookテストウィンドウへの遷移
Runbookテストウィンドウ(テスト完了画面)

最後に

RunbookからSendGridを使ってメール送信する手順を確認してみました。
資格情報にAPI Keyを保管する事で利用できる事が分かりました。

引き続き色々試してみたいと思います。

Logic AppsのワークフローでSendGridを使ってメール送信する手順についてはこちらで紹介しています。

RubookをLogic Appsのワークフローで実行する手順についてはこちらで紹介しています。

スポンサーリンク