将 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环境变量设置为与您配置为使用的相同区域(如果尚未设置)。此环境变量用于在示例命令中为 Lightsail 资源指定可用区。 AWS CLI

$ [ -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": "203.0.113.75", "ipv6Addresses": [ "2600:1f14:ab4:3800:ceef:89e2:f57:f25" ], "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 地址和用户名,因为您需要这些地址和用户名才能连接到您的实例。

连接到您的实例

创建实例后,您可以使用之前创建的密钥 pair 使用 SSH 连接到该实例。本节介绍如何建立 SSH 连接和管理安全设置。

例 — SSH 进入你的实例

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

$ ssh -i ~/.ssh/cli-tutorial-keys.pem bitnami@203.0.113.75 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" } }

输出确认磁盘已连接到您的实例。“状态” 字段显示 “正在使用”,“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 } ] }

此命令us-east-2b使用small_3_0捆绑包大小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 } }

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

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

后续步骤

既然你已经学习了使用管理 Lightsail 资源的基础知识,那就 AWS CLI来探索其他 Lightsail 功能吧。

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

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

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

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

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

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