前回に続きBeanstalkについてです。
今回は実際にBenastalkの【環境】を作るところになります。
連載一覧
今回の記事の対象範囲
Benastalkでmulti containerを動かす場合は
事前にコンテナ定義ファイルであるDockerrun.aws.jsonを用意して
Dockerコンテナの設定をしたり、
ロードバランサーの設定・関連づけるVPCの設定、オートスケールの設定など
AWS環境の設定も色々しないといけません。
今回は純粋にBenastalkの環境を作るだけをターゲットにします。
次回、Dockerrun.aws.jsonの詳細を、
今後の回ではAWS環境設定(.ebextensions)の説明をしようと思います。
環境作成の手順
前回、eb initにてアプリケーションを作りました。
このコマンドを実行するとカレントディレクトリに.elasticbeanstalkというディレクトリができます。
この中のconfig.ymlにinitした時の設定やこの後作る【環境】の設定情報がされます。
以降はebコマンドをカレントディレクトリで打つとこの設定を元に動作することになります。
eb create
このコマンドを打つと環境が作成されます。
いくつか対話式で設定を選択することになりますが
インスタンスの種類やオートスケール設定などなど細かい設定はデフォルトになります。
コマンドオプションで指定することもできますが
次回以降にお伝えする.ebextensionsという
設定ファイルに外出しすると良いでしょう。
また、このコマンドを実行する前に事前に
- aws-elasticbeanstalk-ec2-role
- aws-elasticbeanstalk-service-role
というインスタンスプロファイル・サービスロールを作成する必要があります。
AWS BeansalkのWebコンソールからサンプルの環境が作れますので
サンプルを作ると上記の2のロールが自動生成されます。
Beanstalkが各種AWSサービスを構築したり、
EC2(Dockerのホスト)が環境構築の為にS3やECS・CloudWatchなどに
アクセスする為の権限設定になります。
前回同様、eb create実行じの対話コマンドの抜粋をしますが
eb create \
--elb-type application \
--vpc.id vpc-xxxxxxx \
--vpc.ec2subnets subnet-yyyyyyy,subnet-zzzzzzz \
--vpc.elbsubnets subnet-yyyyyyy,subnet-zzzzzzz \
--vpc.elbpublic --vpc.publicip
今回はこちらのコマンドで実行します。
ロードバランサーの種類をALB(application)にしたいので
本来はebextensionsで設定すれば良いはずなのですが
ebextensionsで設定しても対話で聞かれてしまいます。
そして対話でALB(application)を設定すると
VPCの紐付けをオプションで指定しないとエラーになります。
EB CLIのバージョンが3.14.6なのですがCLIのバグなのかもしれません。
Enter Environment Name
(default is xxxxxxxxx-dev):
【環境】の名前を指定します。デフォルトは「アプリケーション名-dev」になるようです。
Enter DNS CNAME prefix
(default is xxxxxxxxx-dev):
CNAMEの名前を指定します。
これはアプリケーションにアクセスする為のALBに紐付けされるドメインとなります。
xxxxxxxxx-dev.ap-northeast-1.elasticbeanstalk.com
このような名前になります。上記のURLからわかるように
環境名は全AWS上でユニークになるので
同一アプリケーション内・同一AWSアカウント内はもちろん、
他者の環境名とも重複は許されません。
本番運用ではこのドメインに対して独自ドメインを紐づけることになります。
Creating application version archive "app-190402_165432".
Uploading xxxxxxxxx/app-190402_165432.zip to S3. This may take a while.
Upload Complete.
こちらのログが出るとデプロイ中になります。
カレントディレクトリのファイルがzipに固められてS3に配備され、
その後に自動構築されるEC2の「/var/app/current」に解凍されます。
しばらく待つと上記のCNAMEのドメインでアプリケーションにアクセスできるようになります。
一度環境を作った後はカレントディレクトリでeb deployをすることで
環境の最新化をすることができます。
eb deployではEC2インスタンスやALBなどはそのまま利用されるので
インスタンスタイプなどのオプションは不要です。
次回はDockerrun.aws.jsonについて説明します。