将 Amazon Lightsail 与 AWS CLI 结合使用 - Amazon Lightsail

将 Amazon Lightsail 与 AWS CLI 结合使用

本教程将引导您完成使用 AWS Command Line Interface (AWS CLI) 的常见 Amazon Lightsail 操作。您将了解如何创建和管理 Lightsail 资源,包括密钥对、实例、存储和快照。

先决条件

在开始本教程之前,请确保您具有以下各项。

  1. AWS CLI。如需安装,请遵循 AWS CLI 安装指南。您也可以使用 AWS CloudShell。其中包括 AWS CLI。

  2. 已使用适当的凭证配置 AWS CLI。如果尚未设置凭证,请运行 aws configure

  3. 基本熟悉命令行界面和 SSH 概念。

  4. 在您的 AWS 账户中创建和管理 Lightsail 资源所需的充分权限

若尚未设置,请在开始前将 AWS_REGION 环境变量配置为与配置 AWS CLI 使用的区域一致。此环境变量用于在示例命令中指定 Lightsail 资源的可用区。

$ [ -z "${AWS_REGION}" ] && export AWS_REGION=$(aws configure get region)

现在让我们开始使用 CLI 来创建和管理 Amazon Lightsail 资源。

生成 SSH 密钥对

SSH 密钥对让您可以在不使用密码的情况下安全地连接到您的 Lightsail 实例。在本节中,您将创建新的密钥对并检索其信息。

例 – 创建新的密钥对

以下命令将创建一个名为“cli-tutorial-keys”的新 SSH 密钥对,并将私有密钥保存到您的本地计算机。

$ aws lightsail create-key-pair --key-pair-name cli-tutorial-keys \ --query privateKeyBase64 --output text > ~/.ssh/cli-tutorial-keys.pem $ chmod 400 ~/.ssh/cli-tutorial-keys.pem

运行此命令后,该私有密钥将保存到您具有适当权限的 ~/.ssh 目录中。该 chmod 命令可确保只有您才能读取该私有密钥文件,这是 SSH 的安全要求。

例 - 检索密钥对信息

您可以通过检索密钥对的信息来验证密钥对是否已成功创建。

$ aws lightsail get-key-pair --key-pair-name cli-tutorial-keys { "keyPair": { "name": "cli-tutorial-keys", "arn": "arn:aws:lightsail:us-east-2:123456789012:KeyPair/e00xmpl-6a6a-434a-bff1-87f2bb815e21", "supportCode": "123456789012/cli-tutorial-keys", "createdAt": 1673596800.000, "location": { "availabilityZone": "all", "regionName": "us-east-2" }, "resourceType": "KeyPair", "tags": [], "fingerprint": "d0:0d:30:db:5a:24:df:f6:17:f0:e2:15:45:77:3d:bb:d0:6d:fc:81" } }

输出会显示有关您密钥对的详细信息,包括其名称、ARN、创建时间、区域和指纹。连接到实例时,还指纹可用于验证密钥的真实性。

创建和管理实例

Lightsail 实例是运行应用程序或网站的虚拟专用服务器。在本节中,您将创建一个 WordPress 实例并检索其详细信息。

例 - 创建 WordPress 实例

以下命令使用 nano_3_0 捆绑包(最小的 Lightsail 实例大小)来创建一个新的 WordPress 实例,并将其与您的密钥对相关联。该命令使用 AWS_REGION 环境变量在您配置的区域的可用区中创建实例。

$ aws lightsail create-instances --instance-names cli-tutorial \ --availability-zone ${AWS_REGION}a --blueprint-id wordpress \ --bundle-id nano_3_0 --key-pair-name cli-tutorial-keys { "operations": [ { "id": "f30xmpl-3727-492a-9d42-5c94ad3ef9a8", "resourceName": "cli-tutorial", "resourceType": "Instance", "createdAt": 1673596800.000, "location": { "availabilityZone": "us-east-2a", "regionName": "us-east-2" }, "isTerminal": false, "operationType": "CreateInstance", "status": "Started", "statusChangedAt": 1673596800.000 } ] }

响应表明实例创建操作已开始。您的实例可能需要几分钟才能变为可用。

例 - 获取实例详细信息

创建实例后,您可以使用以下命令来检索其详细信息。

