Elastic Beanstalkで簡単にテスト環境を立てる手順

# 状況
久々に触って少し迷ったところがあったので備忘録として書いています。
wordpressのスケーラブルな環境を簡単に立ててみます。
以下の手順はあくまでもテスト環境でドメインの設定などは含みません。
今回は管理画面ぽちぽちで行けます。

この手順でテスト環境を用意すれば、RDSのインスタンスタイプを
変更した際に、どのくらいダウンタイムが出るか？などの
beanstalkの操作や、運用時にテストして動きを確認したい場面などに使えると思います。

# 構成
基本的に色々な構成が組めますが今回は以下のような形にします。
[RDSをbeanstalk管理外にするやり方](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html)がデフォルトですが
今回はテスト用ということでRDSをBeanstalk管理下に含めています。

:::note warn
警告
RDSをBeanstalk管理下に置くとBeanstalkの環境、アプリケーションを削除するとDBも一緒に削除される動きとなりますのでご注意ください。またRDBでは削除防止機能がありこちらを設定していると削除されませんがBeanstalk管理下のセキュリティグループなどが残る場合がありました。
:::

![cojpletsreform V2 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169482/f3f81ffb-6e36-83cb-7ebc-9a03072f558e.png)

# 構築手順（飛ばしている項目はデフォルトで進めます）
１．AWSコンソール画面にログインしてElastic Beanstalkの管理画面に入ります。
２．『新しい環境の作成』をクリックします。（『新しい環境の作成』がない場合は左メニューから『環境』を選択します。）
３．ウェブサーバーにチェックを入れ『選択』をクリックします。
４．任意のアプリケーション名を入力します。（今回はTestWp)。
５．『管理されたプラットフォーム』を選択、プラットフォームからPHPを選択します。
６．[こちらから](https://ja.wordpress.org/download/)wordpressのzip版をダウンロードします。
７．『コードのアップロード』を選択し、『ファイルを選択』ボタンを押して６で落としたzipをアップロードします。
８．『より多くのオプションの設定』をクリックします。
ここからは順番を間違えると設定できないことがありました。（2021年1月現在）
９．容量の『編集』をクリックして環境タイプの『負荷分散』を選択し、他はデフォルトのまま保存します。
１０．データベースの『編集』をクリックして『mysql』を選択、エンジンバージョンは『最新のもの（数字が大きいもの）』を選択。
インスタンスクラスは『t2.micro』を選択。ユーザー名、パスワードは任意の半角英数、乱数字１６文字を入力します。
このユーザー名、パスワードはあとで使うのでメモしておきましょう。これらが入力できたら『保存ボタン』を押します。
１１．データベースの保存ができたらネットワークの『編集』をクリックします。
するとアベイラビリティーゾーンというチェックが３つ出てくるので全てチェックして『保存ボタン』を押します。
１２．『環境の作成』をクリックして構築を開始します。大体〜15分くらいで完了します。
ここでエラーが出た方は左メニューのログからエラーをダウンロードするとエラーログ ファイルを見ることができます。

# wordpressインストール作業
１．beanstalkコンソール画面左メニューからアプリケーションをクリック。
作成したアプリケーションのリンクをクリックしてアプリケーションのコンソール画面に移動します。
ヘルスでエラーが出ている場合は最後のエラーが出たらという項目を参考にしていただければと思います。
２．XXXXXXXX.ap-northeast-1.elasticbeanstalk.comのようなURLリンクがありますので
XXXXXXXX.ap-northeast-1.elasticbeanstalk.com/wordpress
のように/wordpressをつけてブラウザでアクセスします。
３．wordpressインストール画面が出ます。
ここで設定を間違えると最初からやり直しor
セキュリティグループを設定してsshログインしなければならないので慎重に進めてください。
『さあ始めましょう』をクリック。
データベース名：ebdb
※ebdbはelasticbeanstalkのデフォルトで設定されているデータベース名。
ユーザー名：構築手順10でメモしたもの
パスワード：構築手順10でメモしたもの
データベースのホスト名：beanstalkコンソール画面左メニューから設定をクリック。データベースの項目のエンドポイントを入力。
xxxxxx.ap-northeast-1.rds.amazonaws.com:3306のような値。
テーブル接頭子：任意の値を入力。デフォルトでもOK。
『送信』をクリック。
４．『インストール実行』をクリック。
５．サイトのタイトル：任意の名前を入力
ユーザー名：任意のユーザー名を入力。wordpress管理画面にログインする時に使用するものなのでメモしておきます。
パスワード：デフォルトのものをコピーしておきます。これもwordpress管理画面にログインする時に使用するものです。
メールアドレス：任意のメールアドレスを入力。wordpressから確認メールが飛んでくる。
検索エンジンでの表示：今回はテスト環境なのでチェックなし。
『WordPressをインストール』をクリック。
６．『ログイン』をクリック。
７．手順５で入力したユーザーとパスワードを入力し『ログイン』をクリックします。
８．wordpressのダッシュボードに入れたと思います。左上のサイト名→『サイトを表示』をクリックするとトップページが表示されます。
トップページアドレスはXXXXXXXX.ap-northeast-1.elasticbeanstalk.com/wordpress
管理画面アドレスはXXXXXXXX.ap-northeast-1.elasticbeanstalk.com/wordpress/wp-admin
のような形になっていると思います。

# エラーが出たら
構築手順を最後まで進めてエラーが出たとき
エラーが以下のようなものだった場合

```error.log

Stack named 'awseb-e-mkdpvzmrgt-stack' aborted operation. Current state: 'CREATE_FAILED' Reason: The following resource(s) failed to create: [FileSystem, loadbalancersg].

Creating security group named: sg-xxxxxxxx failed Reason: CIDR block xxx.xxx.xxx.xxx is malformed (Service: AmazonEC2; Status Code: 400; Error Code: InvalidParameterValue; Request ID: xxxxxxxxxxx; Proxy: null)

```

vpcの設定がうまくいっていない可能性があります。
当方の環境ではデフォルトVPCを構成手順11の画面から新たに作り直したら解消されました。
色々テストして環境を破棄していたりすると何らかのタイミングでvpcやセキュリティグループなどが残ってしまうことがあります。
個人的にやりがちな例としてはbeanstalk管理下のec2やRDSを
beanstalkのコンソールではなくec2やRDSのコンソールから削除してしまうというのがありました。

# はまりどころ
## urlは/wordpressをつける
久々に触ってはまったところ。
XXXXXXXX.ap-northeast-1.elasticbeanstalk.comにアクセスすると
403エラーが出ます。
EC2の内部的には/var/www/htmlにルートが設定されているため
XXXXXXXX.ap-northeast-1.elasticbeanstalk.com/wordpress
にアクセスしないとwordpressのインストールができません。

今回はwordpressでテスト環境を立ててみましたが
pythonやrubyでも同様にスケーラブルな環境が簡単に構築できると思います。
いきなりbeanstalkで立てると簡単ですが、まずはec2+rdsみたいな構成から始めないと
トラブルが発生した時に対処が難しくなりますね。

本運用ではCLIでデプロイ環境を整えたりroute53、cloudfrontなどと
組み合わせる作業が出てくると思いますが(Linux関連、ネットワークの知識も必須になると思います。)
月数千円でcdn付き、オリジンスケーラブルな環境が短時間で構築できます。
（RDSもレプリカを追加してスケーラブルにできたと思います）
数千円というのも私が見た環境ではALBが半分くらいをしめていたので
ALBを外して（昔はできなかった気がする）
EC2とRDSをリザーブドインスタンスで運用すればかなり費用は抑えられます。
『よくあるウェブアプリケーション構成でさくっとスケーラブルにしたい』みたいな
状況にあっているのがbeanstalkかなというのが個人的な印象です。