Dockerを使ったSendGrid公式ライブラリ実行環境の構築

Dockerを使ったSendGrid公式ライブラリ実行環境の構築

はじめに

【SendGrid公式ライブラリを使ってメールを送る】シリーズでは様々なプログラミング言語からSendGridを通じてメールを送信するサンプルをご紹介してきました。

今回は、Dockerを利用してこれらのサンプル実行環境を簡単に構築するための方法をご紹介します。SendGridの公式ライブラリは常に機能が追加・改善され続けています。時にはインターフェイスも変更されることもあるため、サンプルを簡単に実行できるよう準備しておくことで変更を簡単にキャッチアップすることができるようになります。

前提条件

事前にDocker(Version 1.0)が動作する環境を構築する必要があります。Docker環境の構築方法については、Docker公式サイトをご覧ください。
本記事の内容はMac OS上に環境構築したものですが、その他のOSでも基本的に手順は同じです。

【SendGrid公式ライブラリを使ってメールを送る】シリーズのうち、次の言語について環境構築ができます。
・go
・node.js
・php
・python
・ruby

準備

Dockerfileおよびシェルスクリプトをリポジトリからクローンします。

git clone https://github.com/SendGridJP/sendgridjp-docker-example.git

リポジトリ内に移動して.env.exampleをコピーします。

cd sendgridjp-docker-example
cp .env.example .env

.envファイルを編集します。

.envファイルの編集

.envファイルは以下のような内容になっています。

SENDGRID_USERNAME=your_username
SENDGRID_PASSWORD=your_password
TOS=you@youremail.com,friend1@friendemail.com,friend2@friendemail.com
FROM=you@youremail.com
  • SENDGRID_USERNAME
    SendGridのユーザ名を指定してください。
  • SENDGRID_PASSWORD
    SendGridのパスワードを指定してください。
  • TOS
    宛先をカンマ区切りで指定してください。サンプルコードの関係上、宛先は3つ以上指定してください。
  • FROM
    送信元アドレスを指定してください。

Docker Build

Dockerイメージを作成するために次のdocker buildコマンド(ファイルbuild.shに同じ内容が含まれています)を実行します。

docker build -t sendgridjp/sendgridjp-example .

このコマンドはカレントディレクトリのDockerfileを使用してbuildします。
Dockerfileの概要は次の通りです。

  • Ubuntuベースでイメージを作成します。
  • sshをインストールして、rootに対してパスワード設定とsshによるアクセス権を与えます。また、コンテナの22番ポートを開放します。
  • gitおよび各言語の実行環境、パッケージ管理ツールをインストールします。
  • 各サンプルコードをリポジトリからクローンします。
  • パッケージの依存関係を解決します。
  • .envファイルを各サンプルコード実行場所に配置します。

docker buildの実行結果。最後に”Successfully built *******”と表示されていればbuildは完了です。
docker build の実行結果

メールの送信

docker buildが完了したら次のコマンドでメールを送信します(ファイルsend.shに同じ内容が含まれています)。それぞれのコマンドは各言語のサンプルコードを実行してメールを送信しています。

go

docker run -t sendgridjp/sendgridjp-example /bin/bash -l -c "/root/go/sendgridjp-go-example/bin/main"

node.js

docker run -t sendgridjp/sendgridjp-example /bin/bash -l -c "node /root/nodejs/sendgridjp-nodejs-example/sendgrid-nodejs-example.js"

php

docker run -t sendgridjp/sendgridjp-example /bin/bash -l -c "php /root/php/sendgridjp-php-example/sendgrid-php-example.php"

python

docker run -t sendgridjp/sendgridjp-example /bin/bash -l -c "python3.2 /root/python/sendgridjp-python-example/sendgrid-python-example.py"

ruby

docker run -t sendgridjp/sendgridjp-example /bin/bash -l -c "ruby /root/ruby/sendgridjp-ruby-example/sendgridjp-ruby-example.rb"

メールボックスにメールが届いていることが確認できます。
メールの受信トレイ

sshによる接続

コンテナ内で作業を行う場合、生成したコンテナにsshでアクセスします。コンテナ内でsshdを実行(ファイルrun.shに同じ内容が含まれています)します。このコマンドは、コンテナ内でsshdをバックグラウンド実行して、ホストの49200番ポートをコンテナの22番ポートにポートフォワーディングします。

docker run -p 49200:22 -t sendgridjp/sendgridjp-example /usr/sbin/sshd -D &

次にコンテナにsshで接続(ファイルssh.shに同じ内容が含まれています)します。sshのパスワードは、”password”(docker build時に設定したrootのパスワード)です。

ssh root@localhost -p 49200
root@localhost's password:
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.14.1-tinycore64 x86_64)

 * Documentation:  https://help.ubuntu.com/
Last login: Fri May 16 20:20:21 2014 from 10.0.2.2
root@a27b523e3ed1:~# ls
go  nodejs  php  python  ruby
root@a27b523e3ed1:~#

sshで接続することで各サンプルコードの確認や修正を行うことができます。

さいごに

Dockerを使うことで様々な実行環境の構築をコード化したり実行環境を配布することができます。今回はサンプルコード実行環境の構築を簡単にするためにDockerを利用しましたが、例えばDocker Remote APIと組合せて外部に独立したメールの送信環境をリモートから制御する、といったことに利用することができます。