$ aws lightsail get-instance --instance-name cli-tutorial { "instance": { "name": "cli-tutorial", "arn": "arn:aws:lightsail:us-east-2:123456789012:Instance/7d3xmpl-ae2e-44d5-bbd9-22f9ec2abe1f", "supportCode": "123456789012/i-099cxmpl5dad5923c", "createdAt": 1673596800.000, "location": { "availabilityZone": "us-east-2a", "regionName": "us-east-2" }, "resourceType": "Instance", "tags": [], "blueprintId": "wordpress", "blueprintName": "WordPress", "bundleId": "nano_3_0", "isStaticIp": false, "privateIpAddress": "172.26.6.136", "publicIpAddress": "192.0.2.1", "ipv6Addresses": [ "2001:db8:85a3:0000:0000:8a2e:0370:7334" ], "ipAddressType": "dualstack", "hardware": { "cpuCount": 2, "disks": [ { "createdAt": 1673596800.000, "sizeInGb": 20, "isSystemDisk": true, "iops": 100, "path": "/dev/xvda", "attachedTo": "cli-tutorial", "attachmentState": "attached" } ], "ramSizeInGb": 0.5 }, "networking": { "monthlyTransfer": { "gbPerMonthAllocated": 1024 }, "ports": [ { "fromPort": 80, "toPort": 80, "protocol": "tcp", "accessFrom": "Anywhere (0.0.0.0/0 and ::/0)", "accessType": "public", "commonName": "", "accessDirection": "inbound", "cidrs": [ "0.0.0.0/0" ], "ipv6Cidrs": [ "::/0" ], "cidrListAliases": [] }, { "fromPort": 22, "toPort": 22, "protocol": "tcp", "accessFrom": "Anywhere (0.0.0.0/0 and ::/0)", "accessType": "public", "commonName": "", "accessDirection": "inbound", "cidrs": [ "0.0.0.0/0" ], "ipv6Cidrs": [ "::/0" ], "cidrListAliases": [] }, { "fromPort": 443, "toPort": 443, "protocol": "tcp", "accessFrom": "Anywhere (0.0.0.0/0 and ::/0)", "accessType": "public", "commonName": "", "accessDirection": "inbound", "cidrs": [ "0.0.0.0/0" ], "ipv6Cidrs": [ "::/0" ], "cidrListAliases": [] } ] }, "state": { "code": 16, "name": "running" }, "username": "bitnami", "sshKeyName": "cli-tutorial-keys", "metadataOptions": { "state": "applied", "httpTokens": "optional", "httpEndpoint": "enabled", "httpPutResponseHopLimit": 1, "httpProtocolIpv6": "disabled" } } }

输出会提供有关您实例的全面信息,包括其 IP 地址、硬件规格、网络配置和状态。记下公有 IP 地址和用户名,因为您需要有这些信息才能连接到实例。

连接到您的实例

创建实例后,您可以使用之前创建的密钥对通过 SSH 连接到实例。本节说明了如何建立 SSH 连接和管理安全设置。

例 – 通过 SSH 连接到您的实例

使用以下命令通过 SSH 连接到您的实例,将 IP 地址替换为您实例的公有 IP。

$ ssh -i ~/.ssh/cli-tutorial-keys.pem bitnami@192.0.2.1 Linux ip-172-26-6-136 6.1.0-32-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.129-1 (2025-03-06) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. ___ _ _ _ | _ |_) |_ _ _ __ _ _ __ (_) | _ \ | _| ' \/ _` | ' \| | |___/_|\__|_|_|\__,_|_|_|_|_| *** Welcome to the Bitnami package for WordPress 6.7.2 *** *** Documentation: https://docs.bitnami.com/aws/apps/wordpress/ *** *** https://docs.bitnami.com/aws/ *** *** Bitnami Forums: https://github.com/bitnami/vms/ *** bitnami@ip-172-26-6-136:~$ df Filesystem 1K-blocks Used Available Use% Mounted on udev 217920 0 217920 0% /dev tmpfs 45860 480 45380 2% /run /dev/nvme0n1p1 20403592 3328832 16142256 18% / tmpfs 229292 0 229292 0% /dev/shm tmpfs 5120 0 5120 0% /run/lock /dev/nvme0n1p15 126678 11840 114838 10% /boot/efi tmpfs 45856 0 45856 0% /run/user/1000

连接后,您可以管理您的 WordPress 安装、配置服务器或安装其他软件。上述示例通过 df 命令显示了实例的磁盘使用情况。

例 - 关闭公有端口

当您不使用 SSH 时,可以关闭您实例上的公有端口。这有助于保护您的实例免受未经授权的访问。

$ aws lightsail close-instance-public-ports --instance-name cli-tutorial \ --port-info fromPort=22,protocol=TCP,toPort=22 { "operation": { "id": "6cdxmpl-9f39-4357-a66d-230096140b4f", "resourceName": "cli-tutorial", "resourceType": "Instance", "createdAt": 1673596800.000, "location": { "availabilityZone": "us-east-2a", "regionName": "us-east-2" }, "isTerminal": true, "operationDetails": "22/tcp", "operationType": "CloseInstancePublicPorts", "status": "Succeeded", "statusChangedAt": 1673596800.000 } }
注意

