Amazon Web Services 한국 블로그

Amazon EBS 업데이트 – 언제나 자유롭게 볼륨 유형 및 크기 변경 가능

AWS 고객은 서비스를 시작한 후, 사용자 트래픽 및 데이터 사이즈가 증가함에 따라 기존 볼륨을 수정하여 용량을 추가하거나 I/O 성능 특성을 변경해야 할 경우가 생깁니다. 이를 변경하기 위해, 24시간 운영하는 서비스를 중단하는 않고도 바로 변경하고 싶다는 요구 사항을 많이 받았습니다.

특히, AWS는 몇 해에 걸쳐 다양한 케이스를 지원하는 신규 EBS 볼륨 타입을 제공했습니다. 이를 통해 운영 체제에 영향을 주지 않고, 볼륨 유형을 스토리지 계층으로 사용하고 유형을 수정하여 비용을 절감하거나 성능 특성을 변경하여 EBS 볼륨도 탄력적으로 유지하기 바라고 있습니다.

신규 탄력적 볼륨(Elastic Volume) 출시
오늘 탄력적 볼륨이라고 신규 EBS 기능을 출시합니다. 현 EC2 인스턴스에 연결된 모든 EBS 볼륨에서 사용할 수 있습니다. 볼륨을 사용하는 동안, 볼륨 크기를 늘리거나 성능을 조정하거나 볼륨 유형을 변경할 수 있습니다. 변경 사항이 적용하는 동안 응용 프로그램을 계속 사용할 수 있습니다.

이 새로운 기능은 많은 작업을 단순화 해주며, 간단한 API 호출을 사용하여 인스턴스 내 스토리지 인프라를 즉시 변경할 수 있습니다. Elastic Volumes을 사용하여 다음과 같은 시나리오를 해결할 수 있습니다.

  • 신속한 볼륨 유형 변경 – 처음에 인프라를 서둘러 설정하고 블록 스토리지에 General Purpose SSD 볼륨을 사용했습니다. 몇 가지 경험을 쌓은 후에는 처리량 최적화 볼륨이 더 적합하다는 것을 알게 되었을 때, 간단히 볼륨 유형을 변경할 수 있습니다.
  • 급작스런 트래픽 대비 – 월말에 배치 처리로 인해 매월 마지막 3일 동안 트래픽이 10배 급증하면, 해당 월에 적절한 양의 트래픽을 처리하도록 설정된 프로비저닝 IOPS 볼륨에서 관계형 데이터베이스를 실행할 수 있습니다. 탄력적인 볼륨을 사용하여, 유형 변경 후 다시 되돌릴 수 있습니다.
  • 자동 스토리지 증가 – 100 GiB에 대해 볼륨을 설정 한 후, 90% 이상이 저장된 경우 볼륨 크기를 늘리고 중단 없이 파일 시스템을 확장하는 자동화 운영이 가느합니다.

탄력적 볼륨 사용하기
AWS 관리 콘솔, API 호출 또는 AWS 명령 줄(CLI)에서 모든 것을 관리 할 수 ​​있습니다.

콘솔에서 변경하려면 볼륨을 선택하고 Action 메뉴에서 Modify Volume을 선택하십시오.

그런 다음 볼륨 유형, 크기 및 프로비저닝 된 IOPS (필요한 경우)를 원하는 대로 변경하십시오. 여기에서 75 GiB 범용 (gp2) 볼륨을 20,000 IOPS의 400 GiB 프로비저닝 IOPS 볼륨으로 변경합니다.

Modify을 클릭하고, 확인 후 Yes를 클릭하십시오 :

볼륨의 상태는 작업 진행 상황을 반영합니다 (modifying, optimizing, complete):

다음 단계는 추가 저장 영역 공간을 이용할 수 있도록 파일 시스템을 확장하는 것입니다. 이를 수행하는 방법은 Linux에서 EBS 볼륨의 저장소 공간 확장 또는 Windows에서 EBS 볼륨의 저장소 공간 확장 문서를 참조하십시오. 상태가 optimizing로 전환되는 대로 파일 시스템을 확장 할 수 있습니다. (일반적으로 작업을 시작한 후 몇 초 후). 최적화가 최대 24 시간 동안 계속 될 수 있지만 새로운 구성이이 시점에서 적용됩니다. 상태가 optimizing로 바뀌자마자 새 구성에 대한 요금 청구가 시작됩니다 (수정 자체는 무료입니다)

자동 탄력적 볼륨 작업 방법
콘솔에서 수동으로 변경하는 것보다, 다음과 같은 경우에 자동화를 통한 운영 부담을 감소하는 것도 좋습니다.

  • 최적의 볼륨 크기 조정 – CloudWatch 알람을 사용하여 IOPS 한도에서 실행 중인 볼륨을 감시할 수 있습다. 추가 IOPS를 제공하거나 볼륨 유형을 변경할 수 있는 작업 방법을 만들거나 CloudWatch에 “여유 공간” 측정 항목을 추가하고, 볼륨 및 파일 시스템의 크기를 조정하는 할 수 있습니다.
  • 비용 절감 – 통계치를 활용하여 불필요한 IOPS를 줄이거나 더 저렴한 볼륨 유형으로 자주 바꿀 수 있습니다. 이를 통해 스토리지 운영에 드는 비용을 절감하면서도, 최적화된 볼륨 운영 할 수 있습니다.

이러한 프로세스를 자동화하는 방법을 보여주기 위해 CloudWatch Events, AWS Lambda, EC2 Systems Manager 및 PowerShell 스크립팅을 사용하는 샘플을 작성했습니다. 본 규칙은 EBS에서 생성한 modifyVolume이벤트를 기반으로 logEvents Lambda 함수를 호출합니다.

본 람다 함수는 볼륨을 찾아 EC2 Systems Manager가 관리하는 인스턴스에 연결되어 있는지 확인한 다음, 인스턴스에 “maintenance tag”를 추가합니다.

from __future__ import print_function
import boto3
ec2 = boto3.client('ec2')
ssm = boto3.client('ssm')
tags = ['maintenance']

def lambda_handler(event, context):
    volume = [event['resources'][0].split('/')[1]]
    attach = ec2.describe_volumes(VolumeIds=volume)['Volumes'][0]['Attachments']
    if attach:
        instance = attach[0]['InstanceId']
        filters = [{'key': 'InstanceIds', 'valueSet': [instance]}]
        info = ssm.describe_instance_information(
            InstanceInformationFilterList=filters)['InstanceInformationList']
        if info:
            ec2.create_tags(Resources=[instance], Tags=tags)
            print('{} Instance {} has been tagged for maintenance'.format(info[0]['PlatformName'], instance))

나중에 (수동 또는 일정에 따라) EC2 System Manager는 유지 관리를 위해 태그가 지정된 모든 인스턴스에서 PowerShell 스크립트를 실행하는 데 사용됩니다. 스크립트는 인스턴스의 디스크와 파티션을 보고 모든 드라이브 (파일 시스템)의 크기를 최대 허용 크기로 조정합니다.

foreach ($DriveLetter in $DriveLetters) {
	$Error.Clear()
        $SizeMax = (Get-PartitionSupportedSize -DriveLetter $DriveLetter).SizeMax
}

정식 출시
탄력적 볼륨 기능은 오늘 부터 모든 상용 리전에서 사용 가능합니다. 몇 가지 주요 사례와 인스턴스 타입 제한 사항은 Considerations When Modifying EBS Volumes 글을 참고하시기 바랍니다.

Jeff;

이 글은 Amazon EBS Update – New Elastic Volumes Change Everything의 한국어 번역입니다.