Web

GCPでのWebサービスの作り方(Python、Flask、MYSQL、Mail、Apache) 1/2

投稿日:2021年9月18日 更新日:


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

以下に続きます。

GCPでのWebサービスの作り方(Python、Flask、MYSQL、Mail、Apache) 2/2 – DXインテリジェンス (itresourcetech.net)

-Web

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

GCPでのWebサービスの作り方(Python、Flask、MYSQL、Mail、Apache) 2/2

以下からの続きとなります。GCPでのWebサービスの作り方(Python、Flask、MYSQL、Mail、Apache) 1/2 – DXインテリジェンス (itresourcetech.net) …

続スクレイピング

seleniumライブラリを使ったスクレイピングについて、解説します。サイトには、ブラウザとセッションを管理するものもあり、セッションがないとアクセスできないようにしているサイトもあります。セッション …

決済API(PAY.JPの例)

EC(電子商取引)などインターネットを使ったサービスが増える中、取引の決済処理を担う決済APIも多種多様になってきています。それら決済APIについて、解説します。 ■ 決済APIとは何か 代表的な決済 …

Flask(Python)

WebアプリケーションをPythonを使って手軽に開発できるマイクロフレームワークがFlaskです。Webアプリケーション開発と言えばPHPがありますが、Flaskの最大の特徴は、プログラミング言語の …

スクレイピング

インターネットにあるWebサイトのHTMLデータの中から、必要なデータを自動的に取得することをスクレイピングといいます。Googleなどの検索エンジンがインデックスを作成するために、自動でWebサイト …