aws elasticbeanstalk でデプロイをする
上記を参考。
仕事で既に用意されたAWS Elastic Beanstalk 環境にデプロイする機会があったので環境構築と使い方についてメモしておきます。AWSやGitについては説明を省くのでこれから使い始めたい方は以下のページを参考にどうぞ。
1, AWS Elastic Beanstalk とは
もう少し具体的に言うとgitのリポジトリをAWS Elastic BeanstalkにpushしてAWS環境に自動デプロイしてくれるサービスです。デザイナーやフロントエンジニアは既に用意されたAWS Elastic Beanstalk環境にpushするだけでデプロイを行うことができます。
2, デザイナーやフロントエンジニアがAWS Elastic Beanstalkを使うには
AWS Elastic Beanstalkを使うために必要なソフトウェアは以下の通り。
- 権限を付与されたAWS IAMアカウント(アクセスキー・シークレットキー)
- git
- git-flow(必須ではない)
- Homebrew
- Python(2.7以上)
- Elastic Beanstalk CLI(3.x系)
2.1, IAMアカウント
Gitは既に使っている前提で、デザイナーやフロントエンジニアであればインフラエンジニアからIAMアカウントが発行されるはずです。発行されたIAMアカウントでAWSマネジメントコンソールにアクセスし、アクセスキーとシークレットキーをメモしておきます。
このアクセスキーとシークレットキーをユーザーrootの.aws/credentials
にAWSへアクセスするためのプロファイル<profile-name>
を定義します。<profile-name>
の部分は任意の指定が可能です。
[<profile-name>]
aws_access_key_id = <AWS_ACCESS_KEY_ID>
aws_secret_access_key = <AWS_SECRET_ACCESS_KEY>
2.2, Python
詳しいインストール方法は記載しませんがHomebrewからインストール可能です。インストールが完了したらバージョンを確認しておきます。
$ brew install python
$ python -V
Python 2.7.9
2.3, Elastic Beanstalk CLI
AWS Elastic Beanstalkをコマンドラインから操作するためにElastic Beanstalk CLIをHomebrew経由でインストールします。インストールが完了したらこちらもバージョンを確認します。
$ brew install aws-elasticbeanstalk
$ eb --version
EB CLI 3.3.2 (Python 2.7.6)
これでAWS Elastic Beanstalkに必要な環境は用意できました。
3, デプロイするための準備
インフラエンジニアがすでに環境を用意している前提でデプロイするための準備を行います。AWS Elastic Beanstalkにデプロイするためにはまずgitプロジェクトを定義します。
$ mkdir <project_directory>
$ cd <project_directory>
$ git init
3.1, AWS Elastic Beanstalk
次に$ eb init --profile <profile-name>
を実行し質問形式でElastic Beanstalkプロジェクトを設定していきます。<profile-name>
はIAMアカウントを設定した際に.aws/credentials
に記載したプロファイルネームです。質問は以下の3つになります。
- リージョン(AWSのリージョン)
- アプリケーション(用意されているアプリケーション)
- 環境(テスト、本番等)
アプリケーションと環境はインフラエンジニアが用意しているはずなので、基本的に番号を入力して選択していくだけです。リージョンについてはマネジメントコンソールから確認が必要ですが、日本であればTokyoになるでしょう。コマンドが完了すると.elasticbeanstalk/config.yml
と.gitignore
が作られます。
.elasticbeanstalk/config.yml
にはgitのブランチmaster:
に合わせて環境名environment: app-prd
が指定されます。masterブランチでデプロイを実行した際、app-prd
の環境にデプロイするという指定です。
branch-defaults:
master:
environment: app-prd
global:
application_name: appname
default_ec2_keyname: hoge-fuga
default_platform: 64bit Amazon Linux 2015.03 v1.3.2 running PHP 5.6
default_region: ap-northeast-1
profile: <profile-name>
sc: git
.gitignore
の中身はこのようになっています。
# Elastic Beanstalk Files
.elasticbeanstalk/*
!.elasticbeanstalk/*.cfg.yml
!.elasticbeanstalk/*.global.yml
これでデプロイの準備が完了しました。あとは$ git add ...
と$ git commit ...
してコミットしておきます。
4, AWS Elastic Beanstalkにデプロイする
デプロイ作業は簡単、コマンド1発です。コマンドを実行するとインフラエンジニアの手を煩わせず自動でデプロイ処理が行われます。
$ eb deploy
デプロイ先を確認するのもコマンドから行えます。ブラウザが起動しデプロイ先が表示されます。
$ eb open
4.1, developブランチをテスト環境にデプロイするには
developブランチの場合はテスト環境にデプロイしたい、そんな時はdevelopブランチにcheckoutし$ eb init
を行うことでブランチ設定を追加することができます。
branch-defaults:
master:
environment: app-prd
develop:
environment: app-dev
...
4.2, 環境情報を知りたい
$ eb status
Environment details for: <env-name>
Application name: <app-name>
Region: ap-northeast-1
Deployed Version: fba1
Environment ID: <id>
Platform: 64bit Amazon Linux 2015.03 v1.3.2 running PHP 5.6
Tier: WebServer-Standard-1.0
CNAME: <xxxxxxx.elasticbeanstalk.com>
Updated: 2015-05-18 11:59:23.048000+00:00
Status: Ready
Health: Green
Alert: An update to this CLI is available.
4.3, マネジメントコンソールを開く
$ eb console [environment_name]
4.4, アプリケーションの環境一覧を表示する
$ eb list
4.5, 環境に設定されている環境変数を表示する
$ eb printenv [environment_name]
環境変数を設定することもできます。
$ eb setenv key=[value]
4.6, デフォルトの環境を設定する
$ eb use <environment_name>
5, その他のコマンド
以下のコマンドを使う機会はそれほどないと思いますが一応紹介しておきます。
5.1, 環境を新たに作成する
$ eb create <env-name>
5.2, 実行中の環境をシャットダウンする
$ eb terminate [env-name]
5.3, アプリケーションを完全に削除する
このコマンドを実行するとアプリケーションが消えるのでかなり危険なコマンドです。
$ eb terminate --all
6, まとめ
デプロイ系のツールをはじめて使いましたが便利ですね。すべては紹介しきれていないので下記ドキュメントを改めて読むとコマンド周りを一通り覚えることができると思います。
AsyncTask 注意点
AsyncTaskを使ってUIThreadと違うThreadでsocket通信などをしたら、複数AsyncTask同時実行されない現象があった。 どうもデフォルトだとAsyncTaskが並行実行されず、順番待ちみたい。
調べたら、AsyncTaskには以下の二つの実行モードがあると分かった。
THREAD_POOL_EXECUTOR
並列SERIAL_EXECUTOR
単列
Android 開発 viewをリサイズ
やり方をメモ
タイミング
Activity内なら、onWindowFocusChanged(hasFocus=true)いい。 onCreateだと、viewがまだ見えない、取得する幅が0のまま。
カスタマビューを使ってるなら、surfaceCreated(SurfaceViewの場合)でもいい。
設定の仕方
this.getLayoutParams().height = (int) height;
this.getLayoutParams().width = (int) width;
初Android開発
環境
起動
なぜかデフォルトのままエミュレータが起動しない。
後程原因判明: vagrantでvirtualboxを起動しているのは理由。
$vagrant halt
で問題解決。
仕方なく実機で確認することに。
Activity
アプリで言うと画面のこと。iOSの場合StoryBoradで描くViewと同じ。
- activity間遷移
Intent intent = new Intent(getApplicationContext(),JoinActivity.class); startActivity(intent);
- Toastの表示
引数で表示時間設定。メソッドで表示position設定
Toast ts = Toast.makeText(this, "You did not enter a nickname", Toast.LENGTH_SHORT); ts.setGravity(Gravity.TOP, 0, 0); ts.show();
- タイトルバーの非表示
AppCompatActivityを普通のActivityに変える。
もしくは、動的に切り替え:
/ 非表示 /
getSupportActionBar().hide();
/ 表示 /
getSupportActionBar().show();
AngularJS サーバサイドJSONレスポンスのスタブを作成
WEBサービスを実現する場合、フロントエンドからバックエンドのAPIサーバにアクセスすることが多いと思いますが、バックエンド側がまだ開発途中であったりすると、代替としてNode.js等でスタブのアプリケーションを作ったり、または固定のJSONファイルを作ったりと、割と手間がかかってしまいます。
今回、ためしに AngularJS の ngMockE2E を利用して、擬似的なAPIサーバを構築してみたので、その方法を紹介します。
前提
-
Yeomanで構築したAngularJS開発環境が前提です。
$ yo angular --minsafe
-
そうすると、次のように ngMockライブラリが最初から入ってます。
-
別途 ngMockライブラリをインストール場合も、Bower を使えば簡単にできます。
$ bower install angular-mocks
ngMockを使う準備
①index.htmlからngMockのJSファイルをロード
②ルートモジュールにngMockE2E
を追加
これで準備は完了です。
疑似APIサーバの処理を書く
- 先程と同じ
app.js
に、.run
以降を追記してみます。- 面倒なのでこうしてますが、本当はファイルを分けた方がいいです。
動作確認
ここは何でもいいのですが、APIを叩く処理を書きます。
まず、APIにアクセスするFactoryを作って、
Controllerから呼び出し、
Viewで描写します。
結果はこんな感じ。表示されました!
疑似APIサーバの処理をみてみる
全ての HTTPアクセスがこのロジックを経由します。
で、ここに全てのHTTPアクセスについて定義しないとエラーになるので、注意が必要です。
(正規表現はつかえます。)
.passThrough()
は何もしない、という意味です。テンプレートのアクセスもHTTP経由なので、「URLが views/
で始まる場合は何もしない」というふうに記載しています。
whenGET
でURLを定義し、対応するレスポンスを .respond
に記載します。今回は2パターンを記載してみました。
上のパターンは、単純に用意されたJSONデータをレスポンンスしています。
下のパターンは、JavaScriptでいろいろ処理させてからレスポンンスさせるパターンです。
この例だと、結局JSONをレスポンスしているだけですが、判定処理とか動的なJSONファイルの生成処理がここに書けるわけです。
ほか
-
詳しくは AngularJS のドキュメントをご覧ください。
-
今回つくったソースはGitHubにおいてあります。