料金

EC2 の使用は、1 秒ごとに課金されます (最小課金時間は 60 秒)。同様に、EBS ボリュームのプロビジョニング済みストレージも、1 秒ごとに課金されます (最小課金時間は 60 秒)。秒単位の課金は以下で起動されるインスタンスに適用されます。
オンデマンドの予約済みスポットフォーム
すべてのリージョンとアベイラビリティーゾーン
Amazon Linux および Ubuntu
データ転送、Elastic IP アドレス、EBS 最適化インスタンスといった関連費用の詳細については、オンデマンドの料金ページを参照してください。

無料利用枠
12 か月間無料
Amazon EC2
750 時間/月
750 時間/月の Linux、RHEL、または SLES t2.micro インスタンスの使用
750 時間/月の Windows t2.micro インスタンスの使用

EC2はt2.microで750時間無料枠あり

SSHキーペアを作成する

SSHログインで使用するキーペアの作成はAmazon EC2 コンソールのキーペアで行う。
CloudFormationで作成することはできない。

キーペアの作成 width=640

キーペアの作成 width=640

キーペアの作成 width=640

Amazone Machine Image (AMI)

Amazon EC2 コンソールから見つける方法とaws-cliを使用する方法がある。

今回はUbuntuLinuxを使用するので、ami-0d5db3e2a1b98ca94を使用する。同じバージョンでも複数のイメージが存在し、リージョンによってもIDは異なるので注意する。

インスタンスの作成

ec2.yml

イメージタイプは無料枠が適用されるt2.microを使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
AWSTemplateFormatVersion: '2010-09-09'
Description: Ubuntu on EC2

# ------------------------------------------------------------ #
# Input Parameters
# ------------------------------------------------------------ #
Parameters:
KeyName:
Description: Amazon EC2 Key Pair
Type: "AWS::EC2::KeyPair::KeyName"
Default: mykey
AllowSshFrom:
Description: from source IP Address
Type: String
Default: 0.0.0.0/0
ImageID:
Description: Ubuntu Linux AMI
Type: String

Resources:
# ------------------------------------------------------------ #
# EC2
# ------------------------------------------------------------ #
MySecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable SSH
SecurityGroupIngress:
- CidrIp: !Ref AllowSshFrom
IpProtocol: tcp
FromPort: '22'
ToPort: '22'

MyEC2Instance:
Type: AWS::EC2::Instance
Description: "Ubuntu 18.04 bionic on AWS"
Properties:
ImageId: !Ref ImageID
InstanceType: t2.micro
SecurityGroupIds:
- Fn::GetAtt: [ MySecurityGroup, GroupId ]
KeyName: !Ref KeyName
Tags:
- Key: Name
Value: !Sub ${AWS::StackName}
UserData: !Base64
Fn::Sub: |
#!/bin/bash -xe

# ubuntuのパッケージを最新化
apt update
DEBIAN_FRONTEND=noninteractive apt -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get upgrade -y

# ------------------------------------------------------------ #
# Output Parameters
# ------------------------------------------------------------ #
Outputs:
PublicIp:
Description: "Public IP"
Value: !GetAtt MyEC2Instance.PublicIp

parameters.json

証明書を発行するドメイン名を指定する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[
{
"ParameterKey": "KeyName",
"ParameterValue": "mykey"
},
{
"ParameterKey": "ImageID",
"ParameterValue": "ami-0d5db3e2a1b98ca94"
},
{
"ParameterKey": "AllowSshFrom",
"ParameterValue": "0.0.0.0/0"
}
]

インスタンスを作成する

1
2
3
4
$ aws cloudformation create-stack --stack-name tutorial-ec2 --template-body "file://./ec2.yml" --parameters "file://./parameters.json"
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXX:stack/tutorial-ec2/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

インスタンスにログインする

作成したインスタンスの情報取得

インスタンスの情報はCloudFormationの結果以外にもaws-cliで取得することもできる。
タグ名としてスタック名を付与しているので、スタック名を指定してインスタンスを特定し、IPアドレス等を取得している。

1
2
3
4
5
6
aws ec2 describe-instances --filters "Name=tag:Name,Values=tutorial-ec2" --query 'Reservations[].Instances[].[ImageId,InstanceId,KeyName,PublicIpAddress,PrivateIpAddress]' --output table
----------------------------------------------------------------------------------------------
| DescribeInstances |
+------------------------+-----------------------+--------+-----------------+----------------+
| ami-0d5db3e2a1b98ca94 | i-087fXXXXXXXX0ec4f | mykey | XXX.XXX.XXX.XXX | 172.31.38.166 |
+------------------------+-----------------------+--------+-----------------+----------------+

sshでログイン

sshで作成したキーペアの秘密鍵を指定して接続。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ ssh -i mykey.pem ubuntu@XXX.XXX.XXX.XXX
The authenticity of host 'XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)' can't be established.
ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-1052-aws x86_64)

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

System information as of Mon May 4 04:22:37 UTC 2020

System load: 0.0 Processes: 88
Usage of /: 19.0% of 7.69GB Users logged in: 0
Memory usage: 18% IP address for eth0: 172.31.38.166
Swap usage: 0%

0 packages can be updated.
0 updates are security updates.


*** System restart required ***

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@ip-172-31-38-166:~$