状況
Beanstalkでeb cliから以下のコマンドを実行して環境を終了しました。(一時的に停止するつもりで)
eb terminate --profile myprofile
※オプションのprofileはAWSアカウントを指定しています。
詳細は以下のページを参照ください。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-files.html
その後再度環境を再起動させようとしました。
eb restore --profile myprofile
ERROR: NotFoundError - No terminated environments found.
Environments are available for six weeks after termination.
eb list --profile myprofile
通常であればrestoreコマンドで再起動する。listコマンドでは環境の一覧が表示されるという動きになるはずなのですがlistでも何も表示されない状況でした。
コンソールを確認
beanstalkのコンソールを確認すると環境は表示されていましたがエラーも表示されていました。
Stack deletion failed: The following resource(s) failed to delete: [AWSEBSecurityGroup].
xx 月 xx, 2023 xx:xx:xx (UTC+9)
ERROR Deleting security group named: sg-xxxxxxxxxxxxxx failed Reason: resource sg-xxxxxxxxxxxxxx has a dependent object (Service: AmazonEC2;
Status Code: 400; Error Code: DependencyViolation; Request ID: xxxxxxxxx; Proxy: null)
そしてヘルスの部分はNo Dataとなっていました。
原因
前述のエラーを見てもおそらく環境を終了する際に正常に終了できなかったのだと予想します。
エラーメッセージで出ていたセキュリティグループはRDSから参照されている状態でした。RDSはBeanstalk管理外なため削除で失敗してしまったのだと思います。
対応概要
まずBeanstalkが正常に終了できていないので終了させる必要があります。
終了させるためにはエラーの原因になっている使われているセキュリティグループを削除する必要があります。
では以下具体的に進めてみます。
セキュリティグループを削除
RDS側の設定
まずRDS側の参照設定を外します。
1.RDSコンソールからデータベースを選択し、接続とセキュリティタブのセキュリティグループのリンクからセキュリティグループの設定画面に移動します。
2.該当のセキュリティグループを選択、他で使われていないかを確認してインバウンドタブを選択して「インバウンドのルールを編集」をクリックします。
3.EC2のセキュリティグループを参照しているルールを削除します。
Beanstalk(EC2)側の設定
1.前述のエラーで表示されていたセキュリティグループのIDをコピーします。
2.EC2コンソール左メニューから「セキュリティグループ」をクリックします。
3.該当のセキュリティグループが他で使われていないことを確認し削除します。
Beanstalkコンソールから終了をやり直す
念の為コマンドでeb listもeb restoreも試しましたが同じ結果になったのでコンソールから終了を再度試します。
1.Beanstalkコンソールから該当の環境を選択します。
2.コンソールを開いたらアクションボタンのプルダウンから「環境を終了」を選択します。
3.今度は正常に終了できました。
ただここでコマンド(eb listとeb restore)を再度実行してみましたが結果は同じで認識されなかったので引き続きコンソールから進めます。
4.アクションボタンのプルダウンから「環境を復元」を選択します。確認をOKすると復元がスタートします。これで環境は正常に復元できました。
ebコマンド復活
ここまで進めたら以下のコマンドが機能するようになりました。
eb list --profile myprofile
その他確認すべきこと
eb cliの設定ファイルは最後にデプロイした状態と同じかどうか
eb cliの設定ファイル(projectroot/.elasticbeanstalk/config.yml)が書き換わっていると当然ながら反映されません。具体的には以下のような項目がコンソールの環境と一致しているかを確認しましょう。
environment:
environment-defaults:
application_name
eb cliの注意点
Beanstalkは良くも悪くもCLIツールとコンソールがあります。また今回のようにコンソールから操作するとCLIが認識しなくなったりということもあるのでそこは注意が必要です。ただ最悪の場合は新しくアプリケーションを素早く作ってしまうこともできるのでその辺りはメリットでもありますね。ログファイルなどをS3など外部に出しておけばアプリケーション部分はサーバから丸っと素早く作り直すことができます。