Elastic Beanstalkでブランチ別にデプロイを行う方法。(Windows)

スポンサーリンク

こんばんは。ファガイです。本日はElastic Beanstalkでブランチ別にデプロイをする方法に関して書こうと思います。
結構一つ前の記事と連動している感じなので、Elastic Beanstalkを使ったことが無い方はそちらをやってからこっちに来るとよいでしょう。

概要

Elastic Beanstalkでブランチ別にデプロイをする方法に関して書こうと思います。
前の記事は読んでおいたほうがいいです。

環境

前回の記事と同じ環境です。

利用する

前回の環境を使おうと思ったのですが、途中でよく分からなくなったので作り直し。

test2フォルダを作り、git initされて、AWSDevTools-RepositorySetup.batが実行された後から。

では、コンフィグを設定してきます。

一応、前回行っていたためアクセスキーと、シークレットアクセスキーは残っている模様。  
今回は、global設定はリージョンのみにします。理由はブランチ別でデプロイするためです。  

$ git aws.config
Reading Credentials from C:\Users\username\.elasticbeanstalk\aws_credential_file.

You can supply different credentials by editing that file or editing .elasticbeanstalk/config to reference a different file.
The credential file should have the following format:

AWSAccessKeyId=your key
AWSSecretKey=your secret

AWS Region [default to us-east-1]: ap-northeast-1{Enter}
AWS Elastic Beanstalk Application:{Enter}
AWS Elastic Beanstalk Environment:{Enter}

まず、gitの準備をしておかなくては行けないので、情報を追加しましょう

vim index.php
<?php 
echo "Hello World";

git addします

git add index.php

コミットします。

git commit -m "first commit"

ブランチ確認。

$ git branch
* master

masterが追加されたので、作業にとりかかりましょう。

グローバルの値がデフォルト値になって出てくるため、エンターです。

$ eb init
To get your AWS Access Key ID and Secret Access Key,
  visit "https://aws-portal.amazon.com/gp/aws/securityCredentials".
Enter your AWS Access Key ID (current value is "XXXX*****XXXXX"):{Enter}
Enter your AWS Secret Access Key (current value is "xxxxx*****xxxxxx"):{Enter}
Select an AWS Elastic Beanstalk service region (current value is "Asia Pacific (Tokyo)").
Available service regions are:
1) US East (Virginia)
2) US West (Oregon)
3) US West (North California)
4) EU West (Ireland)
5) EU Central (Frankfurt)
6) Asia Pacific (Singapore)
7) Asia Pacific (Tokyo)
8) Asia Pacific (Sydney)
9) South America (Sao Paulo)
Select (1 to 9):{Enter}

アプリケーションの名前は、test-appにしましょうか。
envはここに出てきたtest-app-envにしちゃいましょう。

Enter an AWS Elastic Beanstalk application name (current value is "test2"): test-app
Enter an AWS Elastic Beanstalk environment name (current value is "test-app-env"): {Enter}

補足

あとで分かったことなのですが、ここで設定するアプリケーション名はenv毎に別々には出来ませんでした。
やってたら分かるんですが、明らかに共存出来てないことが分かります。
なので一般的な名前にしておいた方がいいでしょう。普通にアプリ名とかがいいかと。
あと、同じ名前のアプリケーション名を作ると競合か、上書きされたりすると思うので注意です。

役割の選択をします。1を選択。

Select an environment tier.
Available environment tiers are:
1) WebServer::Standard::1.0
2) Worker::SQS/HTTP::1.0
Select (1 to 2):1

AMIは1で。

Select a solution stack.
Available solution stacks are:
1) 64bit Amazon Linux 2014.09 v1.1.0 running PHP 5.5
省略
51) 64bit Debian jessie v1.1.0 running Go 1.3 (Preconfigured - Docker)
Select (1 to 51): 1

ロードバランサー不要なので2で

Select an environment type.
Available environment types are:
1) LoadBalanced
2) SingleInstance
Select (1 to 2):2

RDSは別途作りたいのでn

Create an RDS DB Instance? [y/n]: n

インスタンスプロファイル作らなくても大丈夫?って聞かれるのでy

Attach an instance profile (current value is "[Create a default instance profile]"):
You IAM user does not have sufficient permission. User: arn:aws:iam::XXXXXXXX:user/XXXXXXXX is not authorized to perform: iam:ListInstanceProfiles on resource: arn:aws:iam::XXXXXXXXX:instance-profile/
Do you want to proceed without attaching an instance profile? [y/n]:y

また、ここでIAM権限のあるユーザーで入った場合は、プロファイルを作るための番号が出てきます。

Attach an instance profile (current value is "[Create a default instance profile]"):
1) [Create a default instance profile]
2) aws-elasticbeanstalk-ec2-role
3) [Other instance profile]

