将 Amazon Lightsail 与 AWS CLI 结合使用
本教程将引导您完成使用 AWS Command Line Interface (AWS CLI) 的常见 Amazon Lightsail 操作。您将了解如何创建和管理 Lightsail 资源,包括密钥对、实例、存储和快照。
先决条件
在开始本教程之前,请确保您具有以下各项。
-
AWS CLI。如需安装,请遵循 AWS CLI 安装指南。您也可以使用 AWS CloudShell。其中包括 AWS CLI。
-
已使用适当的凭证配置 AWS CLI。如果尚未设置凭证,请运行
aws configure。 -
基本熟悉命令行界面和 SSH 概念。
-
在您的 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@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/1000192.0.2.1
连接后,您可以管理您的 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 功能。
-
域 - 为您的应用程序分配域名。
-
负载均衡器 - 将流量路由到多个实例,以提高容量和弹性。
-
自动快照 - 自动备份您的应用程序数据。
-
指标 - 监控您资源的运行状况,获取通知并设置警报。
-
数据库 - 将您的应用程序连接到关系数据库。
有关可用 AWS CLI 命令的更多信息,请参阅 的 命令参考。