Elastic Beanstalkのeb create時のエラー対応

公開日: @t_yama5k

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つしかないといった状態に陥っている

対処法

方法 1 デフォルト VPC の再作成

デフォルト VPC を削除後、再度作成することでデフォルトサブネットが AZ 毎に存在する状態に戻る。
こちらの方法を試したところ、残り1つとなっていたデフォルトのサブネットが無事3つになり eb create も実行できた。
ただし、色々と利用されているかもしれないのでデフォルト VPC の削除はくれぐれも慎重に。

方法 2 eb create 時に使用する vpc を明示的に指定する

オプション指定(--vpc.id)により、デフォルトの VPC ではなく既存の vpc を指定することができる

参考

感想

お金がかかるのが怖いからといって、考えなしに何でもかんでも削除するのは気をつけよう。
でも、こういう罠に早めに引っかかって置くのが大事だと思ってたり。
(そもそもデフォルト VPC とかデフォルトサブネットが削除できちゃうのが怖いんですが)