AWSebSecurityGroup が削除に失敗した場合、Elastic Beanstalk 環境を終了または再構築する方法を教えてください。
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
- 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 を取得します。
- 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 です。
- 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
関連情報
関連するコンテンツ
- 質問済み 1年前lg...
- 承認された回答質問済み 10ヶ月前lg...
- 承認された回答質問済み 10ヶ月前lg...
- AWS公式更新しました 9ヶ月前
- AWS公式更新しました 7ヶ月前
- AWS公式更新しました 8ヶ月前
- AWS公式更新しました 1年前