Amazon EC2 인스턴스에 블록 디바이스 매핑 추가
Amazon EC2 인스턴스에 블록 디바이스 매핑 추가
기본적으로 시작하는 인스턴스에는 인스턴스를 시작한 AMI의 블록 디바이스 매핑(block device mapping)에 지정된 스토리지 디바이스가 모두 포함돼요. 인스턴스를 시작할 때 인스턴스의 블록 디바이스 매핑 변경을 지정할 수 있고, 이 업데이트는 AMI의 블록 디바이스 매핑을 덮어쓰거나 병합합니다.
출처: 문서
제한 사항
- 루트 볼륨의 경우 볼륨 크기, 볼륨 유형, Delete on Termination 플래그만 수정할 수 있어요.
- EBS 볼륨을 수정할 때는 크기를 줄일 수 없습니다. 따라서 AMI의 블록 디바이스 매핑에 지정된 스냅샷 크기보다 같거나 큰 스냅샷을 지정해야 해요.
시작 시 블록 디바이스 매핑 업데이트
인스턴스를 시작할 때 인스턴스에 EBS 볼륨과 인스턴스 스토어 볼륨을 추가할 수 있습니다. 인스턴스의 블록 디바이스 매핑을 업데이트해도 시작한 AMI의 블록 디바이스 매핑이 영구적으로 변경되지는 않아요.
콘솔
- 인스턴스 시작 절차를 따르되, 볼륨을 업데이트하는 다음 단계를 완료하기 전에는 인스턴스를 시작하지 마세요.
- (선택) 볼륨을 추가하려면 Configure storage에서 Add new volume을 선택하고 볼륨 크기와 유형을 선택합니다.
- (선택) AMI의 블록 디바이스 매핑으로 지정된 볼륨을 제거하려면 Configure storage에서 Remove를 선택합니다.
- (선택) EBS 볼륨 구성을 수정하려면 Configure storage 창에서 Advanced를 선택하고 볼륨 정보를 펼친 뒤 필요한 변경을 합니다.
- Summary 패널에서 인스턴스 구성을 검토한 뒤 Launch instance를 선택합니다.
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의 크기를 100 GiB로 늘립니다. /dev/sdj가 인스턴스에 연결되지 않도록 합니다./dev/sdh의 크기를 300 GiB로 늘립니다. 스냅샷 ID를 다시 지정할 필요가 없다는 점을 주목하세요.- 임시 볼륨인
/dev/sdc를 추가합니다. 인스턴스 유형이 여러 인스턴스 스토어 볼륨을 지원하지 않으면 효과가 없어요. 인스턴스 유형이 NVMe 인스턴스 스토어 볼륨을 지원하면 자동으로 열거되어 인스턴스 블록 디바이스 매핑에 포함되며, 덮어쓸 수 없습니다.
PowerShell
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의 크기를 100 GiB로 늘립니다. /dev/sdj가 인스턴스에 연결되지 않도록 합니다./dev/sdh의 크기를 300 GiB로 늘립니다. 스냅샷 ID를 다시 지정할 필요가 없다는 점을 주목하세요.- 임시 볼륨인
/dev/sdc를 추가합니다. 인스턴스 유형이 여러 인스턴스 스토어 볼륨을 지원하지 않으면 효과가 없어요. 인스턴스 유형이 NVMe 인스턴스 스토어 볼륨을 지원하면 자동으로 열거되어 인스턴스 블록 디바이스 매핑에 포함되며, 덮어쓸 수 없습니다.
실행 중인 인스턴스의 블록 디바이스 매핑 업데이트
이 속성을 변경하기 전에 인스턴스를 중지할 필요는 없습니다.
AWS CLI
modify-instance-attribute 명령을 사용하세요.
--block-device-mappings 옵션 추가:
--block-device-mappings file://mapping.json
mapping.json에서 업데이트를 지정합니다. 예를 들어 다음 업데이트는 루트 볼륨을 유지(persist)하도록 변경합니다.
[
{
"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 볼륨 보기
콘솔
- Amazon EC2 콘솔을 엽니다.
- 탐색 창에서 Instances를 선택합니다.
- 인스턴스를 선택하고 Storage 탭에 표시된 세부 정보를 확인합니다. 최소한 루트 볼륨(여기서 용어 **루트 디바이스(root device)**는 **루트 볼륨(root volume)**과 동일함)에 대해 다음 정보를 확인할 수 있습니다.
- 루트 디바이스 유형(예:
EBS) - 루트 디바이스 이름(예:
/dev/xvda) - 블록 디바이스(예:
/dev/xvda,/dev/sdf,/dev/sdj) - 인스턴스가 블록 디바이스 매핑을 사용해 추가 EBS 볼륨으로 시작된 경우, 이러한 볼륨은 Block devices 아래에 표시됩니다. 인스턴스 스토어 볼륨은 이 탭에 표시되지 않아요.
- 루트 디바이스 유형(예:
- EBS 볼륨에 대한 추가 정보를 표시하려면 볼륨 ID를 선택해 볼륨 페이지로 이동합니다.
AWS CLI
describe-instances 명령을 사용하세요.
aws ec2 describe-instances \
--instance-ids i-1234567890abcdef0 \
--query Reservations[*].Instances[0].BlockDeviceMappings
PowerShell
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 볼륨을 모두 나열할 수 있어요.
HDD 또는 SSD 인스턴스 스토어 볼륨
인스턴스 메타데이터를 사용해 블록 디바이스 매핑의 HDD 또는 SSD 인스턴스 스토어 볼륨을 쿼리할 수 있습니다. NVMe 인스턴스 스토어 볼륨은 포함되지 않아요.
모든 인스턴스 메타데이터 요청의 기본 URI는 http://169.254.169.254/latest/입니다.
먼저 실행 중인 인스턴스에 연결하세요. 인스턴스에서 다음 쿼리를 사용해 블록 디바이스 매핑을 가져옵니다.
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