Contents

使用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

请注意,当我们终止一个实例时,将无法像停止的实例一样再次启动它。有关停止和终止实例之间差异的更多信息,请参阅实例生命周期文档。

终止后的实例仍然可见(大约一小时)。