LoginSignup
1
3

More than 5 years have passed since last update.

【はじめてのAWSシリーズ】Elastic Beanstalk &コマンドラインでデプロイしてみる

Posted at

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サーバとして使う場合、ディレクトリ分けた方がよいかも。

~/developeb 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環境に特定のサブネットやセキュリティグループを定義するような運用の仕方になる。

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編~

1
3
0

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