何もしていない場合は、1と3が出ているでしょう。以前、Roleを作成している場合はそのロールも表示されます。
こちらは自分に合う形にしましょう。

これでebの設定が終わったので、これをeb branchを使ってブランチの環境設定を吐き出しましょう。

もう一度今いるブランチを確認。

$ git branch
* master

では、eb branchを実行します。

$ eb branch
The current branch is "master".
Enter an AWS Elastic Beanstalk environment name (auto-generated value is "test-app-master-env"):
Do you want to copy the settings from environment "test-app-env" for the new
branch? [y/n]: y

実行した。しかし、test-app-master-envが作成されませんでした。
いずれ作成されるのかなぁ・・・

※ここで、.elasticbeanstalk/configファイルをコミットしていた場合、対象のコミットの情報を削除したことにしておいた方が良いです。
色々問題になりました。

次に、リリース用のブランチを作成します。

$ git checkout -b release
Switched to a new branch 'release'

こっちは簡単で、移動したらeb branchするだけです。

$ eb branch
The current branch is "release".
Enter an AWS Elastic Beanstalk environment name (auto-generated value is "test-app-release-env"):
Do you want to copy the settings from environment "test-app-env" for the new branch? [y/n]: y

これだけですね。
では、ブランチ毎にenvが変更されているかどうかを確認しましょう。

確認するには、eb statusコマンドで確認出来ます。

$ eb status
Environment "test-app-release-env" is not running.

では、ブランチを変えて確認してみましょう。

$ git checkout master
Switched to branch 'master'
$ eb status
Environment "test-app-master-env" is not running.

ちゃんとenvが分かれてます!
これで良さそうです。良かったよかった。

じゃあデプロイもやっちゃいましょう

git aws.push

ではmasterの方を起動させましょう

$ eb start
Starting application "test-app".
Waiting for environment "test-app-master-env" to launch.
2015-02-13 16:56:13     INFO    createEnvironment is starting.
2015-02-13 16:56:15     INFO    Using elasticbeanstalk-ap-northeast-1-XXXXXXXXX as Amazon S3 storage bucket for environment data.
2015-02-13 16:56:53     INFO    Created EIP: 54.65.XXX.XXX
2015-02-13 16:56:54     INFO    Created security group named: awseb-e-XXXXXXXX-stack-AWSEBSecurityGroup-XXXXXXXXXXXX
2015-02-13 16:57:54     INFO    Waiting for EC2 instances to launch. This may take a few minutes.
2015-02-13 16:59:34     INFO    Successfully launched environment: test-app-master-env

起動しましたね。
では、ブランチを切り替えて、releaseの方をデプロイしましょう。
releaseの方にはindex.phpを追加で書き換えておくなどしましょう。

$ vim index.php
とりあえず、Hello Worldの後に for releaseって書きました。
$ git add index.php
$ git commit -m "index.php add text"
[release 1ff0c02] index.php add text
 1 file changed, 1 insertion(+), 1 deletion(-)

では、aws.pushしましょう。色々躓いてた関係で、ちょっとエラー出たりしてますけど、上書かれているので大丈夫でしょう。

$ git aws.push
Pushing to environment: test-app-release-env
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 454 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote:
remote: error: Unable to deploy application version: No Environment found for EnvironmentName = 'test-app-release-env'.
remote:
To https://XXXXXXXXXXXXXXX:20150213T080217Zxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@git.elasticbeanstalk.ap-northeast-1.amazonaws.com/v1/repos/xxxxxxxxxxxxxx/commitid/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/environment/XXXXXXXXXXXXXXXXXXXXXXXXXXX
 + 1ae096c...1ff0c02 1ff0c02d60c08bad7fa35b0223004871f0aca085 -> master (forced
update)
$ eb start
Starting application "test-app".
Waiting for environment "test-app-release-env" to launch.
2015-02-13 17:03:04     INFO    createEnvironment is starting.
2015-02-13 17:03:05     INFO    Using elasticbeanstalk-ap-northeast-1-XXXXXXXXX as Amazon S3 storage bucket for environment data.
2015-02-13 17:03:34     INFO    Created EIP: 54.65.XXX.XXX
2015-02-13 17:03:34     INFO    Created security group named: awseb-e-xxxxxxxxx-stack-AWSEBSecurityGroup-XXXXXXXXXXXX
2015-02-13 17:04:59     INFO    Waiting for EC2 instances to launch. This may take a few minutes.
2015-02-13 17:06:52     INFO    Successfully launched environment: test-app-release-env

起動してくれました!
では、どちらにもアクセスしてみましょう。

とりあえずデフォルトページ出てくれましたね!
どうやら、eb startした後にgit aws.pushをする必要があったようです・・・w

なので、git aws.pushした後に閲覧してみたら問題なく動いてくれましたー。良かった。

コメント

タイトルとURLをコピーしました