Upgrade to Pro — share decks privately, control downloads, hide ads and more …

perl-as-a-service

tannai
August 06, 2014

 perl-as-a-service

社内勉強会の資料です

tannai

August 06, 2014
Tweet

More Decks by tannai

Other Decks in Technology

Transcript

  1. *aaSについて • SaaS: Software as a Service ◦ サース ◦

    アプリケーションを提供 ◦ 普通のwebアプリ • IaaS: Infrastructure as a Service ◦ イース ◦ アプリ実行のインフラを提供 ◦ Amazon EC2やGoogle Compute Engineなど • PaaS: Platform as a Service ◦ パース ◦ フレームワークレベルの実行環境を提供 ◦ SaaSとIaaSの中間
  2. PaaS名 対応プラットフォーム Heroku ruby, java, node, python, php GAE python,

    java, php, go Engine Yard ruby, php う~ら~め~し~や~
  3. 説明しよう!! Elastic Beanstalkとは!! • Amazon公式のPaaS • AWSのよくある構成をサクッと作れる • 作った環境にアプリをサクッとデプロイ •

    色々対応 ◦ Node ◦ Ruby ◦ PHP ◦ Python ◦ .Net ◦ Java • オートスケールやローリングアップデートも!!
  4. デプロイの設定は? . ├── Dockerrun.aws.json ├── README.md ├── app │ ├──

    Dockerfile │ └── SampleApp ~ └── base └── Dockerfile
  5. Dockerrun.aws.json { "AWSEBDockerrunVersion": "1", "Authentication": { "Bucket": "sampleapp-bucket", "Key": "docker/mydockercfg"

    }, "Image" : { "Name" : "saisa6153/sampleapp:latest", "Update": "true" }, "Ports" : [{ "ContainerPort": "80" }] }
  6. Dockerfileは? . ├── Dockerrun.aws.json ├── README.md ├── app │ ├──

    Dockerfile │ └── SampleApp ~ └── base └── Dockerfile
  7. ベースイメージ 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"]
  8. アプリケーションイメージ 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"]
  9. EC2インスタンスタイプ • ネットワークが重要です ◦ 1回のデプロイで数百MBのダウンロード ◦ EC2はInbound無料だが... ◦ ケチるとEBのタイムアウトに引っかかる •

    オススメはc3.largeです ◦ 第三世代の下から二番目 ◦ ちょっと高い($0.128/h) ◦ SR-IOV対応なのでネットワークが速い ◦ メモリ3.75G, ディスク2x16G SSD • 1日遊んでも映画より安い!!
  10. supervisord使わざるを得ない • コンテナ内で1つのforgroundプロセスが無けれ ばならない • supervisord自体をnodaemon=trueで起動 • appやmysqlは以下のように起動 ◦ autostart=true

    ◦ autorestart=true • supervisordはforegroundで動くものしか管理 できない ◦ backgroundで動いてしまうと死とみなされる
  11. VPCについて • 考えなしでEB使うと痛い目を見ます • EB初回起動するときに作られるデフォのセキュ リティグループを消して痛い目を見た • S3経由で外部のプライベートリポジトリにアクセ スするなら必須の設定 •

    EBはAWSを寄せ集めるツールで、VPCが無い と一般水準のセキュリティは実現できないらしい ◦ つまりS3経由の認証を使わなくてもほぼ必須 • IAMロールの設定も必須
  12. マイグレーションについて • 不明 • ebextensionsでスクリプトをデプロイ毎に動作さ せるとか • ActiveRecordやGitDDL::Migrator必須か ◦ マイグレーションを含むgitアーカイブをupload

    ◦ .elasticbeanstalkでPerlがインストールされたAMIを指 定 ◦ .ebextensionsでマイグレーションするスクリプト • 実際に使って答えを見つけたい一番の点
  13. DockerfileのCMDとENTRYPOINT • CMD ◦ コンテナ起動時に任意のコマンドを実行 ◦ docker run時に引数として実行したいコマンドを渡して 上書きできる •

    ENTRYPOINT ◦ コンテナ起動時に任意のコマンドを実行 ◦ CMDと違い、引数でコマンドを上書きできない • 使い分け ◦ 開発中にコンテナ内デバッグするなら上書けるCMD ◦ 落ち着いたらENTRYPOINTでオペミスを防止
  14. GUI使うとかダサい • コマンドラインツールあります • brew install aws-elasticbeanstalk • CLT使ってないので詳細不明 •

    プロジェクトのzipアーカイブをアップロードすれ ば良いはずなので、with DockerでもCLTでデ プロイできるはず
  15. FAQ

  16. そうまでしてDocker使いたいのか • 使っておいたほうが良いと思います • 今後出てくるクラウドサービスに対応できるアプ リケーションの作り方を習得しておきたい ◦ Twelves Factor App

    ◦ Exponential Backoff ◦ 設定の環境変数渡し ◦ 再現可能製 ◦ ポータビリティ ◦ 継続的デプロイメント • 安全な運用の新しい可能性を追いたい