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

41
AWS Elastic Beanstalk をををををを ををを CDP - Hokuriku - ををを を

description

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

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

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

AWS Elastic Beanstalk を使ってみた

+こねた CDP

- Hokuriku -勉強会 第5回

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

中道 健一( nkmc )JAWS-UG 北陸コアメンバー

創屋株式会社 所属(石川県白山市)ソフトウェア・エンジニア(中間管理職)PHP/Python/Ruby/.NET/VC++ とか

好きな AWS サービス: Route53好きな CDP : ---

自己紹介

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

創屋(そうや)株式会社2005 年創業http://www.souya.biz/

システム開発全般AWS を利用したサービス構築言語・プラットフォームにとらわれず、

広い範囲のシステム開発を1社で行える

開発室:石川県白山市日御子町ハ 13-6

東京事務所:東京都台東区西浅草 3-10-10-201

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

最近ネタ切れ全然目新しいことできてない小ネタなら・・・

◦Simple Email Service(SES) でメール送信

◦Elastic MapReduce(EMR) でログ結合◦EC2 上で Ruby on Rails 使ってみた

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

ちょっとだけ新しいこと

やってみようか

AWS Elastic Beanstalk初めて(!)

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

AWS クラウド内でのアプリケーションのデプロイと管理を簡単にするサービス

Web アプリケーションをアップロードするだけで、アプリケーションの運用に必要な環境の作成からデプロイ、ロードバランシングなどが自動で行われる

AWS Elastic Beanstalk とは

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

サンプルアプリを動かしてみよう

百聞は一見に如かず

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

AWS Management Console からElastic Beanstalk を選択

プラットフォームを選んで Start

サンプルアプリ動かす

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

サンプルアプリ(起動待ち) アイコンがグリーンになるまで5分ぐらい待つ グリーンになったらブラウザでアクセス

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

今 AWS の中の人が一生懸命構築してます

これでワンセット

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

サンプルアプリ(起動したよ)

こんな感じの画面がブラウザにでます

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

言語言語

バージョンコンテナ /

フレームワークサポートツール提供 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

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

VS.NET で WEB アプリをデプロイ

これだけの発表ではアレなので

Visual Studio.NET(2008)

のデプロイをデモしてみます!

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

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

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

VS.NET で WEB アプリをデプロイ(前準備2)

VS.NET を起動したら、 AWS Toolkitにアクセスキーとシークレットキーを設定

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

VS.NET で WEB アプリデプロイ (1)

WEB アプリケーション・プロジェクトを作成・実装

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

VS.NET で WEB アプリデプロイ (2)

ASP.NET WEB サイトを選択

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

VS.NET で WEB アプリデプロイ (3)

プロジェクトを右クリックしてPublish to AWS… を選択

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

VS.NET で WEB アプリデプロイ (4)

AWS Elastic Beanstalk を選択

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

VS.NET で WEB アプリデプロイ (5)

アプリケーション名 (Name) を入力

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

VS.NET で WEB アプリデプロイ (6)

環境名 (Name) を入力

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

VS.NET で WEB アプリデプロイ (7)

コンテナタイプを指定 (Container type)インスタンスタイプを指定 (Instance

type)

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

VS.NET で WEB アプリデプロイ (8)

内容を確認して Deploy ボタン

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

VS.NET で WEB アプリデプロイ (9)

イベントウィンドウが表示されますデプロイが完了したら通知ウィンドウが表

示されます

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

まとめアプリケーション開発者から使いやす

いほとんどの言語に対応開発、テスト、ステージング、プロダ

クション環境などを分けて管理できる設定ファイルで細かくカスタマイズ可能

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

こねた CDP

Web Storage Archiveパターン

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

こねた CDPELB の下に複数の EC2 をぶら下げたWEB サーバのアクセスログどうしよ

う?複数台のサーバを見るのは面倒だか

ら、 S3 に集めたいな

Web Storage Archiveパターンだ!

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

こねた CDPWeb Storage Archiveパターン

クラウドストレージ (S3) の無限キャパシティでログなどを貯め続けることができる

S3 の高可用性・耐久性でファイルのバックアップも不要

S3 の単価が安い1箇所にファイルを集めることができる

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

こねた 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

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

こねた 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

転送するファイルのフォルダに権限設定

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

こねた 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 プレースホルダを扱えるようにするプラグイン

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

こねた 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

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

こねた CDP

これでインストールと設定は完了

$ sudo service td-agent restart

を実行してブラウザからサイトにアクセス。しばらくすると S3 上にファイルが転送された!

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

こねた CDP

暫く放置していたら問題発覚

ファイルの更新間隔が短すぎるのか、分単位でファイルができてしまう!?

設定間違ってたみたい。細切れのログファイルが一杯できた・・・。

Page 37: JAWS-UG Hokuriku 第5回勉強会 AWS Elastic Beanstalkを使ってみた + こねた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 をキック。

これでファイルが結合された!

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

こねた 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/'

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

こねた CDP

と思ったら、更に失敗に気づく

Fluentd が作るファイルは JSON形式フツーは MongoDB (なにそれ)に入れ

て解析したりするらしいが・・・今回は単純に Windows 用のビュ

ワーで Apache ログを見たいだけ!

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

こねた CDPJSON 対応ログビュワーがないよ (́ ・ ω ・` )

仕方ないので人力で解決Fulentd の JSON形式ファイルから Apache ロ

グ形式に変換するツールを自作 (VB.NET + Json.NET)◦ https://

s3-ap-northeast-1.amazonaws.com/public.nkmc/tools/JSON2Apache.zip

◦改変自由で配布します。

最初から S3sync でローテートしたログをアップすればいいだけでした・・・

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

おしまい

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