[スクショ付き]AWSにVPCを構築し、EC2を立てる(Flaskで簡単なWebサービスを作ってみる[第4回])
はじめに
PythonのWebアプリケーションフレームワークFlaskを使って、「消耗品買い物リスト」を作ってみます。
今回はAWSに本番環境を構築していきます。
前回まで
- 0回 : Flaskで簡単なWebサービスを作ってみる
- 1回 : スプレッドシート+Google Apps Scriptでプロトタイプを作る
- 2回 : FigmaでUI制作をしてみたが早々に次のフェーズに進んだ件
- 3回 : DockerでFlaskが動き、簡単なテストが通る状態を作る
今回やること
AWSでVPCを作成し、EC2を起動して、Dockerをインストールして、リポジトリをプルして、本番環境をデプロイするところまでをやっていきたいのですが、本記事では作業ユーザーの作成までです。
- 構成図
- VPCセットアップ
- EC2起動
- 作業ユーザー作成 ← 本記事はここまで
- Gitインストール
- Dockerインストール
- Flaskの起動・動作確認
構成図
システム構成はこんな感じにします。とりあえず動かす最小構成。
VPCセットアップ
まずはVPCを作ります。
- AWSマネジメントコンソール > サービス > VPC
- VPCウィザードの起動
ステップ 1: VPC 設定の選択
「選択」をクリック
ステップ2: 1 個のパブリックサブネットを持つ VPC
- 基本デフォルトで
- IPv4 CIDRブロック: 10.0.0.0/16 (デフォルト)
- IPv6 CIDR ブロック: IPv6 CIDR ブロックなし (デフォルト)
- 任意入力
- VPC名: to-buy-list
- アベイラビリティゾーン: ap-northeast-1a
- サブネット名: to-buy-list-subnet
- DNSホスト名を有効化: はい
VPCが正常に作成されました
一瞬で作成されます。
「OK」を押すとVPCのダッシュボードが表示され、先程作成したVPCが確認できます。
自動的に以下も作成されます。便利…
- IGW
- ルートテーブル
- サブネット
ルートテーブルとIGWのNameタグを設定しておく
特にやらなくてもいいかもしれませんが、リソースが増えてきたときにわかりやすいように名前をつけておきます。
- ルートテーブル
- VPC > ルートテーブル
- VPC IDがさきほど作ったもののNameを編集
- IGW
- VPC > インターネットゲートウェイ
- VPC IDがさきほど作ったもののNameを編集
セキュリティグループの設定
セキュリティグループを作成しておきます。
最低限のセキュリティ設定をします。基本は必要なものだけ通す、です。
セキュリティグループの作成
VPC > セキュリティグループ > セキュリティグループを作成
- セキュリティグループ名
- 作成後に名前を編集することはできません。 とのことなので注意。
- 説明: (任意)
- VPC: 作成したVPCを選択
インバウンドルール
VPC内のインスタンスに、自分の開発環境のネットワーク以外からはアクセスできないようにしておきます。
具体的にはSSH/HTTP/HTTPSのポートに対し、マイIPからのみ接続できるようにします。
- インバウンドルールを追加
- SSH接続
- タイプ: SSH
- ソース: マイIP
- 同じ要領で、HTTP/HTTPS接続もそれぞれ追加します
- HTTP接続
- タイプ: HTTP
- HTTPS接続
- タイプ: HTTPS
- マイIPを選択すると、使っているIPアドレスが表示されます
- その他、IP接続を許可したいIPアドレスがあれば同様の手順で追加しておきます
アウトバウンドルール、Tagsはスルーして「セキュリティグループを作成」。
こんな感じになります。
EC2起動
EC2を立ち上げます。
サービス > EC2 > インスタンス
「インスタンスの作成」をクリック
ステップ 1: Amazon マシンイメージ (AMI)
好きなAMIを選びましょう。
今回は「Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type」を選択します。
「レポジトリには、Docker、PHP、MySQL、PostgreSQL、およびその他のパッケージが含まれます。」という記載があり、追加インストールの手間が省けそうなので。
ステップ 2: インスタンスタイプの選択
インスタンスタイプを選択します。
とりあえず動かすだけなので最小限のスペックで。
「t2.micro」を選択し、「次のステップ」をクリック。
ステップ 3: インスタンスの詳細の設定
色々設定できますが、基本デフォルトで。以下のところは設定します。
- ネットワーク: 作成したVPCを選択
- 自動割り当てパブリックIP: 有効
- EC2を起動するたびにパブリックIPを割り当てるようにします。
「次のステップ」をクリック
ステップ 4: ストレージの追加
EBSを追加します。
サイズ(GB)などは必要に応じて変更します。
今回はデフォルトでそのまま進めます。
「次のステップ」をクリック
ステップ 5: タグの追加
作成するインスタンスにわかりやすい名前をつけておきます。
- タグの追加
- キー: Name
- 値: to-buy-list-web
- インスタンス/ボリュームにそれぞれチェック(デフォルト)
「次のステップ」をクリック
ステップ 6: セキュリティグループの設定
- セキュリティグループの割り当て: 既存のセキュリティグループを選択する
- さきほど作成したセキュリティグループを選択
- 内容を確認し、「確認と作成」
ステップ 7: インスタンス作成の確認
設定内容を確認し、「起動」
キーペアの設定
- 新しいキーペアの作成
- キーペア名を入力
- ダウンロード
- XXX.pemというファイルが無事ダウンロードされたことを確認して、「インスタンスの作成」
「インスタンスは現在作成中です」と出て、作成されるまでしばらく待ちます。
「インスタンスを表示」をクリックするとインスタンス一覧の画面に遷移し、作成したインスタンスのステータスが確認できます。
EC2にSSH接続
EC2が起動したら、SSH接続して諸々の作業をすすめていきます。
IPアドレスを確認
- インスタンスの画面で、起動したインスタンスを選択
- 画面下部「説明」タブ > IPv4 パブリック IPの値をコピーしておきます。
ターミナル作業
ここからはターミナルの作業になります。
鍵ファイルを~/.ssh/配下に移動しておき、その上でsshコマンドでSSH接続を試みます。
$ mv Downloads/xxx.pem ~/.ssh/
$ ssh -i ~/.ssh/xxx.pem ec2-user@[さきほどコピーしたIPアドレス]
よくあるエラー
The authenticity of host 'XXX' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'XXX' (ECDSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'XXX.XXX.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/xxx/.ssh/xxx.pem": bad permissions
ec2-user@xx.xxx.xx.xx: Permission denied (publickey).
上記のようなエラーが出た場合、xxx.pemファイルのパーミッションがゆるいので、
$ chmod 600 ~/.ssh/xxx.pem
とでもしておきましょう
SSH接続に成功すると以下のようになります
~ $ ssh -i ~/.ssh/xxx.pem ec2-user@xx.xxx.xx.xx
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
6 package(s) needed for security, out of 10 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-0-86 ~]$
各種設定
yumのupdate
$ sudo yum -y update
タイムゾーン設定
$ sudo vi /etc/sysconfig/clock
ZONE="UTC"
UTC=true
# 以下に書き換え
ZONE="Asia/Tokyo"
UTC=false
作業ユーザーの作成
$ sudo useradd oshiro
$ sudo passwd oshiro
$ sudo visudo
oshiro ALL=(ALL) NOPASSWD: ALL
ユーザーをグループに追加
$ sudo usermod -aG wheel oshiro
# 確認
$ groups oshiro
oshiro : oshiro wheel
ssh設定をコピー
# コピー
$ sudo rsync -avz ~/.ssh/authorized_keys /home/oshiro/.ssh/
# コピーしたディレクトリの所有者変更
$ sudo chown -R oshiro:oshiro /home/oshiro/.ssh
# 確認
$ ls -la /home/oshiro/ | grep ssh
drwxr-xr-x 2 oshiro oshiro 4096 8月 28 17:00 .ssh
別のターミナルから作成したユーザーでログインできることを確認
$ ssh -i ~/.ssh/xxx.pem oshiro@[IPアドレス]
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/
[oshiro@ip-10-0-0-86 ~]$
これでEC2の準備ができました。
終わりに
EC2を起動し、作業ユーザーを作成しました。
次回以降、Dockerを入れて動かしてみます。
ディスカッション
コメント一覧
まだ、コメントがありません