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 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. ナビゲーションペインで [セキュリティグループ] を選択します。次に、AWS AWSEBSecurityGroup ID を選択します。
  4. [アクション] を選択し、[セキュリティグループの削除] を選択して、AWSEBSecurityGroup への依存関係を検索します。
  5. [セキュリティグループの削除] ポップアップウィンドウで、次の手順を実行します。
    [関連するインスタンスを表示] を選択します。
    [アクション] を選択し[ネットワーク] を選択します
    [セキュリティグループの変更] を選択します
    **[AWSebSecurityGroup ID] ** チェックボックスと ** [セキュリティグループを割り当てる] ** チェックボックスをオフにします。
  6. [セキュリティグループの削除] ポップアップウィンドウで、[参照しているセキュリティグループを表示] を選択します。
  7. AWSebSecurityGroup ** ID の関連付けを削除するには、[アクション]** を選択し、[インバウンドルールを編集] または [アウトバウンドルールを編集] を選択します。
  8. Elastic Beanstalk 環境を[終了] または [再構築] します。

AWS CLI

  1. Elastic Beanstalk イベントストリーム のエラーメッセージから AWSEBSecurityGroup のセキュリティグループ ID を取得します。

  2. .ebextensions フォルダに、次の例を参考に .config ファイルを作成します。

    #!/bin/bash
    SecurityGroupID=$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. bash スクリプトを sg_dependency.sh という名前で保存します。

  4. jq ウェブ サイトから jq utility をインストールします。

  5. ネットワークインターフェイス ID、セキュリティグループ ID、またはその両方を取得するには、次のコマンドを実行します。

    ./sg_dependency.sh sg-111aaa22 us-east-1

    **注:**sg-111aaa22 を自分の AWSEBSecurityGroup ID に置き換えてください。us-east-1 を AWS リージョンに置き換えてください。

  6. ネットワークインターフェイス ID にアタッチされているセキュリティグループを見つけるには、describe-network-interface-attribute コマンドを実行します。

    aws ec2 describe-network-interface-attribute --network-interface-id eni-1099d901 --attribute groupSet
  7. 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 を含めて、ネットワークインターフェイスにアタッチされたままにします。ネットワークインターフェイスを作成した AWS サービスに AWSEBSecurityGroup ID を含めると、コマンド出力は次のエラーを返します。 "An error occurred (AuthFailure) when calling the ModifyNetworkInterfaceAttribute operation: You don't have permission to access the specified resource".

  8. describe-security-groups コマンドを実行して、依存するセキュリティグループのすべての受信ルールと送信ルールを一覧表示します。

  9. ステップ 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 です。

  10. Elastic Beanstalk 環境を終了するには、terminate-environment コマンドを実行します。

aws elasticbeanstalk terminate-environment --environment-name my-env --region us-east-1
  1. Elastic Beanstalk 環境を再構築するには、rebuild-environment コマンドを実行します。
aws elasticbeanstalk rebuild-environment --environment-name my-env --region us-east-1

関連情報

トラブルシューティング

AWS公式
AWS公式更新しました 7ヶ月前
コメントはありません

関連するコンテンツ