Google Cloud Launcher経由でSendGridを使う


## Google Cloud Launcher？

よく使われるソフトウェア、パッケージ、サービスをGCP上でデプロイ、統合することができる。

[Google Cloud Platform Japan 公式ブログ: Cloud Launcher を使って人気のソフトウェア パッケージをデプロイする](http://googlecloudplatform-japan.blogspot.jp/2015/03/cloud-launcher.html)
[Google Cloud Launcherで、よく使われる120あまりのオープンソースパッケージを素早くデプロイできる | TechCrunch Japan](http://jp.techcrunch.com/2015/03/27/20150326google-cloud-launcher-lets-developers-quickly-deploy-over-120-popular-open-source-packages/)


##  SendGridのセットアップ

[Cloud Launcher](https://console.cloud.google.com/launcher/details/sendgrid-app/sendgrid-email)からSendGridの利用を開始できるようになっている。

![Kobito.x6CxL0.png](https://qiita-image-store.s3.amazonaws.com/0/82948/69db7e3d-9127-d691-7940-9f44456a2047.png "Kobito.x6CxL0.png")

プラン一覧。
今回は送信テストを行うだけなのでFreeプランを選択。
Freeでも月間12,000通の送信が可能。

![Kobito.3Q1xXq.png](https://qiita-image-store.s3.amazonaws.com/0/82948/36aeaddb-73f2-047b-8406-8b0d97f63e9b.png "Kobito.3Q1xXq.png")

SendGridのユーザ登録(メールアドレス確認を含む)が完了すると、
Cloud LauncherからSendGridのサイト上にある設定画面に遷移することができるようになる。

![Kobito.LBqs67.png](https://qiita-image-store.s3.amazonaws.com/0/82948/d42c58d9-6f70-47c4-6c2f-7e52e262e5c6.png "Kobito.LBqs67.png")

SendGridの管理画面上で、`Create API Key` > `General API Key` を選択し、APIキーを生成する。
キーに与える権限は項目ごとに細かく設定できるが、
今回はメールの送信をテストするだけなので `Mail Send` のみにフルアクセスを与える。

![Kobito.EoOBpX.png](https://qiita-image-store.s3.amazonaws.com/0/82948/e847511c-9f63-7dd4-c2e0-764d673a8f65.png "Kobito.EoOBpX.png")

## メール送信

今回はRubyから送信する。公式の `sendgrid-ruby` gemが用意されているので、それを使う。

[GitHub - sendgrid/sendgrid-ruby: Official Ruby Gem for the SendGrid email Web API.](https://github.com/sendgrid/sendgrid-ruby)

今回は折角なので送信元もCloud Launcherから立ち上げたRubyスタックを使う。
RubyスタックはBitnamiから提供されている。

`Compute Engine 上で起動` を押して待つこと数分。

![Kobito.TzIO6Z.png](https://qiita-image-store.s3.amazonaws.com/0/82948/acc5a1df-326b-feb8-a69a-07b91d132a67.png "Kobito.TzIO6Z.png")

ゾーンやマシンタイプ、ディスク容量はここで変更できる。
それらを設定して `デプロイ` を実行。

![Kobito.HshHSx.png](https://qiita-image-store.s3.amazonaws.com/0/82948/dc8ae17b-2724-0669-4512-6076f51c3a5a.png "Kobito.HshHSx.png")

デプロイ完了したらSSHログインして、
`sendgrid-ruby` gemをインストール。

```
$ ruby -v
ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-linux]
$ sudo gem install sendgrid-ruby
```

`sendgrid-ruby` のリポジトリにサンプルがあるので、
これを実行してみる。

[GitHub - sendgrid/sendgrid-ruby: Official Ruby Gem for the SendGrid email Web API.](https://github.com/sendgrid/sendgrid-ruby#usage)

```
require 'sendgrid-ruby'
include SendGrid

from = Email.new(email: 'test@example.com')
subject = 'Hello World from the SendGrid Ruby Library'
to = Email.new(email: 'test@example.com')
content = Content.new(type: 'text/plain', value: 'some text here')
mail = Mail.new(from, subject, to, content)

sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
response = sg.client.mail._('send').post(request_body: mail.to_json)
puts response.status_code
puts response.body
puts response.headers
```

送信に成功すれば `response.status_code` に `202(Accepted)` が返る。

## 所感

実装面では別途SendGridを契約して利用するのと変わらないが、請求をまとめたり、プラン変更をGCPのコンソール上から行えるのは便利だと感じる。

> 利用料金は SendGrid から課金され、Google から請求されます。このサービスは Google Cloud Platform の無料試用の対象です。SendGrid サービスの解約、アップグレード、ダウングレードはいつでも行えます。請求金額は、解約または変更日を基準に日割計算されます。プランは日単位で課金されます。