웹사이트 검색

Lambda 함수를 사용하여 AWS에서 사용하지 않는 EBS(Elastic Block Storage) 볼륨 삭제


이 페이지에서

  1. 전제 조건
  2. AWS에 로그인
  3. 미사용 EBS 볼륨을 삭제하는 Lambda 함수를 생성합니다.\n

Amazon Elastic Block Store(EBS)는 사용하기 쉬운 고성능 블록 스토리지 서비스입니다. EC2 인스턴스에 연결하여 데이터를 저장하는 데 사용할 수 있는 외부 디스크와 같습니다. EBS 볼륨이 사용 중이 아니고 필요하지 않으며 계정에서 계속 사용할 수 있는 경우 AWS에서 불필요하게 요금을 청구합니다. 비용을 절약하기 위해 미사용 EBS 볼륨을 찾아 삭제하는 데 사용할 수 있는 Lambda 함수를 살펴보겠습니다.

전제 조건

  1. AWS 계정(계정이 없는 경우 생성).
  2. EC2 인스턴스에 대한 기본 이해, 여기를 클릭하여 EC2 인스턴스에 대해 자세히 알아보세요.\n
  3. Lambda에 대한 기본 이해, Lambda 함수에 대해 자세히 알아보려면 여기를 클릭하세요.\n

우리는 무엇을 할 것인가?

  1. AWS에 로그인합니다.\n
  2. 미사용 EBS 볼륨을 삭제하는 Lambda 함수를 생성합니다.\n

AWS에 로그인

  1. AWS 로그인 페이지로 이동하려면 여기를 클릭하십시오.\n

위의 링크를 누르면 로그인 세부 정보를 사용하여 로그인해야 하는 다음과 같은 웹 페이지가 표시됩니다.

AWS에 성공적으로 로그인하면 모든 서비스가 나열된 기본 콘솔이 표시됩니다.

미사용 EBS 볼륨을 삭제하는 Lambda 함수를 생성합니다.

왼쪽 상단의 "Services"를 클릭하고 "EC2"를 검색하여 EC2의 메인 대시보드로 이동합니다.

EC2의 기본 대시보드에서 아래로 스크롤하여 "Elastic Block Storage" 아래의 "Volumes"를 클릭합니다.

여기에서 선택한 지역에 있는 모든 EBS 볼륨을 볼 수 있습니다. \사용 가능\ 상태의 볼륨은 사용되지 않은 볼륨이며 어떤 EC2 인스턴스에도 연결되어 있지 않습니다. 이러한 볼륨은 중요한 데이터가 없거나 데이터가 없는 경우 삭제해도 안전합니다.

이 콘솔에서 볼륨을 삭제할 수 있지만 사용하지 않은 볼륨이 100~1000개 있는 경우 일부 자동화를 설정하는 것이 좋습니다.

사용하지 않는 볼륨을 삭제하는 프로세스를 자동화하기 위해 "Lambda Functions"를 사용할 수 있습니다. 화면 왼쪽 상단의 "Services"를 클릭하고 "Lambda"를 검색합니다.

Lambda의 기본 대시보드에서 "Create Function"을 클릭합니다.

"Author from Scratch"로 함수를 생성하고 생성할 함수의 이름을 지정하고 런타임을 선택합니다. 여기에서는 사용하지 않는 EBS 볼륨을 삭제하는 프로세스를 자동화하는 Python 런타임이 포함된 Lambda 함수를 볼 것입니다. 더 진행하려면 "함수 만들기"를 클릭하십시오.

샘플 함수 코드가 포함된 다음 화면이 표시됩니다.

다음 코드를 사용하여 사용하지 않는 EBS 볼륨을 삭제합니다. 기존 함수 코드를 삭제하고 함수 코드 상자에 다음 코드를 붙여넣습니다. 사용하지 않는 특정 EBS 볼륨을 삭제하지 않으려면 "이름: DND"로 태그를 지정하십시오. 다음 코드는 이러한 볼륨을 삭제하지 않습니다.

import boto3
ec2 = boto3.resource('ec2',region_name='eu-west-3')
def lambda_handler(event, context):
    for vol in ec2.volumes.all():
        if  vol.state=='available':
            if vol.tags is None:
                vid=vol.id
                v=ec2.Volume(vol.id)
                v.delete()
                print ('Deleted ' +vid)
                continue
            for tag in vol.tags:
                if tag['Key'] == 'Name':
                    value=tag['Value']
                    if value != 'DND' and vol.state=='available':
                        vid=vol.id
                        v=ec2.Volume(vol.id)
                        v.delete()
                        print ('Deleted ' +vid)

또는 삭제해야 하는 미사용 EBS 볼륨 목록을 지정할 수 있습니다.

import boto3
ec2 = boto3.resource('ec2',region_name='eu-west-3')
volume_ids = ['vol-029af2107c0a0807d', ‘vol-029af2107c0a08123’]
def lambda_handler(event, context):
    for volid in volume_ids:
        vid=volid
        v=ec2.Volume(vid)
        v.delete()
        print ('Deleted ' +vid)

저장 버튼을 클릭하여 기능을 저장합니다.

코드를 실행/테스트하기 전에 이벤트를 생성해야 합니다. 간단한 이벤트를 만들어 보겠습니다. 이벤트를 생성하려면 "테스트 이벤트 선택" -> 테스트 이벤트 구성을 클릭합니다.

다음 화면에서 이벤트 이름을 지정하고 이벤트 템플릿을 그대로 유지한 다음 "만들기"를 클릭합니다.

코드와 이벤트가 준비되면 함수를 테스트하거나 실행하기 전에 마지막으로 남은 것은 필요한 정책을 Lambda 함수에 할당하는 것입니다. 필요한 정책을 할당하려면 아래로 스크롤하여 "delete-unused-ebs-volumes-role-ruemgr4x 역할 보기"를 클릭하고 새 창에서 엽니다.

필요한 정책을 이 IAM 역할에 연결하려면 "Attach Policy"를 클릭하십시오.

EC2를 검색하고 "AmazonEC2FullAccess 정책을 첨부합니다. 이 정책은 EC2 인스턴스의 Lambda 함수에 대한 전체 액세스 권한을 부여합니다.

이제 함수를 실행할 준비가 되었습니다. "테스트"를 클릭합니다.

함수를 실행하면 실행 결과에서 로그를 볼 수 있습니다.

사용하지 않는 EBS 볼륨이 삭제되었는지 여부는 EC2 인스턴스의 메인 대시보드로 이동하여 확인할 수 있습니다.

여기에서 볼 수 있듯이 사용되지 않은 EBS 볼륨은 콘솔에서 더 이상 사용할 수 없습니다. 이는 Lambda 함수에 의해 성공적으로 삭제되었음을 의미합니다.

이 기사에서는 미사용 EBS 볼륨을 삭제하는 Lambda 함수를 작성하는 방법을 살펴보았습니다. 이를 통해 AWS 계정에 대한 추가 비용을 절약할 수 있습니다.