关闭端口 22 会阻止所有 SSH 连接,包括从 Lightsail 控制台启动的连接。有关更多信息,请参阅以下主题。

响应会确认端口 22 已成功关闭。当您需要通过 SSH 进行重新连接时,您可以使用 open-instance-public-ports 命令来重新打开端口。

向您的实例添加存储

随着应用程序的增加,您可能需要额外的存储空间。Lightsail 让您可以创建其他磁盘并将其连接到您的实例。本节将说明如何添加额外的存储空间。

例 - 创建磁盘

以下命令将创建一个新的 32GB 磁盘。

$ aws lightsail create-disk --disk-name cli-tutorial-disk \ --availability-zone ${AWS_REGION}a --size-in-gb 32 { "operations": [ { "id": "070xmpl-3364-4aa2-bff2-3c589de832fc", "resourceName": "cli-tutorial-disk", "resourceType": "Disk", "createdAt": 1673596800.000, "location": { "availabilityZone": "us-east-2a", "regionName": "us-east-2" }, "isTerminal": false, "operationType": "CreateDisk", "status": "Started", "statusChangedAt": 1673596800.000 } ] }

响应表明磁盘创建操作已开始。磁盘可能需要一些时间才能变为可用。

例 – 将磁盘连接到您的实例

创建磁盘后,您可以使用以下命令将其连接到您的实例。

$ aws lightsail attach-disk --disk-name cli-tutorial-disk \ --disk-path /dev/xvdf --instance-name cli-tutorial { "operations": [ { "id": "d17xmpl-2bdb-4292-ac63-ba5537522cea", "resourceName": "cli-tutorial-disk", "resourceType": "Disk", "createdAt": 1673596800.000, "location": { "availabilityZone": "us-east-2a", "regionName": "us-east-2" }, "isTerminal": false, "operationDetails": "cli-tutorial", "operationType": "AttachDisk", "status": "Started", "statusChangedAt": 1673596800.000 }, { "id": "01exmpl-c04e-42d4-aa6b-45ce50562a54", "resourceName": "cli-tutorial", "resourceType": "Instance", "createdAt": 1673596800.000, "location": { "availabilityZone": "us-east-2a", "regionName": "us-east-2" }, "isTerminal": false, "operationDetails": "cli-tutorial-disk", "operationType": "AttachDisk", "status": "Started", "statusChangedAt": 1673596800.000 } ] }

磁盘路径参数将指定磁盘在 Linux 文件系统中的连接位置。连接磁盘后,您需要在实例内对其进行格式化并挂载。

例 - 验证磁盘连接

您可以通过检索磁盘的详细信息来确认磁盘是否已正确连接。

$ aws lightsail get-disk --disk-name cli-tutorial-disk { "disk": { "name": "cli-tutorial-disk", "arn": "arn:aws:lightsail:us-east-2:123456789012:Disk/1a9xmpl-8a34-46a4-b87e-19184f0cca9c", "supportCode": "123456789012/vol-0dacxmplc1c3108e2", "createdAt": 1673596800.000, "location": { "availabilityZone": "us-east-2a", "regionName": "us-east-2" }, "resourceType": "Disk", "tags": [], "sizeInGb": 32, "isSystemDisk": false, "iops": 100, "path": "/dev/xvdf", "state": "in-use", "attachedTo": "cli-tutorial", "isAttached": true, "attachmentState": "attached" } }

输出将确认磁盘已连接到您的实例。“状态”字段显示“in-use”,“isAttacted”设置为 true,表示连接已成功。

创建和使用快照

快照提供了一种备份实例并利用备份创建新实例的方法。这对于灾难恢复、测试或创建重复环境非常有用。

例 - 创建实例快照

以下命令将创建您实例的快照。

$ aws lightsail create-instance-snapshot --instance-name cli-tutorial \ --instance-snapshot-name cli-tutorial-snapshot { "operations": [ { "id": "41bxmpl-7824-4591-bfcc-1b1c341613a4", "resourceName": "cli-tutorial-snapshot", "resourceType": "InstanceSnapshot", "createdAt": 1673596800.000, "location": { "availabilityZone": "all", "regionName": "us-east-2" }, "isTerminal": false, "operationDetails": "cli-tutorial", "operationType": "CreateInstanceSnapshot", "status": "Started", "statusChangedAt": 1673596800.000 }, { "id": "725xmpl-158e-46f6-bd49-27b0e6805aa2", "resourceName": "cli-tutorial", "resourceType": "Instance", "createdAt": 1673596800.000, "location": { "availabilityZone": "us-east-2a", "regionName": "us-east-2" }, "isTerminal": false, "operationDetails": "cli-tutorial-snapshot", "operationType": "CreateInstanceSnapshot", "status": "Started", "statusChangedAt": 1673596800.000 } ] }

