Elastic Beanstalkのeb create時にCreating load balancer failed Reason: At least two subnets in two different Availability Zones must be specified で怒られた時の対処法
前提
- EB CLI導入済み
現象
eb createコマンド実行後の対話実行中、ロードバランサーの選択後ににエラーが発生する。
eb create (中略) Select a load balancer type 1) classic 2) application 3) network (default is 2): 2 // アプリケーションロードバランサーを選択 Creating application version archive "app-885e-190925_224850". Uploading elastic-beanstalk/app-885e-190925_224850.zip to S3. This may take a while. Upload Complete. Environment details for: elastic-beanstalk-dev Application name: elastic-beanstalk Region: ap-northeast-1 Deployed Version: app-885e-190925_224850 Environment ID: e-xsgzypm6xc Platform: arn:aws:elasticbeanstalk:ap-northeast-1::platform/PHP 7.2 running on 64bit Amazon Linux/2.8.15 Tier: WebServer-Standard-1.0 CNAME: elastic-beanstalk-dev.ap-northeast-1.elasticbeanstalk.com Updated: 2019-09-25 13:48:54.541000+00:00 Printing Status: 2019-09-25 13:48:52 INFO createEnvironment is starting. 2019-09-25 13:48:54 INFO Using elasticbeanstalk-ap-northeast-1-369347037906 as Amazon S3 storage bucket for environment data. 2019-09-25 13:49:16 INFO Created target group named: arn:aws:elasticloadbalancing:ap-northeast-1:369347037906:targetgroup/awseb-AWSEB-1CMBZGU29V9B4/493ad61810a2f151 2019-09-25 13:49:16 INFO Created security group named: sg-0d3a5ce3ba89653ad 2019-09-25 13:49:32 ERROR Stack named 'awseb-e-xsgzypm6xc-stack' aborted operation. Current state: 'CREATE_FAILED' Reason: The following resource(s) failed to create: [AWSEBV2LoadBalancer, AWSEBSecurityGroup]. 2019-09-25 13:49:32 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: dc2450c6-8e73-438c-b8ce-15bde8766595) 2019-09-25 13:49:32 ERROR Creating security group named: awseb-e-xsgzypm6xc-stack-AWSEBSecurityGroup-1CMTPYPR86GNF failed Reason: Resource creation cancelled 2019-09-25 13:49:35 INFO Launched environment: elastic-beanstalk-dev. However, there were issues during launch. See event log for details.
原因
デフォルトのVPCやサブネットに問題がある
エラーコメントからだいたい推測できる
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: dc2450c6-8e73-438c-b8ce-15bde8766595)
- ロードバランサーを作ろうとしたけどサブネットがマルチAZになっていないぞ
- そもそもデフォルトでは デフォルトVPCにAZごとにごとにサブネットが作成されている
- 日本だと3つのデフォルトサブネットが作成されているはず
- 何らかの原因、例えばハンズオン終了後に環境をクリーンにするためにサブネットを削除しまくったら、知らぬ間にデフォルトサブネットを削除してしまっていたなどの理由でデフォルトのサブネットが1つしかないといった状態に陥っている
- そもそもデフォルトでは デフォルトVPCにAZごとにごとにサブネットが作成されている
対処法
方法1 デフォルトVPCの再作成
デフォルトVPCを削除後、再度作成することでデフォルトサブネットがAZ毎に存在する状態に戻る。
こちらの方法を試したところ、残り1つとなっていたデフォルトのサブネットが無事3つになり eb createも実行できた。
ただし、色々と利用されているかもしれないのでデフォルトVPCの削除はくれぐれも慎重に。
方法2 eb create時に使用するvpcを明示的に指定する
オプション指定(--vpc.id)により、デフォルトのVPCではなく既存のvpcを指定することができる
- eb create - AWS Elastic Beanstalk
- Elastic Beanstalk で Amazon Virtual Private Cloud (Amazon VPC) を設定する - AWS Elastic Beanstalk
参考
デフォルトの VPC を削除しました。元に戻す方法を教えてください。
すべての AWS アカウントには、AWS リージョンごとに 1 つのデフォルト VPC があります。デフォルト VPC を削除すると、そのリージョンの Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの起動に問題が生じる場合があります。
デフォルトのVPCがないことでElastic Beanstalkにも影響がでる様子。
感想
お金がかかるのが怖いからといって、考えなしに何でもかんでも削除するのは気をつけよう。
でも、こういう罠に早めに引っかかって置くのが大事だと思ってたり。
(そもそもデフォルトVPCとかデフォルトサブネットが削除できちゃうのが怖いんですが)