Amazon EC2 인스턴스에 블록 디바이스 매핑 추가 - Amazon Elastic Compute Cloud

Amazon EC2 인스턴스에 블록 디바이스 매핑 추가

기본적으로, 사용자가 실행한 인스턴스에는 인스턴스가 실행된 AMI의 블록 디바이스 매핑에 지정된 모든 스토리지 디바이스가 포함됩니다. 인스턴스 실행 시 해당 인스턴스에 대한 블록 디바이스 매핑을 변경하면 해당 업데이트는 AMI의 블록 디바이스 매핑을 덮어 쓰거나 병합됩니다.

제한 사항
  • 루트 볼륨에서는 다음 항목만 수정할 수 있습니다. 볼륨 크기, 볼륨 유형 및 종료 시 삭제 여부 플래그.

  • EBS 볼륨을 수정할 때 크기는 줄일 수 없습니다. 그러므로 AMI의 블록 디바이스 매핑에서 지정된 스냅샷과 크기가 같거나 큰 스냅샷을 지정해야 합니다.

인스턴스를 시작할 때 블록 디바이스 매핑 업데이트

실행 시 인스턴스에 EBS 볼륨 및 인스턴스 스토어 볼륨을 추가할 수 있습니다. 인스턴스의 블록 디바이스 매핑을 업데이트해도 인스턴스가 실행된 AMI의 블록 디바이스 매핑이 영구적으로 변경되는 것은 아님에 주의하세요.

Console
시작 시 인스턴스의 볼륨을 업데이트하는 방법
  1. 절차에 따라 인스턴스를 시작하되 다음과 같은 단계를 완료하여 볼륨을 업데이트할 때까지는 인스턴스를 시작하지 마세요.

  2. (선택 사항) 볼륨을 추가하려면 스토리지 구성, 새 볼륨 추가를 선택합니다. 볼륨 크기와 볼륨 유형을 선택합니다.

  3. (선택 사항) AMI의 블록 디바이스 매핑에 따라 지정된 볼륨을 억제하려면 스토리지 구성, 제거를 선택합니다.

  4. (선택 사항) EBS 볼륨의 구성을 수정하려면 스토리지 구성 창에서 고급을 선택합니다. 볼륨에 대한 정보를 확장하고 필요한 사항을 변경합니다.

  5. Summary(요약) 패널에서 인스턴스 구성을 검토한 다음 Launch instance(인스턴스 시작)를 선택합니다. 자세한 내용은 콘솔에서 인스턴스 시작 마법사를 사용하여 EC2 인스턴스 시작 섹션을 참조하세요.

AWS CLI
시작 시 인스턴스의 볼륨을 업데이트하는 방법

run-instances 명령을 --block-device-mappings 옵션과 함께 사용합니다.

--block-device-mappings file://mapping.json

예를 들어, AMI 블록 디바이스 매핑에서 다음이 지정된다고 가정해 보겠습니다.

  • /dev/xvda - EBS 루트 볼륨

  • /dev/sdh - snap-1234567890abcdef0에서 생성된 EBS 볼륨

  • /dev/sdj - 크기가 100인 비어 있는 EBS 볼륨

  • /dev/sdb - 인스턴스 저장소 볼륨 ephemeral0

다음은 mapping.json의 인스턴스 블록 디바이스 매핑이라고 가정해 보겠습니다.

[ { "DeviceName": "/dev/xvda", "Ebs": { "VolumeSize": 100 } }, { "DeviceName": "/dev/sdj", "NoDevice": "" }, { "DeviceName": "/dev/sdh", "Ebs": { "VolumeSize": 300 } }, { "DeviceName": "/dev/sdc", "VirtualName": "ephemeral1" } ]

인스턴스 블록 디바이스 매핑에서 다음이 수행됩니다.

  • 루트 볼륨(/dev/xvda)의 크기를 재정의하여 100GiB로 늘립니다.

  • /dev/sdj가 인스턴스에 연결되지 않도록 합니다.

  • /dev/sdh의 크기를 재정의하여 300GiB로 늘립니다. 스냅샷 ID는 다시 지정할 필요가 없습니다.

  • 임시 볼륨(/dev/sdc)을 추가합니다. 다중 인스턴스 저장소 볼륨을 지원하지 않는 인스턴스 유형인 경우 임시 볼륨이 영향을 미치지 않습니다. 인스턴스 유형에서 NVMe 인스턴스 저장소 볼륨이 지원되는 경우 해당 볼륨은 자동으로 열거되고 인스턴스 블록 디바이스 매핑에 포함되며, 재정의할 수 없습니다.

PowerShell
시작 시 인스턴스의 볼륨을 업데이트하는 방법

-BlockDeviceMapping 파라미터가 있는 New-EC2Instance cmdlet과 함께 -BlockDeviceMapping 파라미터를 사용합니다.

-BlockDeviceMapping $bdm

다음은 $bdm의 인스턴스 블록 디바이스 매핑이라고 가정해 보겠습니다.

