Slide 1

Slide 1 text

PaaSのPはPerlのPだったんだ!! ΩΩΩ<な、なんだってェー!!! @saisa6153

Slide 2

Slide 2 text

PaaS Platform as a Service

Slide 3

Slide 3 text

*aaSについて ● SaaS: Software as a Service ○ サース ○ アプリケーションを提供 ○ 普通のwebアプリ ● IaaS: Infrastructure as a Service ○ イース ○ アプリ実行のインフラを提供 ○ Amazon EC2やGoogle Compute Engineなど ● PaaS: Platform as a Service ○ パース ○ フレームワークレベルの実行環境を提供 ○ SaaSとIaaSの中間

Slide 4

Slide 4 text

PaaSプロバイダ 対応プラットフォーム Heroku ruby, java, node, python, php GAE python, java, php, go Engine Yard ruby, php

Slide 5

Slide 5 text

おわかりいただけただろうか?

Slide 6

Slide 6 text

PaaS名 対応プラットフォーム Heroku ruby, java, node, python, php GAE python, java, php, go Engine Yard ruby, php う~ら~め~し~や~

Slide 7

Slide 7 text

Perlが無い!!

Slide 8

Slide 8 text

苦しい!!

Slide 9

Slide 9 text

諦めるのはまだ早い!!

Slide 10

Slide 10 text

そっその声は!?

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

ど、Docker氏〜

Slide 13

Slide 13 text

説明しよう!! Dockerとは!! ● 軽量仮想化技術 ● OSS ● ホストとカーネルを共有するためオーバーヘッド が小さい ● 用途は ○ 軽量仮想環境の構築 ○ デプロイの自動化

Slide 14

Slide 14 text

だが、実行環境が無い... Dockerだけあっても... デプロイは困難...

Slide 15

Slide 15 text

ここまでか...

Slide 16

Slide 16 text

諦めるのはまだ早い!!

Slide 17

Slide 17 text

そっその声は!?

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

え、Elastic Beanstalk氏〜

Slide 20

Slide 20 text

説明しよう!! Elastic Beanstalkとは!! ● Amazon公式のPaaS ● AWSのよくある構成をサクッと作れる ● 作った環境にアプリをサクッとデプロイ ● 色々対応 ○ Node ○ Ruby ○ PHP ○ Python ○ .Net ○ Java ● オートスケールやローリングアップデートも!!

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

説明しよう!! EB with Dockerとは!! ● EBで任意のDockerコンテナを動作可能 ● やることは簡単 ○ Dockerコンテナを用意して ○ AWSのコンソールからマウスを数回クリック ● なんでもPaaSできる!!

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

EBを使うと サクッとB-Gデプロイ

Slide 35

Slide 35 text

デプロイの設定は? . ├── Dockerrun.aws.json ├── README.md ├── app │ ├── Dockerfile │ └── SampleApp ~ └── base └── Dockerfile

Slide 36

Slide 36 text

Dockerrun.aws.json { "AWSEBDockerrunVersion": "1", "Authentication": { "Bucket": "sampleapp-bucket", "Key": "docker/mydockercfg" }, "Image" : { "Name" : "saisa6153/sampleapp:latest", "Update": "true" }, "Ports" : [{ "ContainerPort": "80" }] }

Slide 37

Slide 37 text

Dockerfileは? . ├── Dockerrun.aws.json ├── README.md ├── app │ ├── Dockerfile │ └── SampleApp ~ └── base └── Dockerfile

Slide 38

Slide 38 text

ベースイメージ FROM centos:centos6 MAINTAINER saisa6153 USER root WORKDIR /root # yum RUN yum install -y epelのURL RUN yum update -y RUN yum --nogpgcheck install -y 必要なもの色々 RUN yum clean all # perl RUN git clone https://github.com/tagomoris/xbuild RUN xbuild/perl-install 5.18.2 /opt/perl CMD ["/bin/bash"]

Slide 39

Slide 39 text

アプリケーションイメージ FROM saisa6153/sampleapp:latest MAINTAINER saisa6153 USER root # application WORKDIR /app ENV PATH /opt/perl/bin:$PATH ADD SampleApp /app RUN carton install --deployment EXPOSE 80 CMD ["/opt/perl/bin/carton", "exec", "perl", "/app/script/sampleapp-server"]

Slide 40

Slide 40 text

デモ

Slide 41

Slide 41 text

その他雑感

Slide 42

Slide 42 text

EC2インスタンスタイプ ● ネットワークが重要です ○ 1回のデプロイで数百MBのダウンロード ○ EC2はInbound無料だが... ○ ケチるとEBのタイムアウトに引っかかる ● オススメはc3.largeです ○ 第三世代の下から二番目 ○ ちょっと高い($0.128/h) ○ SR-IOV対応なのでネットワークが速い ○ メモリ3.75G, ディスク2x16G SSD ● 1日遊んでも映画より安い!!

Slide 43

Slide 43 text

.ebextensions/について ● デプロイの設定 ● アップロードするgitのzipアーカイブのrootに. ebextensionsディレクトリ ○ その下に*.configという名前でyamlを置いておく ○ デプロイ前後で名前順に実行される ● EBの完全なGit管理が可能 ○ Dockerホスト(EC2)の構成管理 ○ 環境変数の設定

Slide 44

Slide 44 text

