0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Knative Function + Gmail通知を使ったイベント駆動メール送信システム構築手順

Posted at

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連携

などにも応用できます。軽量な自動通知システムを構築したい方にはぜひおすすめの技術です!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?