JAWS-UG Hokuriku 第5回勉強会 AWS Elastic Beanstalkを使ってみた + こねたCDP

Preview:

DESCRIPTION

2013/4/12に行われたJAWS-UG北陸 in 金沢、第5回勉強会のセッション資料です。

Citation preview

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

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パターンだ!

こねた 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 でローテートしたログをアップすればいいだけでした・・・

おしまい

以上、まとまりませんでしたがおしまい。