GCP(Google Cloud Platform)上で、Webサービスを立ち上げるポイントを整理します。オンプレミス(自前でネインターネット接続環境やサーバを調達してシステムを構築)でWebサービスを立ち上げる場合とは違って、クラウドのGCP上で立ち上げる場合に、ハマる点をまとめます。
■ 想定するシステム構成
想定するシステム構成は、以下の通りです。

GCPが提供するコンピュータリソースの中でOSに相当する「GCE」と、RDBに相当する「Cloud SQL」を使います。
GCEのOSの種類としては「Ubuntu」を選択し、CLoud SQLは「MYSQL」を選択します。
Ubuntuには、Anacondaをインストールし、WebアプリケーションとしてPython、Flask、Mailを使います。
実際にWebアプリケーションをサービスとして公開するには、トラフィックをさばける環境が必要になります。
そうなると専用のWebサーバを使い、マルチスレッドでトラフィックをさばけるようにする必要があります。そのため、Python+FlaskのWebアプリケーションを専用のWebサーバであるApacheに連結します
GCEのUbuntuから直接メールを送信することは禁止されています。たとえ、ISPのサブミッションポート(587ポート)を使っても、直接、メールを送信することはできません。
そのため、メール中継サービス(SendGrid)を経由して送信します。
■ 構築のステップ
以下のステップでGCP上でWebサービスを構築します。
ステップ1)GCPの初期設定
①ユーザ登録
②GCEの設定
③Cloud SQLの設定
ステップ2)SendGridのユーザ登録
ステップ3)SendGridへ中継するためのPostfixのインストール
ステップ4)GCPにWebアプリケーション環境をセットアップ
①各種パッケージのインストール
②MySQLにユーザとデータベースを作成
③MySQLにユーザとデータベースを作成
④Python+Flask のWebアプリケーションのセットアップ
⑤Python+Flask のWebアプリケーションとApacheとの連結
ステップ5)GCPのWebアプリケーションにブラウザからアクセス
■ ステップ1) GCPの初期設定
①ユーザ登録
GCPを使うには、Googleアカウントが必要です。(Gmailなどを使っていれば、すでに登録されています。)
まず、GCPのホームページにアクセスします。

Googleアカウントでログインします。

再度、「無料で開始」をクリックします。


スマホの電話番号を入力し、「コードを送信」をクリックします。

スマホのショートメッセージに送信されたコードを入力し、「確認」をクリックします。

クレジットカード番号を入力します。

住所を入力します。

②GCEの設定
継続して、GCPのプロジェクトを作成します。


作成したプロジェクトのダッシュボードが表示されます。
何もない状態ですので、まず、ナビゲーションメニューから「VMインスタンス」を選択し、GCE(Google Compute Engine)を生成します。

「有効にする」をクリックします。

「インスタンスを作成」をクリックします。

以下の画面が表示されます。



上記の画面で、次のように設定します。
・名前
VMインスタンスの名前を設定
・リージョン
us-west1(オレゴン)
・ゾーン
us-west1-a
・ブートディスク
変更をクリックし、以下のようにUbuntu/Ubuntu 16.04 LTSを選択

上記の設定で「作成」をクリックし、VMインスタンスを生成します。

③Cloud SQLの設定
ナビゲーションメニューから「SQL」を選択します。

インスタンス作成を選択します。

「MySQLを選択」をクリックします。

以下の画面で次のように設定し、「インスタンスを作成」をクリックします。
・インスタンスID
お好きなインスタンスIDを設定
・パスワード
MySQLのrootのパスワードを設定
・データベースのバージョン
MYSQL8.0を選択
・リージョン
us-west1(オレゴン)
・ゾーンの可用性
シングルゾーンを選択

MySQLインスタンスが生成されます。

MySQLインスタンスを起動します。
インスタンスIDをクリックします。

開始をクリックします。


開始されるまで待ちます。(数分かかります)


