AWSEBSecurityGroup이 삭제에 실패할 경우, Elastic Beanstalk 환경을 종료하거나 재구축하려면 어떻게 해야 하나요?

4분 분량
0

AWS Elastic Beanstalk 환경을 종료하거나 재구축할 때 다음과 같은 오류 메시지가 나타납니다. “Stack deletion failed: The following resource(s) failed to delete: [AWSEBSecurityGroup].”

간략한 설명

AWSEBSecurityGroup은 기본 AWS CloudFormation 스택이 Elastic Beanstalk를 통해 생성하는 Amazon Elastic Compute Cloud(Amazon EC2) 보안 그룹입니다. Elastic Beanstalk 환경 외부에서 생성된 탄력적 네트워크 인터페이스 또는 보안 그룹이 AWSEBSecurityGroup을 사용하는 경우, 환경을 종료하거나 재구축하면 해당 환경에 장애가 발생합니다.

참고: Elastic Beanstalk가 생성하는 리소스를 관리하려면 Elastic Beanstalk 콘솔, Elastic Beanstalk Command Line Interface(EB CLI) 또는 AWS Command Line Interface(AWS CLI)를 사용하는 것이 가장 좋습니다.

해결 방법

참고: AWS CLI 명령을 실행할 때 오류가 발생하면 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

이 문제를 해결하려면 다음 작업 중 하나를 완료하세요.

  • AWS CloudFormation 콘솔 또는 AWS CLI를 사용하여 Elastic Beanstalk 환경이 생성한 CloudFormation 스택을 삭제합니다. 그런 다음 Elastic Beanstalk 환경을 종료하거나 재구축합니다.
  • Elastic Beanstalk 보안 그룹에서 종속 객체를 제거합니다. 그런 다음 Elastic Beanstalk 환경을 종료하거나 재구축합니다.

참고: 다음 AWS CLI 명령에 스택 이름, 환경 이름, AWS 리전 및 기타 환경별 변수의 값을 입력합니다.

CloudFormation 콘솔에서 스택 삭제

중요: Elastic Beanstalk 환경에 통합 Amazon Relational Database Service(Amazon RDS) 데이터베이스가 있는 경우, 먼저 Amazon RDS DB 인스턴스를 분리하세요.

CloudFormation 콘솔 또는 AWS CLI를 사용하여 스택을 삭제할 수 있습니다.

CloudFormation 콘솔

1.    CloudFormation 콘솔을 엽니다.

2.    스택 페이지에서 삭제하지 못한 스택을 선택합니다.
참고: 스택의 상태 열에 DELETE_FAILED가 표시됩니다.

3.    삭제를 선택합니다.

4.    스택 삭제 팝업 창에서 AWSEBSecurityGroup을 선택한 다음 삭제를 선택합니다.
중요: 보안 그룹을 삭제해야 합니다. 스택을 삭제해도 AWSEBSecurityGroup은 자동으로 삭제되지 않습니다. 다른 종속 리소스로 인해 환경 종료가 실패할 경우, 스택 삭제 팝업 창에서 DELETE_FAILED 상태에 있는 적절한 리소스를 선택합니다. 그런 다음 삭제를 선택합니다.

5.    Elastic Beanstalk 환경을 종료하거나 재구축합니다.

AWS CLI

1.    CloudFormation 스택을 삭제하려면 describe-network-interface-attribute 명령을 실행합니다.

aws cloudformation delete-stack --stack-name awseb-e-ztrauxujck-stack --retain-resources "AWSEBSecurityGroup" --region us-east-1

2.    Elastic Beanstalk 환경을 종료하려면 terminate-environment 명령을 실행합니다.

aws elasticbeanstalk terminate-environment --environment-name my-env --region us-east-1

3.    Elastic Beanstalk 환경을 재구축하려면 rebuild-environment 명령을 실행합니다.

aws elasticbeanstalk rebuild-environment --environment-name my-env --region us-east-1

Elastic Beanstalk 보안 그룹의 종속 객체를 찾아 제거합니다.

AWSEBSecurityGroup 삭제를 방해하는 종속 네트워크 인터페이스 또는 종속 보안 그룹을 찾으려면 다음 단계를 완료하세요. Amazon EC2 콘솔 또는 AWS CLI를 사용할 수 있습니다.

Amazon EC2 콘솔

1.    Elastic Beanstalk 이벤트 스트림의 오류 메시지에서 AWSEBSecurityGroup의 보안 그룹 ID를 가져옵니다.

2.    Amazon EC2 콘솔을 엽니다.

3.    탐색 창에서 보안 그룹을 선택합니다. 그런 다음 AWSEBSecurityGroup ID를 선택합니다.

4.    작업을 선택한 다음 보안 그룹 삭제를 선택하여 AWSEBSecurityGroup의 종속성을 찾습니다.

