Google Cloud FunctionsがRubyに対応したのでCustomers Mail Cloudと連携させてみた

Google Cloud FunctionsはいわゆるFaaS(Functions as a Service)になります。JavaやC#、Node.js、Pythonなどに対応していましたが、2021年1月からRuby(2.6または2.7系)にも対応しました。

今回はCustomers Mail CloudのRubyライブラリを使って、Google Cloud Functionsからメール送信を試してみます。

Google Cloud SDKのセットアップ

Google Cloudでは各機能を使いこなすためのCLIツールを提供しています。Google Cloud SDK のインストール | Cloud SDK のドキュメントより、各OSに合わせてインストールを行ってください。セットアップが完了すると、gcloudというコマンドが使えるようになります。

ベースを準備

まず適当なディレクトリを作成し、その中にGemfileを作成します。内容は次の通りです。

source "https://rubygems.org"

gem "functions_framework", "~> 0.7"
gem 'customers_mail_cloud'
gem 'multipart-post'
gem 'mime-types', '~> 2.99'

ライブラリをインストールします。

bundle install

次に app.rb を作成します。内容は次の通りです。

require "functions_framework"
require 'customers_mail_cloud'
require 'json'

# 関数名は hello_cmc としています
FunctionsFramework.http "hello_cmc" do |_request|
  # POST以外は拒否
  unless _request.post?
    return [405, {}, ["Only POST requests are accepted."]]
  end
  # POSTされた情報を読み込み
  params = JSON.parse(_request.body.read, symbolize_names: true)
  # Customers Mail Cloudの準備
  client = CustomersMailCloud::Client.new(ENV['API_USER'], ENV['API_KEY'])
  # Fromのメールアドレスを設定
  client.from = CustomersMailCloud::MailAddress.new(ENV['FROM_ADDRESS'], ENV['FROM_NAME'])
  # 契約情報を設定
  client.trial
  # 宛先を設定
  client.to << CustomersMailCloud::MailAddress.new(params[:to], params[:name])
  # 件名を設定
  client.subject = 'テストメール from Google Cloud Functions by Ruby'
  # 本文を設定
  client.text = 'これはテストメールの本文です'
  # 送信
  client.send
end

これをテスト起動します。環境変数を準備した上で実行します。

API_USER=api@smtps.jp \
API_KEY=API_KEY \
FROM_ADDRESS=info@smtps.jp \
FROM_NAME=Admin \
bundle exec functions-framework-ruby --target hello_cmc

ローカルでは http://localhost:8080/ で実行できるようになります。

$ curl -XPOST -H "application/json" -d '{"to": "to@smtps.jp", "name": "ユーザ"}' http://localhost:8080/

これでメールが送れれば問題ありません。

Google Cloud Functionsへデプロイ

ではデプロイ操作です。まず .env.yaml というファイルを用意します。これはGoogle Cloud Functionsの環境設定情報を書いたファイルです。内容は次のようになります。

API_USER: api@smtps.jp
API_KEY: API_KEY
FROM_ADDRESS: info@smtps.jp
FROM_NAME: Admin

ファイルを設置したら、デプロイします。今回は認証なしでも実行できるようにしていますが、必要に応じて制御してください。

gcloud functions deploy hello_cmc \
  --runtime ruby26 \
  --trigger-http \
  --allow-unauthenticated \
  --env-vars-file .env.yaml

デプロイしたら実行してみます。

curl -XPOST \
  -H "Content-Type: application/json" \
  -d '{"to": "user@smtps.jp", "name": "ユーザ"}' \
  https://us-central1-aaaaa.cloudfunctions.net/hello_cmc

結果、メールの送信IDが返ってくれば完成です。

{"id":"<ba81ea70-6d36-11eb-9ae3-9ca3ba30b181@mta04.sandbox.smtps.jp>"}

まとめ

Google Cloud Functionsを使えばスケーラブルなメール送信が容易に実現できます。急激にアクセスが増えるお問い合わせフォームでも問題なく運用できるでしょう。Customers Mail Cloudも大量のメール配信を安定して実現します。

ぜひGoogle Cloud FunctionsとCustomers Mail Cloudを組み合わせてメール送信を行ってください。

クラウドからのメール送信を簡単に。確実に。| Customers Mail Cloud