昨年、「AWS 認定ソリューションアーキテクト – アソシエイト」に合格したものの、
実際にAWSに環境構築したりする機会がほとんどないなかったため、
AWS上でWebアプリ環境を構築すべく、EC2、S3、RDSのインスタンスを作成してみました。
無料枠を使えるのもは使うようにしています。
S3にフロントを配置し、EC2にバックエンドのAPIサーバを構築、RDSはデータベースとし、
S3に配置したWebページよりAPIを実行し、データの読み書きを行うWebアプリを想定しています。
その前段階として、それぞれのインスタンスを立ててみました。
EC2
コンソールトップより仮想マシンの起動
を選択して始めます。
AMIの選択
Amazon Linux 2 AMI(HVM)
を選択します。
無料利用枠のみチェックで無料枠を絞れます。
インスタンスタイプの選択
t2.micro
を選択します。
t2.microのみ無料利用枠の対象のようです。(ラベルが表示されている)
ちなみに、t2.microの性能は次のようです。
インスタンスの詳細の設定
変更なしです。
なお、VPCはEC2作成時に作成されるようです。
サブネットはアベイラビリティゾーンのデフォルトが設定されます。
自動割り当てパブリックIPはサブネット設定を使用(有効)としました。
ストレージの追加
追加なしです。
初期では汎用SSDが作成されます。
タグの追加
設定なしです。
セキュリティグループの設定
新しいセキュリティグループが作成されます。
なお、0.0.0.0/0
にすると全てのIPアドレスからインスタンスにアクセスすることができるので、既知のIPアドレスからのみアクセスできるようにしたほうがいいようです。
ここでは以下を追加しました。
- SSH: 22
- HTTP: 8080
- HTTPS: 8443
インスタンス作成の確認
ここで最終確認できます。
起動
ボタンで作成&起動されます。
そのまえに…キーペアの作成ダイアログが表示されます。
既存のキーペアを選択するか、新しいキーペアを作成します。
キーペア名を入力して、キーペアのダウンロードで.pemがダウンロードされます。
インスタンスの作成
ボタンを押すとインスタンスの作成が開始されます。
SSH接続
起動したEC2インスタンスは以下のコマンドにてSSH接続できます。
ssh -i [ダウンロードしたキーペア] ec2-user@[IPv4パブリックIP]
実行すると以下のエラーがでました。
Permissions 0644 for '~/.ssh/xxxxx.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
要するに権限をつけすぎと言われるのでchmod 600で所有者だけに権限を与えるようにしました。
RDS
AWSのRDSからデータベースの作成
を実行を選択します。
データベースの作成
データベースの作成方法
標準作成を選択を選択します。
エンジンのオプション
今回はPostgresSQLを選択しました。
テンプレート
無料利用枠を選択する(バージョンによっては選べないみたい)
設定
インスタンス識別子: 任意のインスタンス識別子を入力します。(一意である必要あり)
認証情報の設定: DBの認証情報を入力します
DBインスタンスクラス
db.ts.microを選択(バースト可能クラス)を選択しました。
ストレージ
以下を選択しました。
ストレージタイプ: 汎用SSD
ストレージ割り当て: 20
接続
以下を選択しました。
VPC: デフォルト
サブネットグループ: デフォルト
パブリックアクセス: なし(VPC内部のEC2のみ)
VPCセキュリティグループ: EC2で作成したグループを選択
データベース認証
パスワード認証を選択しました。
最後に、データベースの作成
をクリックで作成されます。
インバウンドルール追加
セキュリティグループでインバウンドルールを追加します。
タイプ: PostgresSQL
RDSへの接続
PostgresSQLの場合は、以下にて接続できます。
psql --host=[RDSのエンドポイント] --port=[ポート番号(デフォルト:5432)] --username=[記入した認証情報] --password
S3
AWSのS3にてバケットを作成
をクリックして始めます。
一般的な設定
バケット名: 任意のバケット名を入力します(一意である必要あり)
AWSリージョン: リージョンを選択します
オブジェクト所有者
ACL無効を選択しました。
有効にすると他のAWSアカウントがバケット内のオブジェクトの所有者になることができます。
このバケットのブロックパブリックアクセス設定
一旦、パブリックアクセスをすべて ブロックのままとしました。
バケットのバージョニング
無効にしました。
デフォルトの暗号化
サーバ側の暗号化: 無効にしました。
上記でEC2、RDS、S3のインスタンスを作成できました。
Webアプリ構築時に、セキュリティ設定など更新していきたいと思います。