2020年1月19日現在の内容です。
用語説明
EC2(Elastic Compute Cloud)
AWSクラウド上の仮想サーバー
インスタンス:EC2から立てられたサーバーのこと
特徴
- 数分で起動し、1時間または秒単位の従量課金
- サーバーの追加・削除、マシンスペック変更も数分で可能
- OSより上のレイヤについては自由に設定できる
作成手順
- AMIの選択
- インスタンスタイプの選択
- ストレージの追加
- セキュリティグループの設定
- SSHキーペアの設定
AMI(Amazon Machine Image)
インスタンス起動に必要な情報が入ったOSのイメージ
サーバーのテンプレートのようなもの
特徴
- AWSやサードパーティがAMIを提供
- 自前のカスタムAMIも作成可能
- カスタムAMIから何台でもEC2インスタンスを起動可能
インスタンスタイプ
サーバーのスペックを定義したもの
概要
- インスタンスタイプにより、CPU、メモリ、ストレージ、ネットワーク帯域が異なる
- インスタンスタイプにより料金が異なる(スペックが高いほど料金も高い)
- アクセス数などに応じて必要なスペックのあるインスタンスタイプを選択する
ストレージ
サーバーに紐付けるデータの保存場所
EC2のストレージは2種類存在する
EBS(Elastic Block Store)
- 高い可用性と耐久性を持つストレージ
- 他のインスタンスに付け替え可能
- EC2インスタンスをSTOP(一時停止)/Terminate(永久破棄)してもEBSは保持可能
- Snapshot(増分バックアップ)を取得しS3に保存可能
- EBSの費用が別途発生
- OSやDBなどの永続性と耐久性が必要なデータの格納に使用
インスタンスストア
- インスタンス専用の一時的なストレージ
- 他のインスタンスに付け替えることができない
- EC2インスタンスをSTOP/Terminateするとクリアされる
- 追加費用は発生しない(無料)
- 一時ファイルやキャッシュなど失われても問題がないデータの格納に使用
一般的にはEBSの利用が多い
SSH
サーバーと自分のパソコン(クライアント)をセキュアにつなぐサービスのこと
(通信内容が暗号化された遠隔ログインシステム)
EC2にログインするときはSSHを使用する
公開鍵認証
- サーバーへのログイン時に認証を行う仕組み
- ユーザー名とパスワードを使用した認証と比べ、よりセキュリティが高い
- 公開鍵暗号(秘密鍵と公開鍵)を用いて認証を行う
- 公開鍵はサーバーが保有。秘密鍵を持っているユーザーだけログイン可能
公開鍵:南京錠のイメージ
秘密鍵:鍵のイメージ
EC2ではSSHログイン時に公開鍵認証を行っている
ポート番号
プログラムのアドレス
同一コンピューター内で通信を行うプログラムを識別するときに利用される
- SSHサーバー:ポート番号22
- HTTPサーバー:ポート番号80
- SMTPサーバー:ポート番号25
ポート番号を決める方法は2種類ある
標準で決められている番号
- 代表的なプログラムが使うポート番号はあらかじめ決められている(ウェルノウンポート番号)
- SSH:22
- SMTP:25
- HTTP:80
- HTTPS:443
- ウェルノウンポート番号は0〜1023のいずれかの整数値
- 接続元(クライアント)が接続先のポート番号を省略した場合、ウェルノウンポート番号が使用される
動的に決まる番号
- サーバーはポート番号が決まっている必要があるが、クライアントはポート番号が決まってなくても良い
- クライアントのポート番号はOSが他のポート番号と重複しないように、ランダムに決める
- 動的に割り当てる番号は49142〜65535のいずれかの整数値
ファイアウォール
ネットワークを不正アクセスから守るために、「通して良い通信だけを通して、それ以外は通さない」機能の総称
AWSでは、セキュリティグループがファイアウォールの役割を担っている
Elastic IPアドレス
- インターネット経由でアクセスで可能な固定グローバルIPアドレスを取得でき、インスタンスに付与できるサービス
- インスタンスを削除するまで付与したIPアドレスを使用できる
- Elastic IPアドレスはEC2インスタンスに関連付けられていて、インスタンスが起動中であれば無料で利用できる**(インスタンスが使用されていなかった場合、課金される)**
構築手順
- EC2インスタンスを設置する
- Apacheをインストールする
- SSHでサーバーにログイン
- Apacheをインストール
- ファイアウォールを設定する
EC2インスタンスの作成
EC2インスタンスをパブリックサブネットに設置する
「Amazon Linux 2」を選択
(特に理由がなければAmazon Linux 2で問題ない)
「t2.micro」を選択し、「次のステップ」をクリック
(t2.microはパフォーマンスが低いが動作検証では十分足りる)
以下の通り設定し、「次のステップ」をクリック
- 「スポットインスタンスのリクエスト」を選択すると低料金で利用できるが、インスタンスが中断する可能性がある
- 「ネットワーク」は作成したVPC
- 「サブネット」はパブリックサブネット
- インターネットに接続する場合「自動割り当てパブリック IP」を有効にする
- 「配置グループ」を選択すると複数のEC2インスタンス間の通信を高速する
- 「キャパシティーの予約」を開くにするとアベイラビリティゾーンのリソースを事前に確保してEC2インスタンスを常に起動できる状態にできる(追加料金が発生)
- 「IAMロール」はEC2インスタンスが他のAWSサービスと連携するときの権限を設定
- 一般的に本番環境では「削除保護の有効化」を設定する
- 「テナンシー」ではハードウェアを専有するか共有するかを選択する(専有すると追加料金が発生)
- 「Elastic Inference」は機械学習でGPUを使用する際にコスト効率を良くするためのもの
- 「T2/T3 無制限」はバースト(サーバーにアクセスが集中した際CPUをフル稼働させる状態)を無制限にできる(追加料金が発生)
ネットワークインターフェースでプライベートIPを設定する
*パブリックサブネットの範囲内で設定する
新しいキーペアを作成し、ダウンロードする
*キーペアのダウンロードはこれ以降できないので、必ずダウンロードしておく
ダウンロードが完了したら「インスタンスの作成」をクリック
インスタンスが作成されていることを確認
(一定時間経過後「インスタンスの状態」が「runnning」,「ステータスチェック」が「2/2のチェックに合格しました」となる)
SSHでEC2インスタンスに接続
*MACの手順
ターミナルを起動し、ダウンロードした秘密鍵(pemファイル)の権限を変更する
chmod 600 test-ssh-key.pem
作成したEC2インスタンスのパブリックIPアドレスをコピーする
sshコマンドでログインする
ssh -i test-ssh-key.pem ec2-user@54.64.153.51
↑秘密鍵(test-ssh-key.pem)を用いてユーザー名(ec2-user)でIPアドレス(54.64.153.51)に接続する
(初回ログインの場合「Are you sure you want to continue connecting (yes/no)?」と聞かれるので「yes」を選択)
exit
でログアウトできる
Apacheのインストール
パッケージを最新に更新する
sudo yum update -y
Apacheのインストール
sudo yum install httpd -y
Apacheの起動
sudo systemctl start httpd.service
Apacheが起動されていることを確認
sudo systemctl status httpd.service
サーバーが停止・再起動したらApacheも停止するので、サーバーが起動したときにApacheも自動で起動するように設定
sudo systemctl enable httpd.service
Apacheの自動起動が反映されていることを確認
sudo systemctl is-enabled httpd.service
ファイアウォールの設定
セキュリティグループの80番を開ける
「インバウンド」をクリックし、SSH(ポート番号22)しか表示されていないことを確認
EC2インスタンスのIPアドレスをブラウザで開き、HTTP通信ができていることを確認
Elastic IPアドレスを紐付ける
以下の通り設定し、「関連付ける」をクリック
インスタンス:作成したEC2インスタンス
プライベートIPアドレス:EC2インスタンスに設定したプライベートIPアドレス
割り当てたIPアドレスををブラウザで開き、Apacheのページが表示されていることを確認
おまけ(Webサーバーの片付け方)
Elastic IPアドレスの開放
Elastic IPアドレスを選択し、「アクション」 → 「Elastic IPアドレスの関連付けの解除」をクリック
「アクション」 → 「Elastic IPアドレスの解放」をクリック
EC2インスタンスの停止
「アクション」 → 「インスタンスの状態」 → 「停止」をクリック