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

・/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


ソフトウェア開発・システム開発業務/セキュリティ関連業務/ネットワーク関連業務/最新技術に関する業務など、「学習力×発想力×達成力×熱意」で技術開発の実現をサポート。お気軽にお問合せ下さい


-Web

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

実践入門「OpenAPI」とは?

OpenAPIは、REST APIのインターフェースの定義の説明を記述するフォーマットを規定する規格です。フォーマットは、YAML形式とJSON形式の2種類あって、APIの仕様を記述します。これを解釈 …

はじめての「Webシステム」入門

ネットワークを使ったシステムは、クライアント/サーバ型システムが基本です。クライアント/サーバ型システムとは、ユーザが操作するクライアントと、データを管理し、処理を実行するサーバとの間をネットワークで …

実践入門「スクレイピング」とは?(その1)

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

はじめてのノーコードWebアプリ開発ツール「Bubble」入門

ノーコードによるアプリ開発ツールに、「Bubble」があります。Bubbleは、Webアプリの開発に特化しており、開発ツールのGUIを駆使することで、文字通り、プログラミングすることなく、Webアプリ …

実践入門「gRPC」とは?

HTTPを使ったAPI定義には、REST APIとGraphQLがあります。これらのAPI定義は、外部に公開するための「外向け」のものです。それに対し、「内向け」のプロセス間通信(IPC)のAPI定義 …

Chinese (Simplified)Chinese (Traditional)EnglishFilipinoFrenchGermanHindiJapaneseKoreanMalayThaiVietnamese