LoginSignup
3
4

More than 5 years have passed since last update.

【トラブルシューティング】CloudFormationでElasticBeanstalkのRDSが生成されない

Last updated at Posted at 2015-07-03

CloudFormationでElasticBeanstalk環境の中にRDSを構築しようとしたのですが、RDSが生成されない事象に見舞われましたので情報を共有します。

なお、 現状シューティングできていません のでただのトラブル調査ログです。

発生時の状況

CloudFormationのテンプレートは、オプションの値 - Elastic Beanstalk を見ながら以下のように設定しました。

(AWS::ElasticBeanstalk::ConfigurationTemplateのOptionSettingsのうち、RDSに関係する部分を抜粋)

        "OptionSettings": [          {
            "Namespace": "aws:ec2:vpc",
            "OptionName": "DBSubnets",
            "Value": "subnet-******"
          },
          {
            "Namespace": "aws:rds:dbinstance",
            "OptionName": "DBAllocatedStorage",
            "Value": "20"
          },
          {
            "Namespace": "aws:rds:dbinstance",
            "OptionName": "DBDeletionPolicy",
            "Value": "Delete"
          },
          {
            "Namespace": "aws:rds:dbinstance",
            "OptionName": "DBEngine",
            "Value": "mysql"
          },
          {
            "Namespace": "aws:rds:dbinstance",
            "OptionName": "DBEngineVersion",
            "Value": "5.5"
          },
          {
            "Namespace": "aws:rds:dbinstance",
            "OptionName": "DBInstanceClass",
            "Value": "db.t1.micro"
          },
          {
            "Namespace": "aws:rds:dbinstance",
            "OptionName": "DBUser",
            "Value": "******"
          },
          {
            "Namespace": "aws:rds:dbinstance",
            "OptionName": "MultiAZDatabase",
            "Value": "true"
          }
        ]

この設定でCloudFormationでスタックを生成すると、特にエラーは発生しませんが、ElasticBeanstalk環境の中にRDSの設定がされませんでした。

CloudFormerを使ってテンプレートを出力

原因調査のため、手動でElasticBeanstalk環境の中にRDSを設定し、それをCloudFormer(AWSの設定をCloudFormationのテンプレート形式で出力するツール)を使ってテンプレートを出力し、最初に作ったテンプレートとの差分を確認することにしました。

CloudFormerの使い方は以下のページを参考にします。(細かい手順はリンク先にあるので省略します)

CloudFormer を使用して既存の AWS リソースから AWS CloudFormation のテンプレートを作成する - AWS CloudFormation

CloudFormerはそれ自体のCloudFormationテンプレートが提供されており、簡単にCloudFormerのインスタンスが作れました。また、使わない時には停止しておけば料金もかからないので、環境に一つ用意しておくといいですね。

CloudFormerへは、CloudFormation画面でCloudFormerのスタックを選択し、下ペインのOutputsタブにあるWebsiteURLからアクセスが出来るようになっています。

アクセスしたらあとは対話的な画面が続き、テンプレートに出力したい項目を選択していきます。出力できるAWSの機能は全てではないですが、基本的な機能は対応していました。ElasticBeanstalkも出力できました。

原因調査

テンプレートが出力できたので、最初に作ったテンプレートとの差分を比較します。

1つ目の差分はDBEngineVersionが5.5ではなく5.6でしたので、元のテンプレートを修正してCloudFormationのスタックをアップデートします。

          {
            "Namespace": "aws:rds:dbinstance",
            "OptionName": "DBEngineVersion",
            "Value": "5.6"
          },

すると以下のエラーが発生しロールバックされました。

Configuration validation exception: Missing value for required parameter: AWSEBDBPassword

DBのパスワードが必須なのかと思い、2つ目の差分であるDBPasswordの設定を追加し、再びCloudFormationのスタックをアップデートします。

          {
            "Namespace": "aws:rds:dbinstance",
            "OptionName": "DBPassword",
            "Value": "******"
          },

やはり同じエラーが発生しロールバックされました。

項目名が間違っているのかと思い、DBPasswordをAWSEBDBPasswordに修正して再びCloudFormationのスタックをアップデートすると、今度はそのような名前の項目は無いというエラーが発生しロールバックされました。

Configuration validation exception: Invalid option specification (Namespace: 'aws:rds:dbinstance', OptionName: 'AWSEBDBPassword'): Unknown configuration setting.

また、その他の差異として、CloudFormerから出力したテンプレートのAWS::RDS::DBInstanceの設定には、TagsにElasticBeanstalkとの紐付けの設定がありました。

        "Tags": [
          {
            "Key": "Name",
            "Value": "******-application-01"
          },
          {
            "Key": "elasticbeanstalk:environment-name",
            "Value": "******-application-01"
          },
          {
            "Key": "elasticbeanstalk:environment-id",
            "Value": "******"
          }
        ]

これを定義したテンプレートでCloudFormationのスタックを生成してみましたが、RDSは生成されますがElasticBeanstalkの環境には紐付いていませんでした。

サンプルテンプレートを使ってみる

その後別の方法を調べていくと、CloudFormationの各種サービスのテンプレートを見つけました。

サービス - AWS CloudFormation

この中に、「データベースを持つ Elastic Beanstalk サンプルアプリケーション」というテンプレートがあったので、これでスタックを生成してみます。

No Solution Stack named '64bit Amazon Linux 2014.03 v1.0.9 running Tomcat 7 Java 7' found.

エラーが出ました。どうやらSolutionStackNameが古いようなので1現在使える64bit Amazon Linux 2014.03 v1.1.0 running Tomcat 7 Java 7に変更してもう一度スタックを生成してみます。

エラーはなくなりましたが、やはりElasticBeanstalk環境にはRDBは設定されていませんでした。

現状ここまで

何か心当たりがあればコメントいただけると幸いです。


  1. 現在使えるSolutionStackNameの一覧は、CLIからaws elasticbeanstalk list-available-solution-stacksで確認します。 

3
4
1

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
3
4