$bdm = @() $root = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping $root.DeviceName = "/dev/xvda" $ebs1 = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice $ebs1.VolumeSize = 100 $root.Ebs = $ebs1 $bdm += $root $sdj = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping $sdj.DeviceName = "/dev/sdj" $sdj.NoDevice = "" $bdm += $sdj $sdh = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping $sdh.DeviceName = "/dev/sdh" $ebs2 = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice $ebs2.VolumeSize = 300 $sdh.Ebs = $ebs2 $bdm += $sdh $sdc = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping $sdc.DeviceName = "/dev/sdc" $sdc.VirtualName = "ephemeral1" $bdm += $sdc

인스턴스 블록 디바이스 매핑에서 다음이 수행됩니다.

  • 루트 볼륨(/dev/xvda)의 크기를 재정의하여 100GiB로 늘립니다.

  • /dev/sdj가 인스턴스에 연결되지 않도록 합니다.

  • /dev/sdh의 크기를 재정의하여 300GiB로 늘립니다. 스냅샷 ID는 다시 지정할 필요가 없습니다.

  • 임시 볼륨(/dev/sdc)을 추가합니다. 다중 인스턴스 저장소 볼륨을 지원하지 않는 인스턴스 유형인 경우 임시 볼륨이 영향을 미치지 않습니다. 인스턴스 유형에서 NVMe 인스턴스 저장소 볼륨이 지원되는 경우 해당 볼륨은 자동으로 열거되고 인스턴스 블록 디바이스 매핑에 포함되며, 재정의할 수 없습니다.

실행 중인 인스턴스의 블록 디바이스 매핑 업데이트

이 속성을 변경하기 전에 인스턴스를 중지할 필요는 없습니다.

AWS CLI
실행 중인 인스턴스의 블록 디바이스 매핑을 업데이트하는 방법

modify-instance-attribute 명령을 사용합니다.

--block-device-mappings 옵션을 추가합니다.

--block-device-mappings file://mapping.json

mapping.json에서 업데이트를 지정합니다. 예를 들어, 다음 업데이트는 루트 디바이스 볼륨이 지속되도록 변경합니다.

[ { "DeviceName": "/dev/sda1", "Ebs": { "DeleteOnTermination": false } } ]
PowerShell
실행 중인 인스턴스의 블록 디바이스 매핑을 업데이트하는 방법

Edit-EC2InstanceAttribute cmdlet을 사용합니다.

-BlockDeviceMapping 옵션을 추가합니다.

-BlockDeviceMapping $bdm

bdm에서 업데이트를 지정합니다. 예를 들어, 다음 업데이트는 루트 디바이스 볼륨이 지속되도록 변경합니다.

$ebd = New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice $ebd.DeleteOnTermination = false $bdm = New-Object -TypeName Amazon.EC2.Model.BlockDeviceMapping $bdm.DeviceName = "/dev/sda1" $bdm.Ebs = $ebd

인스턴스 블록 디바이스 매핑에서 EBS 볼륨 보기

인스턴스에 매핑된 EBS 볼륨을 쉽게 확인할 수 있습니다.

Console
인스턴스용 EBS 볼륨을 보려면 다음을 수행하세요.
  1. Amazon EC2 콘솔을 엽니다.

  2. 탐색 창에서 인스턴스를 선택합니다.

  3. 인스턴스를 선택한 후 스토리지 탭에 표시되는 세부 정보를 확인합니다. 루트 디바이스에서 최소한으로 사용 가능한 정보는 다음과 같습니다.

    • 루트 디바이스 유형(예: EBS)

    • 루트 디바이스 이름(예: /dev/xvda)

    • 블록 디바이스(예: /dev/xvda, /dev/sdf/dev/sdj)

    인스턴스가 블록 디바이스 매핑을 사용하여 추가 EBS 볼륨으로 시작된 경우 [블록 디바이스(Block devices)] 아래에 나타납니다. 인스턴스 스토어 볼륨은 이 탭에 나타나지 않습니다.

  4. EBS 볼륨에 대한 추가 정보를 표시하려면 볼륨 ID를 선택하여 볼륨 페이지로 이동합니다.

AWS CLI
인스턴스용 EBS 볼륨을 보려면 다음을 수행하세요.

아래와 같이 describe-instances 명령을 사용합니다.

aws ec2 describe-instances \ --instance-ids i-1234567890abcdef0 \ --query Reservations[*].Instances[0].BlockDeviceMappings
PowerShell
인스턴스용 EBS 볼륨을 보려면 다음을 수행하세요.

Get-EC2Instance cmdlet을 사용합니다.

(Get-EC2Instance -InstanceId i-0bac57d7472c89bac).Instances.BlockDeviceMappings

인스턴스 스토어 볼륨용 인스턴스 블록 디바이스 매핑 보기

