こんにちは!クラウドインフラの世界へようこそ。
日々、TerraformやCloudFormationの複雑な状態管理(State)に頭を悩ませたり、JSONやYAMLの山に埋もれて絶望したりしていませんか?
もしあなたが「インフラをTypeScriptやPythonなどの本当のプログラミング言語で美しく、かつ安全に管理したい」と願っているなら、Pulumi(プルミ)はあなたにとって最高の相棒になります。
今回は、数あるPulumiの機能の中でも、現場のSREたちが「これがないともう夜も眠れない」と口を揃える、Pulumi Cloud(旧Pulumi Service)とDatadogやNew Relicなどの外部オブザーバビリティツールとの連携について、基礎から実践まで優しく、かつ深く解説していきます。
これをマスターすれば、「誰が、いつ、どのインフラリソースをどう変更したか」と「その結果、アプリのレイテンシやエラーレートがどう変動したか」の因果関係がひと目でわかるようになり、障害時の原因究明やロールバックの判断が劇的に早くなりますよ。一緒に見ていきましょう!
—
1. そもそもなぜ、インフラの変更履歴と監視を紐付ける必要があるのか?
インフラエンジニアの日常で、最も胃が痛くなる瞬間はいつでしょうか?
そう、「深夜、突然PagerDutyが鳴り響き、Datadogでエラーレートが跳ね上がっているのを確認した瞬間」ですよね。
慌ててログを見に行きますが、そこにあるのは「アプリケーションのエラー」だけ。
「待てよ、そういえば今日の夕方、誰かがデータベースのセキュリティグループをいじった気がするぞ……?」
こんな時、インフラの変更履歴(誰が・何をデプロイしたか)と、オブザーバビリティツール(Datadog等)のメトリクスがタイムライン上で綺麗に同期していればどうでしょう?
- 「あ、19:42にデプロイされたPulumiのスタック更新が、まさにDBのコネクション枯渇を引き起こしているな」
これが一瞬で特定できれば、迷わず即座に前のバージョンへロールバック(`pulumi stack select` & `pulumi up`)する判断を下せます。この「迷いの時間」をゼロにすることこそが、今回の連携の最大の目的です。
—
2. 全体像の理解:Pulumi Cloudから外へデータを飛ばす仕組み
Pulumiには、インフラの状態管理やチームでの共同作業を支えるマネージド基盤 「Pulumi Cloud」 があります。
Pulumi Cloudは、インフラのデプロイ(`pulumi up`)が走るたびに、以下のようなイベントを検知して外部へ通知する機能を持っています。
1. 監査ログ(Audit Logs): 誰がログインしたか、どのスタックが更新されたか。
2. デプロイ・イベント(Deployment Events): デプロイが成功したのか、失敗したのか、どのリソースが追加・変更・削除されたか。
今回は、このPulumi Cloudの「Webhook機能」を使い、インフラの変更イベントをDatadog(またはNew Relic)のイベントストリームに流し込みます。
—
3. ステップ・バイ・ステップ:環境構築と連携のハンズオン
それでは、実際に手を動かして設定していきましょう。
今回は最も代表的な組み合わせである 「Pulumi Cloud × Datadog」 を例に解説しますが、New Relicの場合もWebhookのエンドポイントが変わるだけで考え方はまったく同じです。
前提条件
- Pulumiアカウントを持っていること(無料プランでOKです)
- Datadogアカウントを持っていること
—
Step 1: Datadog側でWebhookを受信する準備をする
まずは、Pulumiからの通知を受け取るための窓口をDatadog側に作ります。
1. Datadogのコンソールにログインします。
2. 左側メニューの [Integrations] から [Webhooks] を検索し、インテグレーションを追加します。
3. 「New Webhook」をクリックし、以下のように設定します。
- Name: `pulumi-deployment-events`
- Payload: 後述するPulumiからのJSONを受け取れるように、デフォルトのまらか、必要に応じてカスタムペイロードを設定します(今回はDatadogの標準的なイベントAPIフォーマットに合わせます)。
また、PulumiのイベントをDatadogのイベントストリーム(Event Stream)に綺麗に表示させるために、Datadogの API Key を控えておいてください。
—
Step 2: Pulumi CloudでWebhookを設定する
次に、Pulumi Cloud側からDatadogへイベントを飛ばす設定を行います。ここはコードではなく、Pulumi CloudのWebコンソールから設定するのが最も簡単です。
1. [Pulumi Cloud Console](https://app.pulumi.com/) にログインします。
2. 対象の Organization(組織) または Settings に移動します。
3. 左メニューから [Webhooks] を選択し、[Add Webhook] をクリックします。
4. 以下のパラメータを入力します。
- URL: DatadogのWebhooksインテグレーションで発行されたURL(または、中継するAPI Gateway等のURL。DatadogのEvents APIに直接飛ばす場合は DatadogのAPI Endpoint `https://api.datadoghq.com/api/v1/events?api_key=
` を指定します) - Format: `JSON`
- Triggers(トリガー): 以下のイベントにチェックを入れます。
- `stack_cotrol_update_succeeded`(スタック更新成功)
- `stack_cotrol_update_failed`(スタック更新失敗)
これで、Pulumiでインフラが更新されるたびに、その詳細な情報が自動的にDatadogへ飛ぶようになります。
—
Step 3: 精度高い動作確認(HelloWorld)
本当にデータが連携されているか、実際に簡単なPulumiのコードをデプロイして確認してみましょう。
ここでは、TypeScriptを用いた最小限の構成で、AWSのS3バケットを作成する例を使います。
`index.ts`
import as pulumi from “@pulumi/pulumi”;
import as aws from “@pulumi/aws”;
// 意図的な変更テスト用のS3バケット定義
// これをデプロイすると、Pulumi Cloud経由でDatadogにイベントが飛びます
const myBucket = new aws.s3.Bucket(“pulumi-observability-demo-bucket”, {
bucket: `pulumi-demo-log-stream-${pulumi.getStack()}`,
forceDestroy: true,
});
// エクスポートして出力結果を確認
export const bucketName = myBucket.id;
このコードを保存し、ターミナルからお馴染みのコマンドを実行します。
スタックの更新(インフラのデプロイ)
$ pulumi up
デプロイが正常に完了すると、Pulumi Cloudはこのイベントをキャッチし、Step 2で設定したWebhookを通じてDatadogへ通知を送ります。
—
Step 4: Datadogダッシュボードで「インフラ変更」と「メトリクス」を重ね合わせる
さあ、ここからがSREの醍醐味です!Datadogのダッシュボードを開いてみましょう。
1. Datadogの [Events] -> [Event Stream] を開きます。
2. 検索窓に `tag:pulumi` または `source:pulumi` と入力して絞り込みます。
3. 先ほど `pulumi up` を実行したタイミングで、「Stack update succeeded」というイベントがタイムライン上に美しくプロットされているはずです。
💡 現場で効くダッシュボード構築の極意
さらに実用的なアプリケーション監視を行うために、Datadogのタイムボード(Dashboard)に以下の2つのウィジェットを上下に並べて配置してください。
1. 上段: アプリケーションのレイテンシ(p99)とエラーレート(APMメトリクス)の時系列グラフ
2. 下段: Pulumiのイベントストリーム(デプロイ履歴)
これを行うことで、「グラフの山が跳ね上がったまさにその瞬間、下段のイベントストリームで誰がどのリソースを触ったのか」が視覚的に完全同期します。障害対応時の「犯人探し」にかかる時間は、これによって劇的に短縮されます。
—
まとめ:監視とインフラ管理をシームレスにつなごう
今回は、Pulumi CloudのWebhookを活用して、インフラストラクチャの変更履歴をDatadogなどのオブザーバビリティツールに統合する手法を解説しました。
- Pulumiの強みは、コードでインフラを美しく管理できることだけではありません。その変更のライフサイクル全体(Cloud Service)がオープンなAPIやWebhookで外部と繋がっている点に、真のモダンインフラの姿があります。
- 変更履歴とアプリのメトリクスを同じタイムラインに並べるだけで、障害対応のストレスは驚くほど軽減されます。
「インフラの変更が、アプリのメトリクスにどう影響したか」をいつでも手にとるように把握できる環境を手に入れれば、毎日のデプロイメントがもっと楽しく、自信に満ちたものになりますよ。
ぜひあなたの環境でも試してみてくださいね。それでは、快適なPulumiライフを!