🎉

EC2関連

2023/10/07に公開

EC2

EC2とはAWSが提供する仮想サーバ

コンポーネント

AMI

「Amazon マシンイメージ(AMI)」
⇨ これを元にEC2を構築される。中身はOSの情報などが入っている
⇨ OS以外に入っているものとして、WordPressがすでに入っていたり最小限のソフトウェアなども入っている
⇨ Windowsを利用する際に気になるのが、ライセンスの問題だけれどすでに従量課金の中に含まれているので別途請求されるわけではない

「MarketPlace」
⇨ すでにソフトウェアが組み込まれて提供されているAMI

「コミュニティAMI」
⇨ 個人でもAMIを作成することができ、コミュニティAMIから他のユーザーが作成したAMIを利用することができる。
※ AWSが確認したものもあるが、個人が作成したものなので使い方はセキュリティ的に要注意

インスタンスタイプ

EC2のスペックのこと

例)t2.micro

項目 説明
t ファミリー名。それぞれのファミリーごとに特徴を持ったスペックがある。
2 世代番号。大きなものほど最新のものを利用できる。同スペックでも最新のが安い場合がある
micro インスタンスサイズ。CPU、MEMのこと。詳細なスペックは以下URL参考

https://aws.amazon.com/jp/ec2/instance-types/

t系について
t系はテストに向いている。
⇨ バースト機能という特徴があって、CPUを蓄積(クレジット)することができ、スペック以上の処理が必要な場合は溜めたクレジットを解放できる。
⇨ クレジットを使い切ると一気に使い物にならないレベルで機能が下がるため本番環境には向いていない。

ファミリー簡単解説

項目 説明
M系 汎用的
C系 CPU高い
R系 MEM高い
P系 GPUがついている
H系 ディスクスループットが高速。ストレージ最適化

EBS

EC2に紐付けすることができる外付けディスク
⇨ スナップショットが取得でき、バックアップを取ることができる

注意点
・別AZに跨ってEC2にEBSをアタッチできない
・複数のEC2から1つのEBSにアタッチはできない
(逆はできる。1つのEC2が複数のEBSをマウントすることはできるが上限はある)

タイプ

項目 説明
SSD 汎用SSD。プロビジョンドIOPS
HDD スループット最適化HDD。ColudHDD

スナップショット
EBSではスナップショット(バックアップ)を取ることができる
このスナップショットはS3に保存されるが閲覧することができない
※ 補足
スナップショット → 差分バックアップ。早い。数が多くなると復元に時間がかかるようになってしまう

AMI
冒頭の方で話をしたものと一緒。EC2を丸ごと(設定内容)バックアップできる。
これは、アタッチしているEBSのスナップショットを参照している。

ブロックデバイスマッピングという
・どのスナップショットを使うかなどはAMI自体が情報を持っているので、同じEBSを利用できる

AMIを取る時には一緒にスナップショットを取っている
権限の管理情報なども持っている

ユーザーデータ
EC2を作成するときにスクリプトを初回実行することができる。
例)初回にApacheのインストールコマンドをすでに流しておくなど

・実行権限はrootユーザー
・形式は、シェルスクリプト形式 or cloud-init形式

インスタンスメタデータ
EC2に埋め込まれた詳細なデータ
データの内容としては、IPアドレス、ホストネーム、AMI IDなどなどがある
このインスタンスメタデータは外部からコマンドを叩くことでデータを取得できるので、いろんな使い方ができる。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html

Amazon Linux2ではcurlでmeta-dataで取得することができる

 curl http://169.254.169.254/latest/meta-data/

他にもec2-metadataコマンドでデータ取得できる

TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/

下の方はVersion2のコマンドなのだが、基本的には2を使う方がセキュリティ的な問題のためにも良い

キーペア
秘密鍵・公開鍵のセット
秘密鍵→復号化
公開鍵→暗号化

秘密鍵をローカルに置いておく

「もしもの場合」
もしも秘密鍵紛失した場合 → AMI取得 → 新しくEC2を作成 → キーペアを新しくする(作成)

EC2購入方法

EC2にはオンデマンド以外の購入オプションがある
デフォルトの購入方法としてはオンデマンドの従量課金制

リザーブドインスタンス
長期期間利用向けの購入方法
だいたい、安定稼働に入ってから購入を検討し始める
以下のような選択肢がある。最も割引を受けたいのであれば3年一括前払い(スタンダード)が最も割引率が高い
・1年 / 3年で購入
・全額前払い / 一部前払い / 前払いなし
・スタンダード / コンバーティブル

注意点として、
スタンダードタイプは稼働後にインスタンスタイプを変更することができない。
→ 仮に安定稼動していたと思っていたが負荷が上がった時は大変なことになってしまう
そこで「コンバーティブル」というタイプがあって、これは後で変更はできるがその分割引率は下がってしまう

スポットインスタンス
入札形式でAWSの空きリソースを利用して行う
空きリソースがなくなったり、入札で自分より高い人がいるとインスタンスは自動的に停止してしまうので使い方には注意が必要。

「自動入札モデル」というのがあって、これはAWSが自動で入札してくれるため勝手に削除されるっというのが防げる

Elastic Beanstalk

アプリケーションの実行環境をささっと自動的に作成してくれる
アプリケーションのコードをzipファイルなどでElastic Beanstalkにアップロードをするとすぐにアプリが使える環境が出来上がる

