使用AWS CLI 操作EC2实例
1.简介
在这个简短的教程中,我们将了解 EC2 服务的 AWS 命令行界面。
在继续之前,请记住配置我们的 AWS CLI 访问 。
2. 列出EC2实例
首先,让我们看看如何列出我们的 EC2 实例:
$ aws ec2 describe-instances
输出将包含有关我们实例的所有必要数据,采用 JSON 格式。一些最有用的属性是:
{
"InstanceId": "instance_id",
"InstanceType": "t2.small",
"KeyName": "ssh_key_name",
"LaunchTime": "2020-01-31T15:48:22.000Z",
"Monitoring": {
"State": "disabled"
},
"Placement": {
"AvailabilityZone": "eu-central-1c"
},
"PublicIpAddress": "1.123.123.12",
"State": {
"Code": 80,
"Name": "stopped"
},
"Tags": [
{
"Key": "Creator",
"Value": "Blogdemo"
}
]
}
我们还可以使用 CLI 按给定属性过滤我们的实例。为此,我们需要添加一个额外的*–filters*参数。
例如,我们可以搜索给定类型的实例:
$ aws ec2 describe-instances --filters Name=instance-type,Values=t2.medium
或标签键:
$ aws ec2 describe-instances --filters "Name=tag-key,Values=Blogdemo"
这将仅返回与我们的过滤器匹配的实例。
要获取有关特定 EC2 实例的详细信息,我们需要传递*–instance-ids*参数,后跟实例 ID 列表:
$ aws ec2 describe-instances --instance-ids instance_id instance_id_2
3. 为 EC2 实例创建一个新的密钥对
在启动一个新的 EC2 实例之前,我们需要一个用于连接它的 SSH 密钥对。
AWS CLI 提供了一种生成密钥的简单方法:
$ aws ec2 create-key-pair --key-name demoKey --output text > demoKey.pem
上述命令将在 AWS 中创建一个名为demoKey的新密钥,并将密钥直接通过管道传输到我们指定的位置,在本例中为demoKey.pem。
生成的文件将类似于以下内容:
EXAMPLEKEYKCAQEAy7WZhaDsrA1W3mRlQtvhwyO
## ...
现在可以在创建新的 EC2 实例时使用它。
4. 启动新的 EC2 实例
AWS CLI 为我们提供了一种启动新 EC2 实例的简单方法。作为先决条件,我们需要准备pem密钥对并选择所需的*Amazon 系统映像 (AMI)*和实例类型。
AMI 为实例提供操作系统、应用程序服务器和应用程序。实例类型虽然定义了 CPU 和 RAM 等硬件属性。
作为示例,我们将创建 运行 Ubuntu 18.04 映像的t2.micro实例,其 id为ami-0b418580298265d5c:
$ aws ec2 run-instances --image-id ami-0b418580298265d5c --instance-type t2.micro --key-name demoKey
输出将包含有关我们新实例的所有 JSON 格式数据。一些更重要的包括:
{
"Instances": [
{
"PrivateDns": "ip-10-31-39-158.eu-central-1.compute.internal",
"Status": "booting",
"InstanceId": "9b137a0d-2f5d-4cc0-9704-13da4b31fdcb",
"SshKeyName": "EU-Central-1",
"InstanceType": "t2.micro",
"CreatedAt": "2020-02-07T11:00:00+00:00",
"PublicDns": "ec2-192-0-2-1.eu-central-1.compute.amazonaws.com",
"SecurityGroupIds": [
"sg-b022add5"
],
"Architecture": "x86_64",
"RootDeviceType": "ebs",
"Os": "Server Ubuntu 18.04",
"AvailabilityZone": "eu-central-1c",
"PrivateIp": "10.31.39.158",
"PublicIp": "192.0.2.0"
}
]
}
启动后,新实例就可以使用了。要连接到它,我们可以使用 PublicIp 属性中的* IP 地址或PublicDns*属性中的主机。
请注意,我们可能需要很短的时间才能连接到它。这可以通过describe-instances命令输出中的实例状态进行监控。
首先,实例状态为pending:
{
...
"State": {
"Code": 0,
"Name": "pending"
},
...
}
当状态为running时,实例已完全启动并准备好连接到:
{
...
"State": {
"Code": 16,
"Name": "running"
},
...
}
在创建新实例时,我们可以通过添加*–security-group-ids security_group_id*参数来指定将附加到它的安全组。如果我们不指定它,将使用默认值。有关更多信息,请参阅AWS 安全组文档 。
我们也可以通过添加*–subnet-id subnet_id*来指定子网 ID 。如果我们不指定它,将使用默认值。 要了解在启动 EC2 实例时可以使用的更多选项,请参阅AWS 官方文档以了解run-instance命令 。
5. 停止和启动 EC2 实例
任何处于运行状态的按需 EC2 实例都可以停止:
$ aws ec2 stop-instances --instance-ids instance_id
又开始了:
$ aws ec2 start-instances --instance-ids instance_id
请注意,实例将在启动后保留其实例 ID,但将获得不同的公共 IP 地址。
6. 终止实例
如果我们想完全删除实例,那么我们可以终止实例:
$ aws ec2 terminate-instances --instance-ids instance_id
请注意,当我们终止一个实例时,将无法像停止的实例一样再次启动它。有关停止和终止实例之间差异的更多信息,请参阅实例生命周期文档。
终止后的实例仍然可见(大约一小时)。