

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# EBS 다이렉트 API를 사용하여 Amazon EBS 스냅샷 읽기
<a name="readsnapshots"></a>

다음 단계에서는 EBS 다이렉트 API를 사용하여 스냅샷을 읽는 방법을 설명합니다.

1. ListSnapshotBlocks 작업을 사용하여 스냅샷에 있는 블록의 모든 블록 인덱스와 블록 토큰을 표시합니다. 또는 ListChangedBlocks 작업을 사용하여 볼륨/스냅샷 계보가 같은 2개의 지정된 스냅샷에서 차이가 있는 블록의 블록 인덱스와 블록 토큰만 표시합니다. 이러한 작업을 통해 데이터를 가져올 블록의 블록 토큰 및 블록 인덱스를 확인할 수 있습니다.

1. GetSnapshotBlock 작업을 사용하고 데이터를 가져올 블록의 블록 인덱스 및 블록 토큰을 지정합니다.

**참고**  
아카이브된 스냅샷에는 EBS 다이렉트 API를 사용할 수 없습니다.

다음 예에서는 EBS 다이렉트 API를 사용하여 스냅샷을 읽는 방법을 보여 줍니다.

**Topics**
+ [스냅샷 블록 나열](#list-blocks)
+ [두 스냅샷에서 차이가 있는 블록 나열](#list-different-blocks)
+ [스냅샷에서 블록 데이터 가져오기](#get-block-data)

## 스냅샷 블록 나열
<a name="list-blocks"></a>

------
#### [ AWS CLI ]

다음 [list-snapshot-blocks](https://docs.aws.amazon.com/cli/latest/reference/ebs/list-snapshot-blocks.html) 예제 명령은 스냅샷 `snap-0987654321`에 있는 블록의 블록 인덱스 및 블록 토큰을 반환합니다. `--starting-block-index` 파라미터는 결과를 `1000`보다 큰 블록 인덱스로 제한하고, `--max-results` 파라미터는 결과를 첫 번째 `100` 블록으로 제한합니다.

```
aws ebs list-snapshot-blocks --snapshot-id {{snap-0987654321}} --starting-block-index {{1000}} --max-results {{100}}
```

이전 명령에 대한 다음 예제 응답은 스냅샷의 블록 인덱스 및 블록 토큰을 나열합니다. `get-snapshot-block` 명령을 사용하고 데이터를 가져올 블록의 블록 인덱스 및 블록 토큰을 지정합니다. 블록 토큰은 기재된 만료 시간까지 유효합니다.

```
{
      "Blocks": [
          {
              "BlockIndex": 1001,
              "BlockToken": "AAABAV3/PNhXOynVdMYHUpPsetaSvjLB1dtIGfbJv5OJ0sX855EzGTWos4a4"
          },
          {
              "BlockIndex": 1002,
              "BlockToken": "AAABATGQIgwr0WwIuqIMjCA/Sy7e/YoQFZsHejzGNvjKauzNgzeI13YHBfQB"
          },
          {
              "BlockIndex": 1007,
              "BlockToken": "AAABAZ9CTuQtUvp/dXqRWw4d07eOgTZ3jvn6hiW30W9duM8MiMw6yQayzF2c"
          },
          {
              "BlockIndex": 1012,
              "BlockToken": "AAABAQdzxhw0rVV6PNmsfo/YRIxo9JPR85XxPf1BLjg0Hec6pygYr6laE1p0"
          },
          {
              "BlockIndex": 1030,
              "BlockToken": "AAABAaYvPax6mv+iGWLdTUjQtFWouQ7Dqz6nSD9L+CbXnvpkswA6iDID523d"
          },
          {
              "BlockIndex": 1031,
              "BlockToken": "AAABATgWZC0XcFwUKvTJbUXMiSPg59KVxJGL+BWBClkw6spzCxJVqDVaTskJ"
          },
          ...
      ],
      "ExpiryTime": 1576287332.806,
      "VolumeSize": 32212254720,
      "BlockSize": 524288
  }
```

------
#### [ AWS API ]

다음 [ListSnapshotBlocks](https://docs.aws.amazon.com/ebs/latest/APIReference/API_ListSnapshotBlocks.html) 예제 요청은 스냅샷 `snap-0acEXAMPLEcf41648`에 있는 블록의 블록 인덱스 및 블록 토큰을 반환합니다. `startingBlockIndex` 파라미터는 결과를 `1000`보다 큰 블록 인덱스로 제한하고, `maxResults` 파라미터는 결과를 첫 번째 `100` 블록으로 제한합니다.

```
GET /snapshots/{{snap-0acEXAMPLEcf41648}}/blocks?maxResults={{100}}&startingBlockIndex={{1000}} HTTP/1.1
  Host: {{ebs.us-east-2.amazonaws.com}}
  Accept-Encoding: identity
  User-Agent: {{<User agent parameter>}}
  X-Amz-Date: 20200617T231953Z
  Authorization: {{<Authentication parameter>}}
```

이전 요청에 대한 다음 예제 응답은 스냅샷의 블록 인덱스 및 블록 토큰을 나열합니다. GetSnapshotBlock 작업을 사용하고 데이터를 가져올 블록의 블록 인덱스 및 블록 토큰을 지정합니다. 블록 토큰은 기재된 만료 시간까지 유효합니다.

```
HTTP/1.1 200 OK
  x-amzn-RequestId: d6e5017c-70a8-4539-8830-57f5557f3f27
  Content-Type: application/json
  Content-Length: 2472
  Date: Wed, 17 Jun 2020 23:19:56 GMT
  Connection: keep-alive
  
  {
      "BlockSize": 524288,
      "Blocks": [
          {
              "BlockIndex": 0,
              "BlockToken": "AAUBAcuWqOCnDNuKle11s7IIX6jp6FYcC/q8oT93913HhvLvA+3JRrSybp/0"
          },
          {
              "BlockIndex": 1536,
              "BlockToken": "AAUBAWudwfmofcrQhGVlLwuRKm2b8ZXPiyrgoykTRC6IU1NbxKWDY1pPjvnV"
          },
          {
              "BlockIndex": 3072,
              "BlockToken": "AAUBAV7p6pC5fKAC7TokoNCtAnZhqq27u6YEXZ3MwRevBkDjmMx6iuA6tsBt"
          },
          {
              "BlockIndex": 3073,
              "BlockToken": "AAUBAbqt9zpqBUEvtO2HINAfFaWToOwlPjbIsQOlx6JUN/0+iMQl0NtNbnX4"
          },
          ...
      ],
      "ExpiryTime": 1.59298379649E9,
      "VolumeSize": 3
  }
```

------

## 두 스냅샷에서 차이가 있는 블록 나열
<a name="list-different-blocks"></a>

두 스냅샷 간에 변경된 블록을 나열하기 위해 **페이지 매김 요청**을 할 때 다음 사항에 유의하세요.
+ 응답에는 하나 이상의 빈 `ChangedBlocks` 배열이 포함될 수 있습니다. 예:
  + 스냅샷 1: 블록 인덱스가 `0`\~`999`이고 1,000개의 블록이 포함된 전체 스냅샷.
  + 스냅샷 2: 블록 인덱스가 `999`이고 변경된 블록이 하나만 있는 증분 스냅샷.

  이러한 스냅샷에 대해 변경된 블록을 `StartingBlockIndex = 0` 및 `MaxResults = 100`으로 나열하면 `ChangedBlocks`의 빈 배열이 반환됩니다. 블록 인덱스가 `900`\~`999`인 블록을 포함하는 10번째 결과 집합에 변경된 블록이 반환될 때까지 `nextToken`을 사용하여 나머지 결과를 요청해야 합니다.
+ 응답은 스냅샷에서 기록되지 않은 블록을 건너뛸 수 있습니다. 예:
  + 스냅샷 1: 블록 인덱스가 `2000`\~`2999`이고 1,000개의 블록이 포함된 전체 스냅샷.
  + 스냅샷 2: 블록 인덱스가 `2000`이고 변경된 블록이 하나만 포함된 증분 스냅샷.

  이러한 스냅샷에 대해 변경된 블록을 `StartingBlockIndex = 0` 및 `MaxResults = 100`으로 나열하면 응답에서 블록 인덱스 `0`\~`1999`를 건너뛰고 블록 인덱스 `2000`을 포함합니다. 응답에는 빈 `ChangedBlocks` 배열이 포함되지 않습니다.

------
#### [ AWS CLI ]

다음 [list-changed-blocks](https://docs.aws.amazon.com/cli/latest/reference/ebs/list-changed-blocks.html) 예제 요청은 스냅샷 `snap-1234567890`과 `snap-0987654321`에서 차이가 있는 블록의 블록 인덱스 및 블록 토큰을 반환합니다. `--starting-block-index` 파라미터는 결과를 `0`보다 큰 블록 인덱스로 제한하고, `--max-results` 파라미터는 결과를 첫 번째 `500` 블록으로 제한합니다.

```
aws ebs list-changed-blocks --first-snapshot-id {{snap-1234567890}} --second-snapshot-id {{snap-0987654321}} --starting-block-index {{0}} --max-results {{500}}
```

이전 명령에 대한 다음 예제 응답은 블록 인덱스 0, 6000, 6001, 6002, 6003이 두 스냅샷에서 차이가 있다는 것을 보여 줍니다. 또한 응답에 기재된 두 번째 블록 토큰이 없으므로 지정된 첫 번째 스냅샷 ID에만 블록 인덱스 6001, 6002, 6003이 있고 두 번째 스냅샷 ID에는 없습니다.

`get-snapshot-block` 명령을 사용하고 데이터를 가져올 블록의 블록 인덱스 및 블록 토큰을 지정합니다. 블록 토큰은 기재된 만료 시간까지 유효합니다.

```
{
      "ChangedBlocks": [
          {
              "BlockIndex": 0,
              "FirstBlockToken": "AAABAVahm9SO60Dyi0ORySzn2ZjGjW/KN3uygGlS0QOYWesbzBbDnX2dGpmC",
              "SecondBlockToken": "AAABAf8o0o6UFi1rDbSZGIRaCEdDyBu9TlvtCQxxoKV8qrUPQP7vcM6iWGSr"
          },
          {
              "BlockIndex": 6000,
              "FirstBlockToken": "AAABAbYSiZvJ0/R9tz8suI8dSzecLjN4kkazK8inFXVintPkdaVFLfCMQsKe",
              "SecondBlockToken": "AAABAZnqTdzFmKRpsaMAsDxviVqEI/3jJzI2crq2eFDCgHmyNf777elD9oVR"
          },
          {
              "BlockIndex": 6001,
              "FirstBlockToken": "AAABASBpSJ2UAD3PLxJnCt6zun4/T4sU25Bnb8jB5Q6FRXHFqAIAqE04hJoR"
          },
          {
              "BlockIndex": 6002,
              "FirstBlockToken": "AAABASqX4/NWjvNceoyMUljcRd0DnwbSwNnes1UkoP62CrQXvn47BY5435aw"
          },
          {
              "BlockIndex": 6003,
              "FirstBlockToken": "AAABASmJ0O5JxAOce25rF4P1sdRtyIDsX12tFEDunnePYUKOf4PBROuICb2A"
          },
          ...
      ],
      "ExpiryTime": 1576308931.973,
      "VolumeSize": 32212254720,
      "BlockSize": 524288,
      "NextToken": "AAADARqElNng/sV98CYk/bJDCXeLJmLJHnNSkHvLzVaO0zsPH/QM3Bi3zF//O6Mdi/BbJarBnp8h"
  }
```

------
#### [ AWS API ]

다음 [ListChangedBlocks](https://docs.aws.amazon.com/ebs/latest/APIReference/API_ListChangedBlocks.html) 예제 요청은 스냅샷 `snap-0acEXAMPLEcf41648`과 `snap-0c9EXAMPLE1b30e2f`에서 차이가 있는 블록의 블록 인덱스 및 블록 토큰을 반환합니다. `startingBlockIndex` 파라미터는 결과를 `0`보다 큰 블록 인덱스로 제한하고, `maxResults` 파라미터는 결과를 첫 번째 `500` 블록으로 제한합니다.

```
GET /snapshots/{{snap-0c9EXAMPLE1b30e2f}}/changedblocks?firstSnapshotId={{snap-0acEXAMPLEcf41648}}&maxResults={{500}}&startingBlockIndex={{0}} HTTP/1.1
  Host: ebs.us-east-2.amazonaws.com
  Accept-Encoding: identity
  User-Agent: {{<User agent parameter>}}
  X-Amz-Date: 20200617T232546Z
  Authorization: {{<Authentication parameter>}}
```

이전 요청에 대한 다음 예제 응답은 블록 인덱스 `0`, `3072`, `6002`, `6003`이 두 스냅샷에서 차이가 있다는 것을 보여 줍니다. 또한 응답에 기재된 두 번째 블록 토큰이 없으므로 지정된 첫 번째 스냅샷 ID에만 블록 인덱스 `6002` 및 `6003`이 있고 두 번째 스냅샷 ID에는 없습니다.

`GetSnapshotBlock` 작업을 사용하고 데이터를 가져올 블록의 블록 인덱스 및 블록 토큰을 지정합니다. 블록 토큰은 기재된 만료 시간까지 유효합니다.

```
HTTP/1.1 200 OK
  x-amzn-RequestId: fb0f6743-6d81-4be8-afbe-db11a5bb8a1f
  Content-Type: application/json
  Content-Length: 1456
  Date: Wed, 17 Jun 2020 23:25:47 GMT
  Connection: keep-alive
  
  {
      "BlockSize": 524288,
      "ChangedBlocks": [
          {
              "BlockIndex": 0,
              "FirstBlockToken": "AAUBAVaWqOCnDNuKle11s7IIX6jp6FYcC/tJuVT1GgP23AuLntwiMdJ+OJkL",
              "SecondBlockToken": "AAUBASxzy0Y0b33JVRLoYm3NOresCxn5RO+HVFzXW3Y/RwfFaPX2Edx8QHCh"
          },
          {
              "BlockIndex": 3072,
              "FirstBlockToken": "AAUBAcHp6pC5fKAC7TokoNCtAnZhqq27u6fxRfZOLEmeXLmHBf2R/Yb24MaS",
              "SecondBlockToken": "AAUBARGCaufCqBRZC8tEkPYGGkSv3vqvOjJ2xKDi3ljDFiytUxBLXYgTmkid"
          },
          {
              "BlockIndex": 6002,
              "FirstBlockToken": "AAABASqX4/NWjvNceoyMUljcRd0DnwbSwNnes1UkoP62CrQXvn47BY5435aw"
          },
          {
              "BlockIndex": 6003,
              "FirstBlockToken": "AAABASmJ0O5JxAOce25rF4P1sdRtyIDsX12tFEDunnePYUKOf4PBROuICb2A"
          },
          ...
      ],
      "ExpiryTime": 1.592976647009E9,
      "VolumeSize": 3
  }
```

------

## 스냅샷에서 블록 데이터 가져오기
<a name="get-block-data"></a>

------
#### [ AWS CLI ]

다음 [get-snapshot-block](https://docs.aws.amazon.com/cli/latest/reference/ebs/get-snapshot-block.html) 예제 요청은 스냅샷 `6001`에서 블록 토큰이 `AAABASBpSJ2UAD3PLxJnCt6zun4/T4sU25Bnb8jB5Q6FRXHFqAIAqE04hJoR`인 블록 인덱스 `snap-1234567890`의 데이터를 반환합니다. Windows 컴퓨터에서 `data` 디렉터리의 `C:\Temp` 파일로 이진 데이터가 출력됩니다. Linux 또는 Unix 컴퓨터에서 명령을 실행할 때는 출력 경로를 `/tmp/data`로 바꾸어 `data` 디렉터리의 `/tmp` 파일로 데이터를 출력하십시오.

```
aws ebs get-snapshot-block --snapshot-id {{snap-1234567890}} --block-index {{6001}} --block-token {{AAABASBpSJ2UAD3PLxJnCt6zun4/T4sU25Bnb8jB5Q6FRXHFqAIAqE04hJoR}} {{C:/Temp/data}}
```

이전 명령에 대한 다음 예제 응답은 반환된 데이터의 크기, 데이터를 검증하기 위한 체크섬 및 체크섬 알고리즘을 보여줍니다. 요청 명령에서 지정한 디렉터리와 파일에 이진 데이터가 자동으로 저장됩니다.

```
{
      "DataLength": "524288",
      "Checksum": "cf0Y6/Fn0oFa4VyjQPOa/iD0zhTflPTKzxGv2OKowXc=",
      "ChecksumAlgorithm": "SHA256"
  }
```

------
#### [ AWS API ]

다음 [GetSnapshotBlock](https://docs.aws.amazon.com/ebs/latest/APIReference/API_GetSnapshotBlock.html) 예제 요청은 스냅샷 `3072`에서 블록 토큰이 `AAUBARGCaufCqBRZC8tEkPYGGkSv3vqvOjJ2xKDi3ljDFiytUxBLXYgTmkid`인 블록 인덱스 `snap-0c9EXAMPLE1b30e2f`의 데이터를 반환합니다.

```
GET /snapshots/{{snap-0c9EXAMPLE1b30e2f}}/blocks/{{3072}}?blockToken={{AAUBARGCaufCqBRZC8tEkPYGGkSv3vqvOjJ2xKDi3ljDFiytUxBLXYgTmkid}} HTTP/1.1
  Host: ebs.us-east-2.amazonaws.com
  Accept-Encoding: identity
  User-Agent: {{<User agent parameter>}}
  X-Amz-Date: 20200617T232838Z
  Authorization: {{<Authentication parameter>}}
```

이전 요청에 대한 다음 예제 응답은 반환된 데이터의 크기, 데이터를 검증하기 위한 체크섬 및 체크섬 생성에 사용되는 알고리즘을 보여줍니다. 이진 데이터는 응답 본문에 포함돼 전송되며 다음 예에서는 {{BlockData}}로 표시되어 있습니다.

```
HTTP/1.1 200 OK
  x-amzn-RequestId: 2d0db2fb-bd88-474d-a137-81c4e57d7b9f
  x-amz-Data-Length: 524288
  x-amz-Checksum: Vc0yY2j3qg8bUL9I6GQuI2orTudrQRBDMIhcy7bdEsw=
  x-amz-Checksum-Algorithm: SHA256
  Content-Type: application/octet-stream
  Content-Length: 524288
  Date: Wed, 17 Jun 2020 23:28:38 GMT
  Connection: keep-alive
  
  {{BlockData}}
```

------