인스턴스 유형은 인스턴스에 사용 가능한 인스턴스 스토어 볼륨 수와 유형을 결정합니다. 블록 디바이스 매핑에 있는 인스턴스 스토어 볼륨 수가 인스턴스에 사용 가능한 인스턴스 스토어 볼륨 수를 초과한 경우 추가 볼륨이 무시됩니다. 인스턴스의 인스턴스 저장소 볼륨을 보려면 lsblk 명령을 실행하거나(Linux 인스턴스) Windows 디스크 관리(Windows 인스턴스)를 엽니다. 각 인스턴스 유형에서 지원되는 인스턴스 스토어 볼륨의 수를 알아보려면 Amazon EC2 인스턴스 유형 사양을 참조하세요.

인스턴스에 대한 블록 디바이스 매핑을 볼 때 인스턴스 스토어 볼륨이 아닌 EBS 볼륨만 확인할 수 있습니다. 인스턴스의 인스턴스 스토어 볼륨을 보는 방법은 볼륨 유형에 따라 다릅니다.

NVMe 인스턴스 스토어 볼륨

NVMe 명령줄 패키지, nvme-cli를 사용하여 블록 디바이스 매핑의 NVMe 인스턴스 스토어 볼륨을 쿼리합니다. 인스턴스에 패키지를 다운로드하고 설치한 후 다음 명령을 실행합니다.

[ec2-user ~]$ sudo nvme list

다음은 인스턴스의 출력 예입니다. [모델(Model)] 열의 텍스트는 볼륨이 EBS 볼륨인지 아니면 인스턴스 스토어 볼륨인지를 나타냅니다. 이 예에서는 /dev/nvme1n1/dev/nvme2n1이 모두 인스턴스 스토어 볼륨입니다.

Node SN Model Namespace ---------------- -------------------- ---------------------------------------- --------- /dev/nvme0n1 vol06afc3f8715b7a597 Amazon Elastic Block Store 1 /dev/nvme1n1 AWS2C1436F5159EB6614 Amazon EC2 NVMe Instance Storage 1 /dev/nvme2n1 AWSB1F4FF0C0A6C281EA Amazon EC2 NVMe Instance Storage 1 ...

디스크 관리 또는 PowerShell을 사용하여 EBS 및 인스턴스 스토어 NVMe 볼륨을 모두 나열할 수 있습니다. 자세한 내용은 볼륨에 Amazon EC2 Windows 인스턴스의 NVMe 디스크 매핑 섹션을 참조하세요.

HDD 또는 SSD 인스턴스 스토어 볼륨

인스턴스 메타데이터를 사용하여 블록 디바이스 매핑에 있는 HDD 또는 SSD 인스턴스 스토어 볼륨을 쿼리할 수 있습니다. NVMe 인스턴스 스토어 볼륨은 포함되지 않습니다.

전체 인스턴스 메타데이터를 요청하기 위한 기본 URI는 http://169.254.169.254/latest/입니다. 자세한 내용은 인스턴스 메타데이터를 사용하여 EC2 인스턴스를 관리합니다. 섹션을 참조하세요.

우선, 실행 중인 인스턴스에 연결합니다. 인스턴스에서 이 쿼리를 사용하여 블록 디바이스 매핑을 가져옵니다.

IMDSv2
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/block-device-mapping/
IMDSv1
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/

인스턴스에 대한 블록 디바이스 이름이 응답으로 제공됩니다. 예를 들어 인스턴스 스토어 지원 m1.small 인스턴스에 대한 출력은 다음과 같습니다.

ami ephemeral0 root swap

인스턴스에서 보이는 것과 같이 ami 디바이스가 루트 디바이스입니다. 인스턴스 스토어 볼륨의 이름은 ephemeral[0-23]]입니다. swap 디바이스는 페이지 파일용입니다. 또한, EBS 볼륨을 매핑한 경우 ebs1, ebs2 등으로 표시됩니다.

블록 디바이스 매핑 내 개별 블록 디바이스에 대한 세부 정보를 확인하려면 여기에서와 같이 이전 쿼리에 이름을 추가합니다.

IMDSv2
[ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \ && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0
IMDSv1
[ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0

우선, 실행 중인 인스턴스에 연결합니다. 인스턴스에서 이 쿼리를 사용하여 블록 디바이스 매핑을 가져옵니다.

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/block-device-mapping/

인스턴스에 대한 블록 디바이스 이름이 응답으로 제공됩니다. 예를 들어 인스턴스 스토어 지원 m1.small 인스턴스에 대한 출력은 다음과 같습니다.

ami ephemeral0 root swap

인스턴스에서 보이는 것과 같이 ami 디바이스가 루트 디바이스입니다. 인스턴스 스토어 볼륨의 이름은 ephemeral[0-23]]입니다. swap 디바이스는 페이지 파일용입니다. 또한, EBS 볼륨을 매핑한 경우 ebs1, ebs2 등으로 표시됩니다.

블록 디바이스 매핑 내 개별 블록 디바이스에 대한 세부 정보를 확인하려면 여기에서와 같이 이전 쿼리에 이름을 추가합니다.

PS C:\> Invoke-RestMethod -uri http://169.254.169.254/latest/meta-data/block-device-mapping/ephemeral0