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 CLI를 포함하는 AWS CloudShell을 사용할 수도 있습니다.

  2. 적절한 자격 증명으로 AWS CLI 구성. 자격 증명을 아직 설정하지 않은 경우 aws configure를 실행합니다.

  3. 명령줄 인터페이스 및 SSH 개념에 대한 기본 지식.

  4. AWS 계정의 Lightsail 리소스를 생성하고 관리할 수 있는 충분한 권한.

아직 설정하지 않은 경우 시작하기 전에 AWS CLI가 사용하도록 구성한 리전과 동일한 리전으로 AWS_REGION 환경 변수를 설정합니다. 이 환경 변수는 예제 명령에서 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 번들(가장 작은 인스턴스 크기)을 사용하여 새 WordPress Lightsail 인스턴스를 생성하고 이를 키 페어와 연결합니다. 명령은 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를 닫으면 Lightsail 콘솔에서 시작된 연결을 포함하여 모든 SSH 연결이 차단됩니다. 자세한 내용은 다음 항목을 참조하세요.

응답은 포트 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 } ] }

disk-path 파라미터는 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" } }

출력은 디스크가 인스턴스에 연결되어 있음을 확인합니다. 'state' 필드에 'in-use'가 표시되고 'isAttached'가 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 번들 크기를 사용하여 가용 영역 cli-tutorial-bupus-east-2b라는 이름의 새 인스턴스를 생성합니다. 새 인스턴스에 대해 다른 번들 크기를 선택할 수 있으며, 이는 스케일 업 또는 스케일 다운에 유용할 수 있습니다.

리소스 정리

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 명령에 대한 자세한 내용은 Lightsail에 대한 AWS CLI 명령 레퍼런스를 참조하세요.