AWS Lambda에서 생성한 Elastic Network Interface가 삭제되지 않을 때 대응하는 방법
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 AWS Lambda에서 생성한 Elastic Network Interface가 삭제되지 않을 때 대응하는 방법에 대해 정리해 봤습니다.
문제 발생
리전에서 생성한 리소스를 삭제하는 도중 네트워크 인터페이스가 사용 중이기 때문에 삭제할 수 없다는 메시지를 확인했습니다.
Lambda에서 직접 생성하여 사용하고 있는 네트워크 인터페이스이기 때문에 삭제 혹은 분리가 되지 않는 상황입니다.
AWS 문서를 살펴보면, 이 네트워크 인터페이스는 Lambda 서비스를 통해서만 삭제할 수 있다고 하며, 현재 네트워크 인터페이스를 사용하는 함수 또는 함수 버전을 식별하려면 Lambda ENI Finder를 사용할 필요가 있다고 합니다.
네트워크 인터페이스는 콘솔 화면에서 확인할 수 있으며, Lambda ENI Finder를 사용하기 위해서는 대상 네트워크 엔터페이스 ID가 필요합니다. 이번 블로그에서는 Lambda ENI Finder를 활용하여 네트워크 인터페이스를 확인해 보고 삭제하는 과정까지 정리해 봤습니다.
문제 해결
Lambda ENI Finder를 사용하기 위한 명령어는 Linux, Unix 및 macOS 운영 체제에서만 사용할 수 있기 때문에 Linux 계열의 EC2 인스턴스를 생성해서 진행했습니다.
An error occurred (AccessDeniedException) when calling the ListFunctions operation: User: arn:aws:sts::x:xxxxxxxassumed-role/windows-ec2-ssm-test/i-xxxxxxxxx is not authorized to perform: lambda:ListFunctions on resource: * because no identity-based policy allows the lambda:ListFunctions action
또한, 생성한 EC2 인스턴스에 Lambda에 대한 권한도 필요하기 때문에 임시로「AWSLambda_FullAccess」권한을 할당했습니다.
sudo yum install jq -y sudo yum install git -y sudo git clone https://github.com/awslabs/aws-support-tools.git
Lambda ENI Finder를 사용하기 위한 설치 명령어입니다.
cd aws-support-tools pwd /usr/bin/aws-support-tools cd Lambda cd FindEniMappings
Lambda ENI Finder의 위치로 이동합니다.
./findEniAssociations --eni eni-xxxxxxxxxxx --region ap-northeast-2
삭제하고자 하는 네트워크 인터페이스에 대해 Lambda ENI Finder를 실행합니다.
The following function version(s) use the same subnet and security groups as eni-xxxxxxxxxxx. They will need to be disassociated/deleted before Lambda will clean up this ENI: arn:aws:lambda:ap-northeast-2:xxxxxxxxxxx:function:SecretsManagertest-lambda:$LATEST
해당 명령어를 실행하면, 다른 서브넷, 보안 그룹을 사용하도록 VPC 구성을 변경하거나 Amazon VPC에서 연결을 끊어야 한다고 설명하고 있습니다.
Lambda 콘솔 화면에서 VPC 편집으로 들어가 VPC를「없음」으로 변경합니다.
No Lambda functions or versions found that were using the same subnet as this ENI. If this ENI is not deleted automatically in the next 24 hours then it may be 'stuck'.
다시 ./findEniAssociations 명령어를 실행해 보면, 네트워크 인터페이스와 동일한 서브넷을 사용하는 Lambda 함수 또는 버전을 찾을 수 없다고 하며 24시간 내에 자동으로 삭제되거나 수동으로 삭제할 수 있다고 합니다.
이어서 콘솔 화면에서 Lambda 함수를 완전히 삭제합니다.
An error occurred (InvalidNetworkInterfaceID.NotFound) when calling the DescribeNetworkInterfaces operation: The networkInterface ID 'eni-xxxxxxxxxxx' does not exist
Lambda 함수를 삭제한 다음 ./findEniAssociations 명령어를 실행해 보면 네트워크 인터페이스를 찾을 수 없다는 메시지가 출력됩니다.
마지막으로 네트워크 인터페이스를 확인해 보면, Lambda에서 생성한 네트워크 인터페이스가 삭제된 것을 확인할 수 있습니다.
본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 [email protected]로 보내주시면 감사하겠습니다.