6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWSで使っていないサブネットを削除・整理していたらElastic Beanstalkの環境作成ができなくなった話

Posted at

この記事について

タイトルの通り、「このサブネットの中で1つもインスタンス起動してないから影響ないやろ」とサブネットを削除した結果、Elastic Beanstalkのeb createコマンドが通らなくなりました。
原因と復旧させるまでの手順をまとめます。

やらかす前の状況

ローカルで作ったアプリを、eb initeb createコマンドでElastic Beanstalk環境にデプロイするのが目標でした。ちなみにサブネット削除前にテスト的にeb createを叩いたときには正しく環境作成されてました。

削除前のVPCの状態は以下の通りでした。

  • デフォルトVPCを使用
  • ap-northeastの3つのAZに一つずつサブネットが存在
  • ap-northeast-1aには1つEC2インスタンスがあり・他にはなし
  • ap-northeast-1aはパブリックサブネット

やらかしとその結果

EC2インスタンスがなかったap-northeast-1c, ap-northeast-1dのサブネットを削除しました。
その結果、デプロイのロードバランス作成時に

yyyy-mm-dd hh:mm:ss    ERROR   Creating load balancer failed Reason: At least two subnets in two different Availability Zones must be specified (Service: AmazonElasticLoadBalancingV2; Status Code: 400; Error Code: ValidationError; Request ID: XXXX)

「AZが2つ以上にまたがってサブネットが2つないとロードバランサが作れません」と怒られる。

ここでデプロイに支障が出ると、インスタンスが立てられないまま環境作成が終了するので、Elastic Beanstalkの環境ステータスとしてはNO DATAとなります。

検証

1. ap-northeast-1cと1dに新たにパブリックサブネットをコンソールで作り直す

結果:エラーが解消されず、同じ内容でまた出ます。

ちゃんとエラー文通りに、複数AZにサブネットを用意したのに不思議ですね。

2. 1で作り直したサブネットの状態で、そもそもロードバランサ単独で作れるのかテスト

Elastic Beanstalkからではなく、EC2のコンソールからロードバランサ単独で作れるかどうかをテストしました。

結果:作れる。

ロードバランサ自体は作れるのに、Elastic Beanstalk経由だと作れないという謎な状況ということがわかりました。

原因

Elastic Beanstalkでは、環境を作るVPCを指定しない場合、デフォルトVPCとデフォルトサブネットが自動的に使われます。
ソース:公式ドキュメント 新しい環境の作成ウィザード

今回の場合、「使ってないからいいか」といって消したのがデフォルトサブネットでした。

また、デフォルトサブネットは現状 AWS CLI、AWS SDK、または Amazon EC2 APIからでしか作成できないので、Webコンソールの方で新しく作り直したサブネットはデフォルト設定されずElastic Beanstalkでは使われないものになってしまいました。
ソース:公式ドキュメント デフォルト VPC とデフォルトサブネット

復旧

ap-northeast-1cとap-northeast-1dにデフォルトサブネットを作り直します。

AWS CLIの用意

今回はCLIを利用することにしました。以下のリンクからCLIをインストールします。
公式ドキュメント AWS コマンドラインインターフェイス

その後、CLIの設定を行います。

$ aws configure

AWS Access Key ID [********************]: 
AWS Secret Access Key [*******************]: 
Default region name [None]: ap-northeast-1
Default output format [None]: json

CLIからデフォルトサブネットを作成

以下のコマンドを実行します。

$ aws ec2 create-default-subnet --availability-zone ap-northeast-1c

{
    "Subnet": {
        "AvailabilityZone": "ap-northeast-1c",
        "AvailableIpAddressCount": 4091,
        "CidrBlock": "[your-IPv4-CIDR]",
        "DefaultForAz": true,
        "MapPublicIpOnLaunch": true,
        "State": "available",
        "SubnetId": "[your-subnet-id]",
        "VpcId": "[your-vpc-id]",
        "OwnerId": "[your-account-id]",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "Tags": []
    }
}

ap-northeast-1cにデフォルトサブネットが作成されました。同様に1dの方も作成します。

この状態でeb createコマンドを叩くことで、正常に環境作成ができるようになりました。

結論

現状、デフォルトであろうがなかろうが、サブネット削除はカジュアルにできてしまいます。
サブネット削除の際は、AZのデフォルトサブネット指定されていないかどうかよく確認しよう!

参考文献

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?