响应表明快照创建过程已开始。实例获取快照有一个异步操作,创建快照也有一个异步操作。快照包括连接到该实例的所有磁盘。

例 - 从快照创建新实例

快照完成后,您可以使用它来创建新的实例。

$ aws lightsail create-instances-from-snapshot --availability-zone ${AWS_REGION}b \ --instance-snapshot-name cli-tutorial-snapshot --instance-name cli-tutorial-bup --bundle-id small_3_0 { "operations": [ { "id": "a35xmpl-efa1-4d6c-958e-9d58fd258f5f", "resourceName": "cli-tutorial-bup", "resourceType": "Instance", "createdAt": 1673596800.000, "location": { "availabilityZone": "us-east-2b", "regionName": "us-east-2" }, "isTerminal": false, "operationType": "CreateInstancesFromSnapshot", "status": "Started", "statusChangedAt": 1673596800.000 } ] }

该命令使用 small_3_0 捆绑包大小,在 us-east-2b 可用区创建名为 cli-tutorial-bup 的新实例。请注意,您可以为新实例选择不同的捆绑包大小,这对于纵向或横向扩展非常有用。

清理资源

当您完成 Lightsail 资源的使用后,应将其删除以避免产生额外费用。本节将指导您清理在本教程中创建的所有资源。

例 - 删除实例快照

要删除不再需要的快照,请使用以下命令。

$ aws lightsail delete-instance-snapshot --instance-snapshot-name cli-tutorial-snapshot { "operations": [ { "id": "cf8xmpl-0ec7-43ec-9cbc-6dedd9d8eda8", "resourceName": "cli-tutorial-snapshot", "resourceType": "InstanceSnapshot", "createdAt": 1673596800.000, "location": { "availabilityZone": "all", "regionName": "us-east-2" }, "isTerminal": true, "operationDetails": "", "operationType": "DeleteInstanceSnapshot", "status": "Succeeded", "statusChangedAt": 1673596800.000 } ] }

响应会确认快照删除操作已成功。

例 - 删除实例

要删除实例,请使用以下命令。

$ aws lightsail delete-instance --instance-name cli-tutorial { "operations": [ { "id": "f4bxmpl-2df1-4740-90d7-e30adaf7e3a1", "resourceName": "cli-tutorial", "resourceType": "Instance", "createdAt": 1673596800.000, "location": { "availabilityZone": "us-east-2a", "regionName": "us-east-2" }, "isTerminal": true, "operationDetails": "", "operationType": "DeleteInstance", "status": "Succeeded", "statusChangedAt": 1673596800.000 } ] }

记得删除您创建的所有实例,包括通过快照创建的所有实例。

例 - 删除磁盘

要删除不再需要的磁盘,请使用以下命令。

$ aws lightsail delete-disk --disk-name cli-tutorial-disk { "operations": [ { "id": "aacxmpl-8626-4edd-8b3b-bf108d6b279c", "resourceName": "cli-tutorial-disk", "resourceType": "Disk", "createdAt": 1673596800.000, "location": { "availabilityZone": "us-east-2a", "regionName": "us-east-2" }, "isTerminal": true, "operationDetails": "", "operationType": "DeleteDisk", "status": "Succeeded", "statusChangedAt": 1673596800.000 } ] }

如果磁盘已连接到实例,则您需要先使用 detach-disk 命令将其分离。

例 - 删除密钥对

最后,删除您在本教程开始时创建的密钥对。

$ aws lightsail delete-key-pair --key-pair-name cli-tutorial-keys { "operation": { "id": "dbfxmpl-c954-4a45-93a4-ab3e627d2c23", "resourceName": "cli-tutorial-keys", "resourceType": "KeyPair", "createdAt": 1673596800.000, "location": { "availabilityZone": "all", "regionName": "us-east-2" }, "isTerminal": true, "operationDetails": "", "operationType": "DeleteKeyPair", "status": "Succeeded", "statusChangedAt": 1673596800.000 } }

此命令仅从 AWS 中删除密钥对。现在,您也可以删除本地副本。

$ rm ~/.ssh/cli-tutorial-keys.pem

后续步骤

现在,您已经学习了使用 AWS CLI 来管理 Lightsail 资源的基础知识,接下来请继续探索其他 Lightsail 功能。

  1. - 为您的应用程序分配域名

  2. 负载均衡器 - 将流量路由到多个实例,以提高容量和弹性。

  3. 自动快照 - 自动备份您的应用程序数据

  4. 指标 - 监控您资源的运行状况,获取通知并设置警报

  5. 数据库 - 将您的应用程序连接到关系数据库

有关可用 AWS CLI 命令的更多信息,请参阅 的 命令参考。