[AWS]Amazon EC2

AWSの無料利用枠(アカウント作成から1年)を使って、EC2インスタンスを起動してブラウザからHTTPアクセスするところまでをまとめます。

EC2インスタンスを作成

EC2インスタンスを作成する

EC2 > インスタンス > インスタンスを起動 をクリックして以下の項目を入力・選択します。

インスタンス名、OSイメージ

インスタンス名は任意の名前、OSイメージは自分の扱いやすいOSを選択します。ここではUbuntuを選択しました。

インスタンスタイプ、キーペア

インスタンスタイプ

インスタンスタイプは無料枠で利用可能な t2.micro を選択します。

キーペア

EC2インスタンスの作成後、SSH接続して各種必要ソフトなどのセットアップを行います。その際必要になるのがキーペア(公開鍵と秘密鍵)を作成します。公開鍵はEC2インスタンス内に保存され、秘密鍵はユーザー自身がクライアント端末で管理します。

  • キーペア名
    任意の名前
  • キーペアのタイプ
    RSA
  • プライベートキーファイル形式
    .pem

作成するとプライベートキー(.pem)ファイルがダウンロードされるので、ローカルの任意の場所へ保管しておきます。

ネットワーク設定

AWSには既存のセキュリティグループが一つ用意されているので、既存のセキュリティグループを選択します。

インスタンスを起動

インスタンスを起動をクリックして少し待ち、以下のような画面になればひとまずOKです。

アプリケーションセットアップ

作成したEC2インスタンスにSSHで接続し、アプリケーションのセットアップをします。

SSH接続

構文:ssh -i [プライベートキー] [EC2インスタンス]

SSHコマンドは EC2 > インスタンス > [作成したインスタンス] > 接続 > SSH から確認できます。

SSH接続:$ ssh -i "test-key.pem" ubuntu@ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 6.2.0-1012-aws x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

(省略)

The list of available updates is more than a week old.
To check for new updates run: sudo apt update

ubuntu@ip-xxx-xxx-xxx-xxx:~$

SSH接続できないとき

Permissionエラー
$ ssh -i "test-key.pem" ubuntu@ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0660 for 'test-key.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 "test-key.pem": bad permissions
ubuntu@ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com: Permission denied (publickey).

この場合は、ローカルに保存したプライベートキーの権限の問題です。プライベートキーの権限は600(-r--------)にしなくてはいけません。以下コマンドで権限を変更します。

chmod 600 test-key.pem
SSHコマンドが返ってこない、もしくはタイムアウト

ネットワークセキュリティグループのインバウンドルールにSSH接続が許可されているかを確認します。

EC2 > セキュリティグループ から、EC2インスタンスに紐づけたセキュリティグループを開きます(ここではdefault)。インバウンドルールの編集を開き、SSH接続が入っているか、許可IPが自分のPCのグローバルIPが設定されているか等を確認します。

SSHが含まれていない場合は、「ルールを追加」をクリックし、以下のように追加します。

  • タイプ
    SSH
  • ソース
    接続元IP
    CIDER形式で範囲指定可能です。ここではマイIPを選択し、自分のPCのグローバルIPを設定しています。

アプリケーションのセットアップ

WEBサーバーとして実行するためApacheをインストールします。

sudo apt update
sudo apt install apache2
sudo ufw status
sudo systemctl status apache2

Apacheのステータスが、以下のように表示されればOKです。そうでない場合は、Apache操作コマンドで確認してみてください。

Apache操作コマンド

WEBサーバーを停止
sudo systemctl stop apache2
WEBサーバーを起動
sudo systemctl start apache2
WEBサーバーを再起動
sudo systemctl restart apache2
WEBサーバーをリロード
sudo systemctl reload apache2
※設定変更を反映させるときなどに使用する。
WEBサーバーを無効化
sudo systemctl disable apache2
※デフォルトでサーバー起動時に自動的に起動する。
WEBサーバーを有効化
sudo systemctl enable apache2
※デフォルトでサーバー起動時に自動的に起動する。

セキュリティグループの設定

インバウンドルールの編集

WEBサーバーとしてブラウザでアクセスできるようにするため、セキュリティグループにHTTP接続を許可する設定を追加します。

EC2のメニューから セキュリティグループ > [EC2インスタンスに紐づいているNSG(ここではdefault)] > インバウンドルール を開き「インバウンドルールの編集」をクリックします。

「ルールを追加」をクリックし、以下のように追加します。

  • タイプ
    HTTP
  • ソース
    接続元IP
    CIDER形式で範囲指定可能です。ここではマイIPを選択し、自分のPCのグローバルIPを設定しています。

パブリックIPの取得

Elastic IP

最後にEC2インスタンスへパブリックIPアドレスを関連付けを行います。パブリックIPアドレスはElastic IPを使用して、取得・紐づけを行います。

本来Elastic IPは課金対象となりますが、一つまでの割り当てであれば無料枠内で使用できます。

Elastic IPの割り当て

EC2メニューから Elastic IP を開き、「Elastic IPを割り当てる」をクリックします。ここでは特に設定する項目はないので、そのまま「割り当て」をクリックします。

Elastic IPの関連付け

割り当てたElastic IPを、EC2インスタンスへの関連付けを行います。Elastic IPアドレスの一覧にチェックを入れて、アクションから「Elastic IPアドレスの関連付け」をクリックします。

以下のようにそれぞれ選択して、「関連付ける」をクリックします。

  • リソースタイプ
    インスタンス
  • インスタンス
    作成したEC2インスタンスを選択
  • プライベートIPアドレス
    作成したEC2インスタンスのプライベートIPアドレスを選択

動作確認

EC2 > インスタンス > [作成したインスタンス] から、パブリック IPv4 アドレスへアクセスすると、以下のようにUbuntuのデフォルトページが表示されます。

今後はここで様々なアプリケーションを動かして、まとめていきたいと思います。

コメント

このブログの人気の投稿

docker-compose up で proxyconnect tcp: dial tcp: lookup proxy.example.com: no such host

docker-compose で起動したweb、MySQLに接続できない事象

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)