Knative Function + Gmail通知を使ったイベント駆動メール送信システム構築手順
この記事では、Knative Functionを使って、外部からのHTTPアクセスに応じて自動的にPodが起動し、Gmail経由でメール通知を送信する構成を紹介します。
🔰 Knative Functionとは?
Knative Functionは、Knative Servingの上に構築された軽量な関数実行フレームワークです。
func CLI を使って簡単に関数を初期化、ビルド、デプロイできる
コンテナ化やKubernetesの知識がなくても関数をKubernetesクラスタ上で動作可能
イベントドリブン or HTTPアクセスで自動スケールしながら実行できる
今回の構成では「HTTPアクセス時にPodが自動起動してメール通知を送る」動作を実現します。
🎯 目的構成
外部アクセス(curlなど)
↓
Knative Function(Go関数)
↓
📧 Gmail経由で通知メール送信
✅ 使用環境構成
OS: Ubuntu 22.04
環境: AWS VM / オンプレミス
Kubernetes クラスタに Knative Serving が導入済
Docker Hub にアカウントがあり、docker.io/ にPushできる
Gmailのアカウントを保有している
ステップ1: Gmail アプリパスワードの発行
アプリパスワード発行ページ にアクセス
二段階認証を有効にする
「メール」 + 任意のデバイス名を選んで発行
16桁のアプリパスワードをメモ(後で使います)
ステップ2: 関数(handle.go)にメール送信処理を記述
package function
import (
"fmt"
"io"
"net/http"
"net/smtp"
"os"
)
func Handle(w http.ResponseWriter, r *http.Request) {
body, _ := io.ReadAll(r.Body)
fmt.Println("📨 イベント受信:", string(body))
from := os.Getenv("MAIL_FROM")
pass := os.Getenv("MAIL_PASS")
to := os.Getenv("MAIL_TO")
msg := "From: " + from + "\n" +
"To: " + to + "\n" +
"Subject: 📨 Knative Functionから通知\n\n" +
"イベントが届きました: " + string(body)
err := smtp.SendMail("smtp.gmail.com:587",
smtp.PlainAuth("", from, pass, "smtp.gmail.com"),
from, []string{to}, []byte(msg))
if err != nil {
fmt.Println("メール送信失敗:", err)
} else {
fmt.Println("✅ メール送信成功")
}
fmt.Fprintln(w, "📧 メール送信処理完了")
}
ステップ3: Gmail認証情報をSecret化(.env.yaml)
apiVersion: v1
kind: Secret
metadata:
name: mail-secret
namespace: skupper
stringData:
MAIL_FROM: "your@gmail.com"
MAIL_PASS: "your_app_password"
MAIL_TO: "recipient@example.com"
kubectl apply -f .env.yaml
ステップ4: func.yaml に環境変数をマウント
エディタ等でfunc.yamlを編集します。編集後は適用されるのでapplyの必要はありません。
envVars:
- name: MAIL_FROM
valueFrom:
secretKeyRef:
name: mail-secret
key: MAIL_FROM
- name: MAIL_PASS
valueFrom:
secretKeyRef:
name: mail-secret
key: MAIL_PASS
- name: MAIL_TO
valueFrom:
secretKeyRef:
name: mail-secret
key: MAIL_TO
ステップ5: 関数をビルド・デプロイ
func deploy --registry docker.io/あなたのユーザ名
デプロイ成功後、関数は以下のようなURLで公開されます:
http://myfunc.<namespace>.<your-domain>.sslip.io
ステップ6: curl でアクセス & メール通知を確認
関数にアクセスするだけで、メール送信が実行されます:
もし、クラスタ外からのアクセスをしているなら、NodePort番号を指定する必要があります。
curl http://myfunc.skupper.1.2.3.4.sslip.io -d:port番号(必要があれば)
関数ログを確認:
kubectl logs -l serving.knative.dev/service=myfunc -n user-namespace -c user-container -f
📨 イベント受信: {"message":"手動メール送信"}
✅ メール送信成功
🎉 おわりに
Knative Function は、Kubernetesクラスタ上でHTTPアクセスをトリガーにPodを自動起動して関数実行できる強力な仕組みです。
今回の例では「メール通知」でしたが、knative eventingと組み合わせたりすることで
Slack通知
LINE通知
GitHub Webhook連携
外部API連携
などにも応用できます。軽量な自動通知システムを構築したい方にはぜひおすすめの技術です!