.elasticbeanstalk/について ● サーバ構成の設定 ● 設定ファイルでAWSを制御できる ○ インスタンスタイプ ○ IAMロール名 ○ VPC設定 ● GUIからの脱却と より完全なInfrastructure as a Code

Slide 45

Slide 45 text

MySQLとかMW使いたい ● 基本的にコンテナ内で動作するプロセスは1 ● supervisordを使う ○ 詳細は後述 ○ docker内ではinit周りが黒魔術らしい ● CentOS7だとMariaDBが入ってビックリ

Slide 46

Slide 46 text

supervisord使わざるを得ない ● コンテナ内で1つのforgroundプロセスが無けれ ばならない ● supervisord自体をnodaemon=trueで起動 ● appやmysqlは以下のように起動 ○ autostart=true ○ autorestart=true ● supervisordはforegroundで動くものしか管理 できない ○ backgroundで動いてしまうと死とみなされる

Slide 47

Slide 47 text

VPCについて ● 考えなしでEB使うと痛い目を見ます ● EB初回起動するときに作られるデフォのセキュ リティグループを消して痛い目を見た ● S3経由で外部のプライベートリポジトリにアクセ スするなら必須の設定 ● EBはAWSを寄せ集めるツールで、VPCが無い と一般水準のセキュリティは実現できないらしい ○ つまりS3経由の認証を使わなくてもほぼ必須 ● IAMロールの設定も必須

Slide 48

Slide 48 text

RDSについて ● EC2の自前運用よりちょっと高いので微妙 ● EBだと一緒に作ってくれるのが良い ● 設定時にPW8文字以下でも文句言われないけ ど、インスタンス作り始めた直後に「やっぱだめ だ」って言われて理不尽 ● アプリのデプロイより起動に時間がかかる ● ほとんど使ってないので詳細不明 ○ GeekDojoのレポート待ち

Slide 49

Slide 49 text

マイグレーションについて ● 不明 ● ebextensionsでスクリプトをデプロイ毎に動作さ せるとか ● ActiveRecordやGitDDL::Migrator必須か ○ マイグレーションを含むgitアーカイブをupload ○ .elasticbeanstalkでPerlがインストールされたAMIを指 定 ○ .ebextensionsでマイグレーションするスクリプト ● 実際に使って答えを見つけたい一番の点

Slide 50

Slide 50 text

ログはどうするの ● コンテナ内で/var/log以下に出力 ● Dockerrun.aws.jsonでLogging設定 ○ “Logging” : ”/var/log/nginx” ● ログはS3に保存されるらしい ● そこからはEMRなりRedshiftなり

Slide 51

Slide 51 text

DockerfileのCMDとENTRYPOINT ● CMD ○ コンテナ起動時に任意のコマンドを実行 ○ docker run時に引数として実行したいコマンドを渡して 上書きできる ● ENTRYPOINT ○ コンテナ起動時に任意のコマンドを実行 ○ CMDと違い、引数でコマンドを上書きできない ● 使い分け ○ 開発中にコンテナ内デバッグするなら上書けるCMD ○ 落ち着いたらENTRYPOINTでオペミスを防止

Slide 52

Slide 52 text

GUI使うとかダサい ● コマンドラインツールあります ● brew install aws-elasticbeanstalk ● CLT使ってないので詳細不明 ● プロジェクトのzipアーカイブをアップロードすれ ば良いはずなので、with DockerでもCLTでデ プロイできるはず

Slide 53

Slide 53 text

コンテナに入れないの辛い ● sshしたいのはあるが、そのためにsshd動かし とくのも... ● nsenterとかがあります ○ dockerホストに入れておくと、sshしなくてもコンテナに attachできる ○ AMIに入れておく ○ boot2dockerならdocker仮想マシンに入れておく ● まだ黎明期なので、今後に期待

Slide 54

Slide 54 text

FAQ

Slide 55

Slide 55 text

ベンダーロックイン喰らってるじゃん ● 「Docker使う意義が半減」? ● 要はデプロイがなんとかなればAWS縛りは無し ● EBは使うに値するし、今はこれでDockerで動く アプリを作っておくのが必要なのでは ● GCPや他の安いPaaS/IaaSが対応したらすぐ 移れるように今から準備すれば良い

Slide 56

Slide 56 text

Rails使いだしHerokuでいいや ● いいと思うけどHerokuはHeroku社依存 ● これから発達していくであろうDockerの恩恵を 見極めるためにも乗っかっておきたい

Slide 57

Slide 57 text

そうまでしてDocker使いたいのか ● 使っておいたほうが良いと思います ● 今後出てくるクラウドサービスに対応できるアプ リケーションの作り方を習得しておきたい ○ Twelves Factor App ○ Exponential Backoff ○ 設定の環境変数渡し ○ 再現可能製 ○ ポータビリティ ○ 継続的デプロイメント ● 安全な運用の新しい可能性を追いたい

Slide 58

Slide 58 text

最後に

Slide 59

Slide 59 text

dotcloudというものがあってだな 昨晩知りました

Slide 60

Slide 60 text

まとめ

Slide 61

Slide 61 text

PaaSのPは Perlの Pでも あったんだ よ!!

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

おしまい EBに関する資料引用URL http://www.slideshare.net/hz_ouchi/elastic-beanstalk-31983440 http://www.slideshare.net/AmazonWebServicesJapan/elastic-beanstalk-dockersupport http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-aws-elastic- beanstalk