AWSebSecurityGroup が削除に失敗した場合、Elastic Beanstalk 環境を終了または再構築する方法を教えてください。

所要時間3分
0

AWS Elastic Beanstalk 環境を終了または再構築すると、次のエラーが表示されます。 「スタックの削除に失敗しました: 次のリソースを削除できませんでした:[AWSEBSecurityGroup]。」

簡単な説明

AWSEBSecurityGroup は、基盤となる AWS CloudFormation スタックが Elastic Beanstalk を通じて作成する Amazon Elastic Compute Cloud (Amazon EC2) セキュリティグループです。Elastic Beanstalk 環境の外部で作成された エラスティックネットワークインターフェイス またはセキュリティグループが AWSebSecurityGroup を使用している場合、環境を終了または再構築するとその環境は機能しなくなります。

**注:**Elastic Beanstalk が作成するリソースを管理するには、Elastic Beanstalk コンソールElastic Beanstalk コマンドラインインターフェイス (EB CLI) 、または AWS コマンドラインインターフェイス (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
  1. 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 を取得します。

  1. Amazon EC2 コンソール を開きます。

3.    ナビゲーションペインで **[セキュリティグループ] ** を選択します。次に、AWS 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-111aaa22 を自分の AWSEBSecurityGroup 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 を含めて、ネットワークインターフェイスにアタッチされたままにします。ModifyNetworkInterfaceAttribute オペレーションを呼び出したときに、コマンド出力が「エラーが発生しました (AuthFailure)」を返す場合: 「指定されたリソースにアクセスする権限がありません」というエラーが発生した場合は、そのネットワークインターフェイスを作成した 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":\[\]}\]'

**注:****ユーザー ID ** は AWS アカウント ID です。

  1. 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公式更新しました 7ヶ月前
コメントはありません

関連するコンテンツ