AWSで新しい環境を構築する必要が合ったので、経験者に聞いたら、
Elastic BeansTalkとかeb deploy(コマンド)とかでやるのがナウい(死語)。
でもって、イミュータブルなデプロイつまり、必要なときに環境を生成&不要になれば破棄するも考えてみ?とのこと。
素人なりに考えたメリット
- 設定を記述できるので、アップデートに失敗したときなどの復旧が行いやすい。
- 環境の配布のようなこともやりやすい。
構成
VPCはあらかじめ用意しているとする
- WebサーバにEC2。インスタンス数は可変とする
- デプロイ時にも本番環境のデータはRDS(DB)は管轄外とする。
- アプリケーションロードバランサーは用意する。
下準備
前提
作業環境に、CLIが入っている事。踏み台サーバ(SSHなどの受付を行うEC2インスタンス)を使う。
ここでは、AWS体験ハンズオンの事例を応用し、SSH接続したEC2インスタンスを使う。
VPC、サブネット、RDSなどは事前に用意する。
作業環境にEB CLIをインストール
$ pip install --upgrade --user awsebcli
作業用フォルダを作成する
このElastic Beanstalkでデプロイするものは、ZIPで固めたものをアップロードし、それを処理しているのだが、今回は、作業環境内にアップロードするコンテンツを含むフォルダを用意する(なお、ディレクトリにコンテンツが含まれることに留意)
便宜上、/home/ec2-user/develop
ディレクトリで行うと仮定します
手順
eb init (接続)
$ eb init
Select a default region
(中略)
(default is 3): 9
Select an application to use
1) php-sample-app
2) [ Create new Application ]
(default is 2): 2
Select a platform.
1) Node.js
2) PHP
(中略)
(default is 1): 2
Select a platform version.
1) PHP 7.2
(中略)
(default is 1): 1
Cannot setup CodeCommit because there is no Source Control setup, continuing with initialization
Do you want to set up SSH for your instances?
(Y/n): y
Select a keypair.
1) aws-keypair
(中略)
7) [ Create new KeyPair ]
(default is 6): 5
- Select a default region 日本国内で使うことを想定し、Tokyoを選択する
- Select an application to use 新しく作るので [ Create new Application ]
- Select a platform. ここではPHPを選択する(動かしたいものによって変わる)
- Select a platform version. 2018/10時点で最新の PHP7.2を使うことにした
- SSH for your instances? Y ebで作成するインスタンスにアクセスするためにSSH接続を作る
- Select a keypair. ここでは、事前に作ってあるキーペアを使う
これを実施すると、実施したフォルダに.elasticbeanstalk
というディレクトリが生成され、そこに設定が保存される。
コンテンツを用意する。
具体的な方法は省略します。
ただしディレクトリ全体がアップされるため、
Webサーバとして使う場合、ディレクトリ分けた方がよいかも。
~/develop
でeb init
したと仮定した場合、たとえばこんな感じで。
~/develop/cakephp
フレームワーク部分。
~/develop/wordpress
WordPress(ブログ機能)
~/develop/landing
ランディングページ
CakePHPとWordPressが混在するサーバって何なんだって気がしますが
ごく小規模なWebサービスであればこれでもよさそうな。
.ebextensionsによる設定
これが大事。
インストールするソフトウェアの指定や、nginx.confの指定など。
別途記載する。
eb createでデプロイする
$ eb create
Enter Environment Name
(default is develop):
Enter DNS CNAME prefix
(default is develop): your-develop-url-name
Select a load balancer type
1) classic
2) application
3) network
(default is 1): 2
Creating application version archive "app-yymmdd_HHiiss".
Uploading develop/app-yymmdd_HHiiss.zip to S3. This may take a while.
Upload Complete.
- Enter Environment Name 環境名。特にこだわりが無ければディレクトリ名と一緒で良いかも
- Enter DNS CNAME prefix URLのプレフィックス。何か分かりやすいものを入れる
- Select a load balancer type ロードバランサーのタイプ。
eb createに引数をつける
実際には、特定のVPC環境に特定のサブネットやセキュリティグループを定義するような運用の仕方になる。
#!/usr/bin/bash
echo "start Elastic Beanstalk CLI CREATE!!"
# --vpc VPCを指定する
# --vpc.id vpc-XXX VPCのIDを指定する
# --vpc.securitygroups sg-YYY VPCのセキュリティグループを指定する
# --vpc.publicip EC2インスタンスに、パブリックIPを付与する(自動で)
# --vpc.ec2subnets subnet-AAA, subnet-BBB EBが生成するEC2インスタンスにつなげるサブネット
# --vpc.elbsubnets subnet-CCC,subnet-DDD ロードバランサーにつなげるサブネット(同時に生成するEC2と、同じアベイラビリティゾーンに存在することが必要
eb create --vpc --vpc.id vpc-XXX --vpc.securitygroups sg-YYY --vpc.publicip --vpc.elbsubnets subnet-AAA,subnet-BBB --vpc.elbpublic --vpc.ec2subnets subnet-CCC,subnet-DDD
こんな感じで定義する。
EB CLI リファレンスも参考に
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/eb3-create.html
参考
ほぼほぼ、これを参考にして実施しただけですが・・・
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~