・対象の環境(コンテナとか)
・対象のプログラミング言語
など制限がかかっているので十分に調べてから使うのがいい。
(自由度が低くなるのであまり使っているお客様は見ない)

Elastic Beanstalkは大きく分けて2種類の環境を選択できる
WEBサーバ
一般的なWEBアプリを動かす環境が作成される
(EC2 + ALB + RDSみたいな環境)

ワーカー環境
バッチ処理のようなワークフロー向け
一部、処理負荷が高い環境を切り離すために利用することがある
(SQS + EC2)

基本的には環境を作るための設定ファイルがあるので、そちらを編集する

AWS Batch

AWSが提供しているバッチを一括で管理・処理してくれるサービス

コンポーネント

バッチジョブ
作業単位のことでシェルスクリプトや、コンテナイメージなどバッチ処理の中身のこと

ジョブ定義
実際にバッチが動く環境を定義する
EC2 or Fargateなどパラメーターで実行環境をJSONで管理をする

ジョブキュー
ジョブ(バッチ処理)がどんどんジョブキューに送られていく
このジョブキューで設定した順序や実行環境を判断してバッチ処理を制御していく

コンピューティング環境
どういったインスタンスを選ぶのかなど実行基盤側を選択する
マネージド型とアンマネージド型がある

https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/high-performance-computing-lens/batch-based-architecture.html

Outposts

オンプレミスでAWSの環境サービスを提供できる(インターネット経由で)

一般的にはハイブリット環境でDXを利用してオンプレミス環境とAWSを繋ぐことが多い
ただ、法律やコストの問題などできない場合がある
そういったときに、内部ネットワークにAWS環境があるような構成を提供できる。

特徴
内部ネットワークなので低レイテンシーを実現できる
(一部提供できないAWSサービスもある)

提供形態
Outposts rackというラックがあり、スイッチや冷却システムをAWSがひとまとめにしたラック
このラック自体の保守はAWSが行ってくれる

利用条件、制限
・設置場所や電源の確保がいる
・インターネット回線がいる (AWSサービスを持ってくるイメージ)
・エンタープライズサポートに入っていること
・そもそも利用できるか、利用できないサービスがあるかなど国や地域は要確認

AutoScalling

EC2を条件に合わせて増減してくれるサービス

起動テンプレート
AutoScallingを利用する前にどういった内容でEC2を起動するか決めなければならない。

・何のAIMを利用するか?
・インスタンスタイプは何を利用するか?
などなど

起動テンプレートではバージョン管理ができる(※ 「起動設定」というものは古く「起動テンプレート」を推奨)

起動台数の条件例

項目 説明
最小 2 EC2は2以下の台数にはしないで
希望 2 最初(通常)は2台での稼働にしておいて
最大 4 多くても4台までの増加に留めておいて

CloudWatchを利用することで、EC2の負荷を監視し、スケーリングポリシーと紐づけることでAutoScallingが増減を管理してくれる

デモEC2(EBSマウント)

※ 初歩的なEC2起動の箇所は割愛
EC2に2つのEBSをアタッチ&マウントする方法を備忘録として

1、新しくEBSを作成
2、EBSを既存のEC2にアタッチ(アタッチ後のインスタンスのストレージ)

3、アタッチしただけではまだ利用できないのでマウント方法はコマンドを参照
4、この状態でAMIを取得し、インスタンスを起動すると同様の状態で起動されるのでバックアップとしてAMIは大事

(EBSで作成された/dev/sdfがシンボリックリンクを確認)
# ls -l /dev/sdf
lrwxrwxrwx 1 root root 4 Oct  4 21:47 /dev/sdf -> xvdf

(xvdfがあることを確認)
# lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0    8G  0 disk 
└─xvda1 202:1    0    8G  0 part /
xvdf    202:80   0  500G  0 disk 

(xvdfまだ使えない状態)
# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        468M     0  468M   0% /dev
tmpfs           477M     0  477M   0% /dev/shm
tmpfs           477M  420K  476M   1% /run
tmpfs           477M     0  477M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.9G  6.2G  24% /
tmpfs            96M     0   96M   0% /run/user/1000

(シンボリックリンクを確認)
# file -s /dev/sdf
/dev/sdf: symbolic link to `xvdf'

(dataの状態)
# file -s /dev/xvdf
/dev/xvdf: data

(ファイルシステムの作成)
# mkfs -t ext4 /dev/xvdf
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
32768000 inodes, 131072000 blocks
6553600 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2279604224
4000 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done     

(無事作成できたことを確認)
# file -s /dev/xvdf
/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=646eaeef-411d-4470-9a9e-31c5dab46e74 (extents) (64bit) (large files) (huge files)

(/logディレクトリにマウントをする)
# mkdir /log
# mount /dev/xvdf /log

(/logディレクトリにマウントできていることを確認)
# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        468M     0  468M   0% /dev
tmpfs           477M     0  477M   0% /dev/shm
tmpfs           477M  420K  476M   1% /run
tmpfs           477M     0  477M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.9G  6.2G  24% /
tmpfs            96M     0   96M   0% /run/user/1000
/dev/xvdf       492G   24K  467G   1% /log

(再起動の時にマウントされるように設定)
# vi /etc/fstab
※ 割愛

Discussion