EC2とは
AWSの仮想サーバーサービスです。
まずサーバーとは?
業務用コンピューターです。
クライアントからのリクエストに対して、
サーバーからレスポンスを返します。
仮想サーバーとは?
OS+CPU+Memory+SSD+NIC(Network Interface Card)などが構成要素となっている。
これがAWSでは、
OS→AMI(Amazon Machine Image)
CPU, Memory→インスタンスタイプ(t2nano, t3microなど)
SSD→EBS(Amazon Elastic Block Store)
NIC→ENI(Elastic Network Interface)
となっています。
これらが纏まったのが、Amazon EC2です。
AMIとは?
AMIはインスタンスの作成に必要な情報です。
EC2作成時に使用するAMIの指定が必要です。
インスタンスタイプ
無料利用枠の対象となっているt2.micro
を例に説明します。
tはファミリー名です。
2は世代番号です。
世代番号に関しては、数字が大きいものほど新しいので、できるだけ数字が大きいものを使う方がいいです。
microはインスタンスのサイズを表しています。
T系
主な用途は、テストです。
インスタンス | vCPU | CPU | メモリ(GB) |
---|---|---|---|
t3.nano | 2 | 6 | 0.5 |
t3.micro | 2 | 12 | 1 |
t3.small | 2 | 24 | 2 |
t3.medium | 2 | 24 | 4 |
t3.large | 2 | 36 | 8 |
t3.xlarge | 4 | 96 | 16 |
t3.2xlarge | 8 | 192 | 32 |
M系
バランスの取れたCPUとバランスの取れたメモリ数のため、どんな仕様にも使えます。
インスタンス | vCPU | メモリ(GB) |
---|---|---|
m5.large | 2 | 8 |
m5.xlarge | 4 | 16 |
m5.2xlarge | 8 | 32 |
m5.4xlarge | 16 | 64 |
m5.8xlarge | 32 | 128 |
m5.12xlarge | 48 | 192 |
m5.16xlarge | 64 | 256 |
m5.24xlarge | 96 | 384 |
C系
CPUに優れたインスタンスです。
用途はWEBサーバーなどです。
インスタンス | vCPU | メモリ(GB) |
---|---|---|
c5.large | 2 | 4 |
c5.xlarge | 4 | 8 |
c5.2xlarge | 8 | 16 |
c5.4xlarge | 16 | 32 |
c5.9xlarge | 36 | 72 |
c5.12xlarge | 48 | 96 |
c5.18xlarge | 72 | 144 |
c5.24xlarge | 96 | 192 |
R系
メモリに優れたインスタンスです。
用途はビッグデータなどDBなどです。
インスタンス | vCPU | メモリ(GB) |
---|---|---|
r5.large | 2 | 16 |
r5.xlarge | 4 | 32 |
r5.2xlarge | 8 | 64 |
r5.4xlarge | 16 | 128 |
r5.8xlarge | 32 | 256 |
r5.12xlarge | 48 | 384 |
r5.16xlarge | 64 | 512 |
r5.24xlarge | 96 | 768 |
簡単にまとめると、
開発時にはT系を使用し、
特別な用途などがない限りはM系で十分です。
EBS
外付けディスクのことを指します。
種類に応じて性能が異なってきます。
また、バックアップ(スナップショット)が取得できます。
EBSの特徴は以下の3つです。
①EC2とEBSは外部でアタッチされる
②同一のAZ内でしかEC2とEBSはアタッチできない
③1つのEBSに対して複数のEC2をアタッチできない(1EBS→1EC2、1EC2→複数のEBSはOK)
種類
タイプ | 名前 | 特徴 |
---|---|---|
SSD | 汎用 SSD | 特別な要件がない限りこれで OK。 |
SSD | プロビジョンド IOPS SSD | 汎用 SSD よりも高スペック、特別な要件がある時はこれ。 |
HDD | スループット最適化 HDD(st1) | データをひたすらにためる時に使う、ビッグデータとか。 |
HDD | Cold HDD(sc1) | データを保管するだけ、あんまり使わないでデータを保持する時。 |
スナップショット(バックアップ)
バックアップを差分のみ行ってくれる仕様です。
例えば、
1MBのファイルがあり、そのファイルに更新をしていくものとします。
①1MBの更新を行う
②2MBの更新を行う
③1MBの更新を行う
このように3回の更新を行うケースを考えてみましょう。
通常のコピーの場合
1MB
①2MB+2MB(コピー①)
②4M+2MB(コピー①)+4MB(コピー②)
③5MB+2MB(コピー①)+4MB(コピー②)+5MB(コピー③)
計16MBの容量が必要となります。
スナップショットの場合
1MB
①2MB+2MB(スナップショット①)
②4M+2MB(スナップショット①)+2MB(スナップショット②)
③5MB+2MB(スナップショット①)+2MB(スナップショット②)+1MB(スナップショット③)
計10MBの容量が必要となります。
6MBの削減となりました!!
EC2が作成されるまでの流れ
①AMI(Amazon Machine Image)の選択
②インスタンスタイプの選択
③Amazon EC2が起動→User dataを起動
④EBSをEC2にアタッチ
⑤ENIをEC2にアタッチ(ここでセキュリティグループなども決定する)
User data
EC2が初回起動する際に実行するスクリプトです。
実行権限はrootユーザー権限のみです。
■よく使われる内容
・パッケージのアップデート → yum update -y
・ソフトウェアのインストール → yum install httpd -y
・設定ファイルの取得
2つの形式が使える
・シェルスクリプト形式(1行目が#!
で始まる)
・cloud-init形式(1行目が#cloud-config
で始まる)
Instance Meta Data
インスタンスの中に埋め込まれているデータ。
例えば、EC2のIPアドレスやホストネーム、AMIのID番号などがあります。
キーペア
EC2へログインするために使用する秘密鍵、公開鍵のペアのことを指します。
それでは実際にEC2を使ってみましょう!
EBSをEC2にアタッチしてマウントしましょう
■場所
EC2>ボリューム
この後、
アクション>アタッチを行う
ターミナルでアタッチされているか確認する。
// root権限に移動
$ sudo su -
$ ls -l /dev/sdf
lrwxrwxrwx 1 root root 4 Apr 30 06:05 /dev/sdf -> xvdf
// 中を調べる
$ df -h
/dev/xvda1 8.0G 1.5G 6.6G 18% /
// ファイルを確認
$ file -s /dev/sdf
/dev/sdf: symbolic link to `xvdf'
// 中に何もない
$ file -s /dev/xvdf
/dev/xvdf: data
// ファイルを作成するコマンド
$ mkfs -t ext4 /dev/xvdf
// 中に追加された
$ file -s /dev/xvdf
/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=XXXXXXXXXXXXXXXX (extents) (64bit) (large files) (huge files)
// logフォルダを作成
$ mkdir /log
// フォルダを確認
$ ls -l /
total 16
lrwxrwxrwx 1 root root 7 Apr 24 09:37 bin -> usr/bin
dr-xr-xr-x 4 root root 4096 Apr 24 09:38 boot
drwxr-xr-x 15 root root 2860 Apr 30 06:05 dev
drwxr-xr-x 81 root root 8192 Apr 30 05:47 etc
drwxr-xr-x 3 root root 22 Apr 30 05:47 home
lrwxrwxrwx 1 root root 7 Apr 24 09:37 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Apr 24 09:37 lib64 -> usr/lib64
drwxr-xr-x 2 root root 6 Apr 24 09:37 local
drwxr-xr-x 2 root root 6 Apr 30 06:15 log
drwxr-xr-x 2 root root 6 Apr 9 2019 media
drwxr-xr-x 2 root root 6 Apr 9 2019 mnt
drwxr-xr-x 4 root root 27 Apr 24 09:38 opt
dr-xr-xr-x 108 root root 0 Apr 30 05:46 proc
dr-xr-x--- 3 root root 103 Apr 30 05:47 root
drwxr-xr-x 28 root root 960 Apr 30 05:47 run
lrwxrwxrwx 1 root root 8 Apr 24 09:37 sbin -> usr/sbin
drwxr-xr-x 2 root root 6 Apr 9 2019 srv
dr-xr-xr-x 13 root root 0 Apr 30 05:46 sys
drwxrwxrwt 9 root root 261 Apr 30 05:47 tmp
drwxr-xr-x 13 root root 155 Apr 24 09:37 usr
drwxr-xr-x 20 root root 280 Apr 30 05:47 var
// マウントされているかを確認(EBSはアタッチしてマウントしてようやく使える)
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 468K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.5G 6.6G 18% /
tmpfs 99M 0 99M 0% /run/user/1000
tmpfs 99M 0 99M 0% /run/user/0
// 上記にないのでされていない、だからマウントしましょう
$ mount /dev/xvdf /log
// マウントされているか確認しましょう
$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 482M 0 482M 0% /dev
tmpfs 492M 0 492M 0% /dev/shm
tmpfs 492M 468K 492M 1% /run
tmpfs 492M 0 492M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.5G 6.6G 18% /
tmpfs 99M 0 99M 0% /run/user/1000
tmpfs 99M 0 99M 0% /run/user/0
/dev/xvdf 123G 61M 117G 1% /log →あった
EC2インスタンスが再起動した時に、EBSが自動的にマウントされるように設定する
// ①ファイル作成完了
$ touch /log/testlogfile.log
$ ls -l /log/testlogfile.log
-rw-r--r-- 1 root root 0 Apr 30 06:21 /log/testlogfile.log
// ②マウントしたいファイルシステムのUUIDを取得する
$ file -s /dev/xvdf
/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=edc2cbbe-XXXX-XXXX-8883-909522484c6d (needs journal recovery) (extents) (64bit) (large files) (huge files)
// ③viで/etc/fstabにUUIDを追記する
$ vi /etc/fstab
UUID=edc2cbbe-XXXX-XXXX-8883-909522484c6d /log ext4 default 1 1
これで自動的にマウントされるようになりました。
スナップショット
①インスタンスの停止
アクション>インスタンスの停止
②イメージの作成
アクション>イメージを作成
③イメージの確認
ブロックデバイスが2つあることを確認できました。
008b9ff
04e3d35
④スナップショットを確認
スナップショットが2つあることを確認できました。
008b9ff
04e3d35
これで完了です。
ではこのスナップショットを使ってEC2を起動してみましょう!
スナップショットを使ったEC2の起動方法
①インスタンスを起動
マイAMI内にイメージがあります。
②EC2にログインする
// ログイン(パブリックIP)
$ ssh -i test-keypair.pem ec2-user@(パブリックIP)
// バックアップが取れているか確認
$ sudo su -
$ df -h
/dev/xvdf 123G 61M 117G 1% /log →あった