AWS Cloud9上でFlaskの設定から公開まで


1.はじめに

AWS Cloud9上でFlaskを走らせるための備忘録です。
概ね以下のような構成です。
・AWS Cloud9でpython3を使うための環境設定
・ポートの開放
・ElasticIPを使ったドメインの割り当て(追加しました)

2.Cloud9の起動

Cloud9を起動し、「Create enviroment」でFlaskで公開するCloud9用の環境を用意します。

Configure settings で環境設定を行います。Name欄に名称をつけで「Next Step」

Cost-saving settingは標準のままだと30分で強制的に終了しますので、「Never」に設定します。
後から設定変更可能です。(AWS Cloud9→Preferences→EC2 Instance)
(当初これを知らずに、勝手にflaskが停止する理由がわからなった...。)

「Next Step」のボタンを押し、確認の画面で「Create enviroment」ボタンで環境を構築します。

3.IDEの起動と初期設定

作成した開発環境を「Open IDE」で開き、開発環境を確認します。

Pythonは3.6、pipは2.7が設定されていますので変更します。
sudo update-alternatives --config python
「2」を選択します。

再確認します。

pipで必要なモジュールをインストールします。今回はflaskをインストールします。
flaskに限らずpipでインストールするときは末尾に「--user」をつけてインストールします。

4.ポートの開放

AWSのEC2管理画面から「実行中のインスタンス」を選択しインスタンスの一覧を表示します。

「説明」タブ内の「セキュリティグループ」の項目を選択
ここでパブリックIPのIPアドレスを控えておきます。

「インバウンド」タブ内の「編集」ボタンを押します。

「ルールの追加」ボタンを押し、タイプ「カスタムTCP」を選択し、開放するポート番号とソースに「0.0.0.0/0」を指定し保存します。今回は50000を開放します。

5.Flaskのテスト

もう一度cloud9の開発環境に戻り、Flaskのテストコードを入力します。


from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello World"

if __name__ == "__main__":
    app.run(host = '0.0.0.0', port = 50000)
    app.debug = True

コードを実行します。

ポート開放で確認したパブリックIP:ポート番号を叩いてアクセス可能なことを確認します。
http://〇〇.〇〇〇.〇〇〇.〇〇〇:50000/


これで外部からアクセスできるようになりました。

6. ドメインの割り当て(おまけ)

Elastic IPを使ってお名前ドットコムで取得したドメインを割り当てます。

6.1 AWS側(Elastic IP)の設定

EC2ダッシュボードからElastic IPをクリック

ElasticIPアドレスの割り当てをクリック

パブリックIPアドレスが割り当てられます。

割り当てられたパブリックIPアドレスをクリックします。

該当するインスタンスを選択します。

プライベートIPも自動で候補が表示されますので、指定して「関連付ける」をクリックします。
これでElasticIPがEC2のインスタンスに割り当てられます。

6.2 お名前ドットコム側の設定

お名前ドットコムのドメイン管理画面でDNS関連機能の設定をクリックします。
※ネームサーバーはお名前ドットコムのネームサーバーを使用します。
ちなみに「.com」のドメインで1年間1,166円でした。

対象ドメインを選択して次へ

DNSレコード設定を利用するの「設定する」ボタンをクリック

A/AAAA/CNAME/MX/NS/TXT/SRV/DS/CAAレコードのVALUE欄にElasticIPで取得したパブリックIPを入力して追加し、「確認画面へ進む」→「設定する」

これでドメインと紐づけできました。反映されるまで数時間かかります。