AWS Elastic Beanstalk を使ってみた
+こねた CDP
- Hokuriku -勉強会 第5回
中道 健一( nkmc )JAWS-UG 北陸コアメンバー
創屋株式会社 所属(石川県白山市)ソフトウェア・エンジニア(中間管理職)PHP/Python/Ruby/.NET/VC++ とか
好きな AWS サービス: Route53好きな CDP : ---
自己紹介
創屋(そうや)株式会社2005 年創業http://www.souya.biz/
システム開発全般AWS を利用したサービス構築言語・プラットフォームにとらわれず、
広い範囲のシステム開発を1社で行える
開発室:石川県白山市日御子町ハ 13-6
東京事務所:東京都台東区西浅草 3-10-10-201
最近ネタ切れ全然目新しいことできてない小ネタなら・・・
◦Simple Email Service(SES) でメール送信
◦Elastic MapReduce(EMR) でログ結合◦EC2 上で Ruby on Rails 使ってみた
ちょっとだけ新しいこと
やってみようか
AWS Elastic Beanstalk初めて(!)
AWS クラウド内でのアプリケーションのデプロイと管理を簡単にするサービス
Web アプリケーションをアップロードするだけで、アプリケーションの運用に必要な環境の作成からデプロイ、ロードバランシングなどが自動で行われる
AWS Elastic Beanstalk とは
サンプルアプリを動かしてみよう
百聞は一見に如かず
AWS Management Console からElastic Beanstalk を選択
プラットフォームを選んで Start
サンプルアプリ動かす
サンプルアプリ(起動待ち) アイコンがグリーンになるまで5分ぐらい待つ グリーンになったらブラウザでアクセス
今 AWS の中の人が一生懸命構築してます
これでワンセット
サンプルアプリ(起動したよ)
こんな感じの画面がブラウザにでます
言語言語
バージョンコンテナ /
フレームワークサポートツール提供 IDE
Java 5 or 6 Apache + Tomcat6, 7
Eclipse
PHP 5.3 or 5.4 CAKE PHPSymfony2
Python 2.6 DjangoFlask
Ruby 1.8.7, 1.9.3
RailsSinatra
.NET .NET 2.0以降
IIS7.5, 8 Visual Studio2008, 2010
Node.js ExpressGeddy
プラットフォーム
詳細はhttp://docs.aws.amazon.com/elasticbeanstalk/latest/dg/Welcome.html
この辺り読めば nkmc の話は必要ありませんでした!http://aws.amazon.com/jp/elasticbean
stalk/faqs/http://
www.slideshare.net/AmazonWebServicesJapan/getting-startedwithbeanstalk-20130111
http://www.slideshare.net/dateofrock/net-cobol20130222
書籍Amazon Web Servicesプログラミング
参考
VS.NET で WEB アプリをデプロイ
これだけの発表ではアレなので
Visual Studio.NET(2008)
のデプロイをデモしてみます!
VisualStudio.NET で WEB アプリをデプロイ(前準備1)
Microsoft Visual Studio.NET 2008/2010 を用意 (Express でもOK か不明)
AWS Toolkit for Microsoft Visual Studio をインストール◦http://aws.amazon.com/jp/visualstudi
o/Web Deploy をインストール
◦http://www.iis.net/downloads/microsoft/web-deploy
VS.NET で WEB アプリをデプロイ(前準備2)
VS.NET を起動したら、 AWS Toolkitにアクセスキーとシークレットキーを設定
VS.NET で WEB アプリデプロイ (1)
WEB アプリケーション・プロジェクトを作成・実装
VS.NET で WEB アプリデプロイ (2)
ASP.NET WEB サイトを選択
VS.NET で WEB アプリデプロイ (3)
プロジェクトを右クリックしてPublish to AWS… を選択
VS.NET で WEB アプリデプロイ (4)
AWS Elastic Beanstalk を選択
VS.NET で WEB アプリデプロイ (5)
アプリケーション名 (Name) を入力
VS.NET で WEB アプリデプロイ (6)
環境名 (Name) を入力
VS.NET で WEB アプリデプロイ (7)
コンテナタイプを指定 (Container type)インスタンスタイプを指定 (Instance
type)
VS.NET で WEB アプリデプロイ (8)
内容を確認して Deploy ボタン
VS.NET で WEB アプリデプロイ (9)
イベントウィンドウが表示されますデプロイが完了したら通知ウィンドウが表
示されます
まとめアプリケーション開発者から使いやす
いほとんどの言語に対応開発、テスト、ステージング、プロダ
クション環境などを分けて管理できる設定ファイルで細かくカスタマイズ可能
こねた CDP
Web Storage Archiveパターン
こねた CDPELB の下に複数の EC2 をぶら下げたWEB サーバのアクセスログどうしよ
う?複数台のサーバを見るのは面倒だか
ら、 S3 に集めたいな
Web Storage Archiveパターンだ!
こねた CDP
Web Storage Archiveパターン
http://aws.clouddesignpattern.org/index.php/CDP:Web_Storage_Archiveパターン
こねた CDPWeb Storage Archiveパターン
クラウドストレージ (S3) の無限キャパシティでログなどを貯め続けることができる
S3 の高可用性・耐久性でファイルのバックアップも不要
S3 の単価が安い1箇所にファイルを集めることができる
こねた CDPEC2 からのログの転送方法は?S3sync ではなく Fluentd を使って
みた。◦ http://fluentd.org/
この辺りを参考にしてインストール◦ http://
blog.suz-lab.com/2012/11/centos6fluentd.html◦ http://dev.classmethod.jp/cloud/amazon-linux-fluent
d-setup-plugin/$ sudo -s# cd# curl -OL http://toolbelt.treasure-data.com/sh/install-redhat.sh# chmod 755 install-redhat.sh# ./install-redhat.sh
こねた CDP
$ sudo chgrp td-agent /var/log/httpd/
$ sudo chgrp td-agent /var/log/messages
$ sudo chgrp td-agent /var/log/secure
$ sudo chgrp td-agent /var/log/cron
$ sudo chmod g+rx /var/log/httpd/
$ sudo chmod g+rx /var/log/messages
$ sudo chmod g+rx /var/log/secure
$ sudo chmod g+rx /var/log/cron
転送するファイルのフォルダに権限設定
こねた CDP
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem update
$ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-s3 $ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-forest $ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-config-expander
Gem のアップデートとプラグインのインストール
fluent-plugin-s3 S3 にログを書き出すプラグインfluent-plugin-forest タグを動的に扱うプラグイン
fluent-plugin-config-expander プレースホルダを扱えるようにするプラグイン
こねた CDP
<source> type forward port 24224</source> <source> type config_expander <config> type tail format apache path /var/log/httpd/access_log tag ${hostname}/apache.access </config></source> <source> type config_expander <config> type tail format syslog path /var/log/messages tag ${hostname}/syslog.messages </config></source>
<match *.**> type forest subtype s3 <template> aws_key_id AKI****** aws_sec_key ************** s3_bucket log.test.com s3_endpoint s3-ap-northeast-1.amazonaws.com path ec2/${tag}/ buffer_path /var/log/td-agent/buffer/${tag} time_slice_format %Y/%m/%d/ec2-%Y-%m-%d-%H flush_interval 1m# time_slice_format %Y/%m/%Y-%m-%d# time_slice_wait 10m </template></match>
$ sudo vi /etc/td-agent/td-agent.conf
こねた CDP
これでインストールと設定は完了
$ sudo service td-agent restart
を実行してブラウザからサイトにアクセス。しばらくすると S3 上にファイルが転送された!
こねた CDP
暫く放置していたら問題発覚
ファイルの更新間隔が短すぎるのか、分単位でファイルができてしまう!?
設定間違ってたみたい。細切れのログファイルが一杯できた・・・。
こねた CDPAWS の中の人に EMR でファイル結合
できるって教えてもらったコマンドは S3DistCp
◦ http://imai-factory.s3.amazonaws.com/decks/log_aggregation_with_emr.pdf
◦ http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html
EC2 の micro インスタンスを起動して、EMR をキック。
これでファイルが結合された!
こねた CDPEC2 のマイクロインスタンス起動してすぐ実行する方法
$ cd$ mkdir elastic-mapreduce-cli$ cd elastic-mapreduce-cli$ wget http://elasticmapreduce.s3.amazonaws.com/elastic-mapreduce-ruby.zip$ unzip elastic-mapreduce-ruby.zip $ vi credentials.json{"access_id": "AKI*****************","private_key": "**************************","keypair": "keypair_name","key-pair-file": "mykeypair.pem","log_uri": "s3n://log-merge.test.com/","region": "ap-northeast-1"}
キーを置いとく$ chmod og-rwx mykeypair.pem
EMR のインスタンスを起動し、 jobflow番号を取得する。$ ./elastic-mapreduce --create --name logmerge --instance-type m1.small --num-instances 1 --aliveCreated job flow j-1IFZNUBP3U123
EMR で S3distCp 実行./elastic-mapreduce --jobflow j-1IFZNUBP3U123 \--jar s3://ap-northeast-1.elasticmapreduce/libs/s3distcp/1.latest/s3distcp.jar \--step-name S3DistCp \--args '--src,s3://log.test.com/2013/03/,--groupBy,.*([0-9]{4}-[0-9]{2}-[0-9]{2}).*.gz,--outputCodec,gzip,--dest,s3://log-merge.test.com/merge/'
こねた CDP
と思ったら、更に失敗に気づく
Fluentd が作るファイルは JSON形式フツーは MongoDB (なにそれ)に入れ
て解析したりするらしいが・・・今回は単純に Windows 用のビュ
ワーで Apache ログを見たいだけ!
こねた CDPJSON 対応ログビュワーがないよ (́ ・ ω ・` )
仕方ないので人力で解決Fulentd の JSON形式ファイルから Apache ロ
グ形式に変換するツールを自作 (VB.NET + Json.NET)◦ https://
s3-ap-northeast-1.amazonaws.com/public.nkmc/tools/JSON2Apache.zip
◦改変自由で配布します。
最初から S3sync でローテートしたログをアップすればいいだけでした・・・
おしまい
以上、まとまりませんでしたがおしまい。