5.    보안 그룹 삭제 팝업 창에서 연결된 인스턴스 보기를 선택합니다.
작업을 선택한 다음 네트워킹을 선택합니다.
보안 그룹 변경을 선택합니다.
AWSEBSecurityGroup ID보안 그룹 할당 확인란의 선택을 취소합니다.

6.    보안 그룹 삭제 팝업 창에서 참조하는 보안 그룹 보기를 선택합니다.
AWSEBSecurityGroup ID의 연결을 제거하려면 작업을 선택한 다음 인바운드 규칙 편집 또는 아웃바운드 규칙 편집을 선택합니다.

7.    Elastic Beanstalk 환경을 종료하거나 재구축합니다.

AWS CLI

1.    Elastic Beanstalk 이벤트 스트림의 오류 메시지에서 AWSEBSecurityGroup의 보안 그룹 ID를 가져옵니다.

2.    다음 bash 스크립트를 sg_dependency.sh 형식으로 저장합니다.

#!/bin/bashSecurityGroupID=$1
Region=$2
DependentENI=$(aws ec2 describe-network-interfaces --filters Name=group-id,Values=[$SecurityGroupID] --region $Region | jq '.NetworkInterfaces[].NetworkInterfaceId')
DependentSGingress=$(aws ec2 describe-security-groups --filters Name=ip-permission.group-id,Values=[$SecurityGroupID] --region $Region | jq '.SecurityGroups[] .GroupId')
DependentSGegress=$(aws ec2 describe-security-groups --filters Name=egress.ip-permission.group-id,Values=[$SecurityGroupID] --region $Region | jq '.SecurityGroups[] .GroupId')
echo "The dependent ENI is $DependentENI"
echo "The security group id with a dependency in ingress rule : $DependentSGingress"
echo "The security group id with a dependency in egress rule :  $DependentSGegress"

3.    jq 웹 사이트에서 jq 유틸리티를 설치합니다.

4.    네트워크 인터페이스 ID, 보안 그룹 ID 또는 둘 다를 가져오려면 다음 명령을 실행합니다.

./sg\_dependency.sh sg-111aaa22 us-east-1

참고: sg-111aaa22AWSEBSecurityGroup ID로 바꿉니다. us-east-1을 AWS 리전으로 바꿉니다.

5.    네트워크 인터페이스 ID에 연결된 보안 그룹을 찾으려면 describe-network-interface-attribute 명령을 실행합니다.

aws ec2 describe-network-interface-attribute --network-interface-id eni-1099d901 --attribute groupSet

6.    AWSEBSecurityGroup ID를 분리하려면 modify-network-interface-attribute 명령을 실행합니다.

aws ec2 modify-network-interface-attribute --network-interface-id eni-1099d901 --groups sg-030644d6c95b6470a sg-d34a33a8 sg-059c081ab30c3e38e sg-0e4eabc747368e6c9

중요: 이전 명령에서 AWSEBSecurityGroup ID를 제외합니다. 네트워크 인터페이스에 연결된 상태를 유지하려면 다른 보안 그룹 ID를 포함합니다. 명령 출력이 “An error occurred (AuthFailure) when calling the ModifyNetworkInterfaceAttribute operation: You don't have permission to access the specified resource.” 오류를 반환할 경우, 해당 네트워크 인터페이스를 생성한 AWS 서비스에서 AWSEBSecurityGroup을 제거합니다.

7.    describe-security-groups 명령을 실행하여 종속 보안 그룹의 모든 수신 및 송신 규칙을 나열합니다.

8.    7단계의 출력을 기반으로 revoke-security-group-ingress 또는 revoke-security-group-egress 명령을 실행합니다.
예를 들어, AWSEBSecurityGroup ID가 sg-111aaa22이고 8단계의 출력에 수신 규칙의 해당 보안 그룹 ID가 있는 경우, 다음 명령을 실행합니다.

aws ec2 revoke-security-group-ingress --group-id sg-0018a2fbdcd5797ea --ip-permissions '\[{"PrefixListIds":\[\],"FromPort":0,"IpRanges":\[\],"ToPort":65535,"IpProtocol":"tcp","UserIdGroupPairs":\[{"UserId":"123456789102","GroupId":"sg-111aaa22"}\],"Ipv6Ranges":\[\]}\]'

참고: UserId는 AWS 계정 ID입니다.

9.    Elastic Beanstalk 환경을 종료하려면 terminate-environment 명령을 실행합니다.

aws elasticbeanstalk terminate-environment --environment-name my-env --region us-east-1

10.    Elastic Beanstalk 환경을 재구축하려면 rebuild-environment 명령을 실행합니다.

aws elasticbeanstalk rebuild-environment --environment-name my-env --region us-east-1

관련 정보

문제 해결

AWS 공식
AWS 공식업데이트됨 6달 전