■ ステップ2)SendGridのユーザ登録
SendGridにユーザ登録し、ログイン情報(メールアドレス)を取得します。
SendGridのホームページから「無料ではじめる」をクリックします。

以下の画面に従って、必要な個人情報を入力し、登録を完了させます。
※「メール送信時に指定する予定のFromアドレス」、つまり送信元アドレスは事前に決めておく必要があります。

その後、以下のような登録した内容を示すメール(「本登録完了のお知らせ」)がSendGridから送られてきます。
この時点では、また、「ログイン情報」は送られてきません。SendGrid側での審査が行われます。

SendGrid側での審査の過程で、何かあればメールで質問が送られてきますので、それに回答していきます。
※途中、 以下のように「メール送信時に指定する予定のFromアドレス」 の所有者であることを確認されます。
■送信元メールアドレス(From)のドメインについて
XXXXがお客様のドメインであることを示す情報をご提供いただけないでしょうか?
下記いずれかのご対応をお願いいたします。
・お客様の御名前が記載されている、当該ドメインのWebサイト内の利用規約やプライバシーポリシーなどのURLをお送りいただく
・お客様の御名前とドメイン名が併記されているレジストラ設定画面のキャプチャ画像をお送りいただく
※併記されている画面がなければ、キャプチャが複数枚になっても構いません。
その場合、ログインIDなどで各キャプチャの紐付けを確認させていただければと存じます。
※不要な部分(クレジットカード情報など)にはマスク処理やトリミングをお願いいたします。
・当該ドメインのWebサイトに「SendGrid」と記載されたページを作成していただく
※こちらのページは弊社での確認が済み次第、削除していただいて構いません。
・当該ドメインのDNSのTXTレコードに「SendGrid65450」を設定していただく
※TXTレコードは弊社での確認が済み次第、削除していただいて構いません。
最終的に以下のような「ログイン情報」を含むメール(「SendGridにようこそ」)で送られてきます。
ユーザ名:XXXXXXX@kke.com
パスワード:ご登録時に指定したパスワード
このユーザ名(SendGridのアカウント)を使って、GCEからメールを送信します。
■ ステップ3) SendGridへ中継するためのPostfixのインストール
SendGridへのメール送信は、中継用メールサーバ のPostfixを使って行います。
そのため、GCEのUbuntuで以下を実行し、インストールを行います。
apt update
apt -y install postfix libsasl2-modules
インストール後、/etc/postfix/main.cfを以下のように変更し、SendGridへの中継設定をします。
・以下を追加
relayhost = [smtp.sendgrid.net]:2525
smtp_tls_security_level = encrypt
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
header_size_limit = 4096000
smtp_sasl_security_options = noanonymous
・以下をコメントアウト
#default_transport = error
#relay_transport = error
・/etc/postfix/sasl_passwdファイルには、以下のように、「ユーザ名:XXXXXXX@kke.com、パスワード:ご登録時に指定したパスワード」を設定します。
[smtp.sendgrid.net]:2525 XXXXXXX@kke.com:パスワード
保存したあと、以下のコマンドでsasl_passwdファイルをハッシュ化したファイル(sasl_passwd.db)に変換します。
sudo postmap hash:sasl_passwd
※SendGripによると、2021年1月26日以降、sasl_passwdファイルに設定するユーザ名とパスワードは、アカウントのユーザ名、パスワードではなく、以下のように「apikey:APIキー」となります。
[smtp.sendgrid.net]:2525 apikey:SG*************************************EAg.HLiz
APIキーは、SendGridにアカウントでログイン後、API Keysから作成できます。
以下に続きます。
GCPでのWebサービスの作り方(Python、Flask、MYSQL、Mail、Apache) 2/2
ソフトウェア開発・システム開発業務/セキュリティ関連業務/ネットワーク関連業務/最新技術に関する業務など、「学習力×発想力×達成力×熱意」で技術開発の実現をサポート。お気軽にお問合せ下さい