AWS EC2のデプロイを方法別で比較。最速のデプロイ方法はどれ?

こんにちは、クララTAMの石川です!

AWS(Amazon Web Service)はElastic Compute Cloud(EC2)というサービスでVirtual Machine(VM)を提供していますね。

そして、AWSではEC2を複数の方法でデプロイすることができます。

今回は、いくつかあるEC2のデプロイについて、どの手段が一番早くEC2を構築できるのか、それぞれのメリット・デメリットは何かを比較・纏めてみました。

目次

今回比較するEC2のデプロイ方法と要件

今回利用するデプロイ方法は以下

・コントロールパネルでの操作
・AWS CLI(CloudShell)での操作
・CloudFormationの操作

また、共通の結果として、EIPを付与して、Nginxのデフォルトページが表示されることが確認できる状態まで設定、とします。

今回の要件はこちら

OS:Amazon Linux 2 AMI (HVM) – Kernel 5.10, SSD Volume Type
※ami-0f7691f59fd7c47af (64 ビット Arm)

インスタンスタイプ:t4g.micro(2vCPU、1GiB)

ディスクサイズ:8GB(default)

SecurityGroup:80
(※メイン要件ではないので…)

GUIデプロイ

AWSマネジメントコンソールから計測スタート

  1. Amazonマシンイメージ(AMI)
  2. インスタンスタイプの選択
  3. インスタンスの詳細の設定
  4. ストレージの追加
  5. タグの追加
  6. セキュリティグループの設定
  7. インスタンス作成の確認
  8. 細かいところはSSHで調整

GUIデプロイにかかった時間

大体・・・30分ぐらい。
PC前で張ってれば10分。

GUI操作:2分
待ち  :3分
SSH操作:5分 →構築時にユーザデータとして記載可能。その場合は0分に。

AWS コマンドラインインターフェイス(CLI)デプロイ

aws ec2 create-security-group \
--group-name deploy-cli \
--description "My security group" \
--vpc-id vpc-6a3b310e
aws ec2 authorize-security-group-ingress \
--group-id <上記のSGID> \
--protocol tcp \
--port 80 \
--cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress \
--group-id <上記のSGID> \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0
aws ec2 create-key-pair \
--key-name ishikawa-deploy-cli \
--output text
aws ec2 run-instances \
--image-id ami-0f7691f59fd7c47af \
--count 1 \
--instance-type t4g.micro \
--key-name ishikawa-deploy-cli \
--security-group-ids <上記のSGID> \
--subnet-id subnet-989aecee

CLIデプロイにかかった時間

大体・・・30分ぐらい

CLI作成:10分
CLI操作:10分
待ち  :3分
SSH操作:5分

AWS CloudFormation(CFn)デプロイ

Parameters:
KeyName:
Description: The EC2 Key Pair to allow SSH access to the instance
Type: "AWS::EC2::KeyPair::KeyName"

VPCID:
Type: String
Default: "vpc-6a3b310e"

SubnetID01:
Type: String
Default: "subnet-989aecee"

Resources:
DEPLOYSG01:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: deploy-CFn
GroupDescription: Allow SSH and HTTP access only MyIP
VpcId: !Ref VPCID
SecurityGroupIngress:
# http
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: "0.0.0.0/0"
# ssh
- IpProtocol: tcp
FromPort: 22
ToPort: 22
CidrIp: "0.0.0.0/0"
DEPLOYEC2:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0f7691f59fd7c47af
KeyName: !Ref KeyName
InstanceType: t4g.micro
NetworkInterfaces:
- AssociatePublicIpAddress: "true"
DeviceIndex: "0"
SubnetId: !Ref SubnetID01
GroupSet:
- !Ref DEPLOYSG01
UserData: !Base64 |
#!/bin/bash
sudo yum update -y
sudo amazon-linux-extras
sudo amazon-linux-extras install nginx1 -y
sudo systemctl enable nginx
sudo systemctl start nginx
Tags:
- Key: Name
Value: deploy-CFn

CFnデプロイにかかった時間

大体・・・15分ぐらい

yaml作成:10分
(AWSが)構築:2分
待ち  :3分
SSH操作:0分

まとめ・比較表

GUICLICFn
事前準備特になし◎十分時間が必要

・コマンドオプション

・事前に何が必要なのか

十分時間が必要

・Yaml作成

・CFnに対応していないものの作成

構築中の手離れ悪い✖

構築中は逐一気にかける

良い◎

コマンドごとに確認が必要だが、シェル化等により対応可能

良い◎

yamlに構築情報が乗っているので、分割の程度により放置でもよい

操作のしやすさ断然良い◎悪い✖

オプションを調べるのに時間がかかる

かなり悪い✖

yamlに特化したものを作る必要がある。対応していないサービスもある。

環境再現性難しい✖

手順書が無いと厳しいが、ユーザIFは頻繁に変わるため、作りきりの手順では後々で厳しそう

あり◎

同じコマンドを流せば同じものができる。コマンドは頻繁に変更が入らない。

あり◎
削除自動で作成されるものもあり、どれが消していいものかがわからなくなる。作ったものがどれかわからない。が、作成時にタグを付与する等で対応可能。作ったものがきれいに消える。◎
こんなところに使うのがおすすめ試験的構築変更が頻繁にかかるが履歴をとっておきたい環境インフラ構築の自動化も視野に入れた環境

以上、今回は方法別のEC2デプロイ時間・メリット・デメリットを検証してみました。

よかったらシェアしてね!
目次