2016年9月16日金曜日

ElasticBeanstalkの速習にチャレンジ

あー、なんか環境一式作ってくれるやつねー知ってるー使ったことないけどー…。
え?新しいアプリをElasticBeanstalkでローンチするの?それの運用やれ?
アプリはもうできている…??
ということで速習にチャレンジ。
これを社内ドキュメントシステムにも残して、他のメンバーにも運用させる目論見…w


Environment Type(環境タイプ)

  • Webサーバ と ワーカーがある
  • WebサーバタイプはHTTPポートを解放して外部からアクセスを受けるようなシステム全て。ユーザがブラウザでアクセスするタイプのソースコードを動かす場合は全部これ。
  • ワーカーはバックエンドのアプリのこと。SQSを使って他アプリというかシステムのワークフロー上の前後の機能とやりとりする。

DBの構築

  • RDSのインスタンスをElasticBeanstalkの構成の一部として起動することができる
  • アプリを消すとDBも自動的に削除される。もちろん最終スナップショットは取れる
  • 既存のRDSのスナップショットからRDSインスタンスを作成してそれをElasticBeanstalkアプリのDBにすることもできる
  • ElasticBeanstalkの構成の一部としないDBを作成することもできる。その場合は、ElasticBeanstalkアプリを削除してもDBが残る。作り方は多分RDSインスタンスを普通に作り、ElasticBeanstalkからそこへ接続する。
  • その他のDBに関する仕様はRDSを参照

VPC内への構築

  • 自分の既存のVPC内に構築することができる
  • Elastic Beanstalk は、Linux プロキシ設定(HTTP_PROXY、HTTPS_PROXY および NO_PROXY)をサポートしていない。
  • 直接インターネットからアクセスさせる(外部公開)するかNAT経由にする必要がある
  • VPC全般に言えるがUDP123番ポートを利用してNTPで時刻同期している。なのでNTPが利用できるように解放しておく必要がある。
  • 明示的にVPCを指定しないと自分のVPCを作ってそこに生まれる。

サービスロール、インスタンスプロファイル、ユーザーポリシー

  • サービスロール は 1個のサービスを正常に動かすために必要なポリシーをまとめたもの
  • ElasticBeanstalkサービスロールとは、Elastic Beanstalkが正常に動くために必要な各種権限が含まれたポリシーの集合体。
  • インスタンスプロファイル はElasticBeanstalkアプリを稼働させるEC2に付与するIAMロールのこと。
  • ユーザーポリシー はユーザIAMに適用できるElasticBeanstalkの権限ポリシーのこと。AWSユーザ側の話。

アプリのデプロイ

  • 基本的にアプリケーション全体をZipファイルにしてそれをアップロードすることでデプロイが行われる。
  • Webサーバのドキュメントルートに丸ごと置かれるとイメージしてよい?
  • 過去のバージョンのソースコードをはダウンロードできる。バージョンを戻すこともできる。

ebextensionsによるインフラ構築のカスタマイズ

  • アプリケーションのパッケージ(Zipファイル)のルートディレクトリに .ebextensions ディレクトリを作って、その中に filename.config の名前で yaml を書くと、ルールにしたがってインフラの構成変更を行ってくれる。
  • yum などから必要なプログラムをダウンロードしたり、決まった内容でファイルを生成したり、デーモンの起動停止設定を変更したりくらいはできる。
  • ebextension のファイル配布では、URLダウンロードか、インライン記述しかできない模様。つまり、アプリケーション内部の特定ファイルを指定してそれを配布することができない(ほんとに?)

CLIから構築すると圧倒的楽感が得られる

  • eb cli というコマンドラインツールがある。 awsコマンドの拡張的な位置づけで、awsコマンドとは別にインストールが必要
  • pip install awsebcli
  • eb cli は最新バージョンが3.x系となっていて、前のバージョン2.6とは非互換なところがある。今から始めるのであれば3.x系を使えば良い。
  • gitリポジトリを使うことが前提になっている。デプロイしたいアプリのリポジトリディレクトリのルートで eb init を実行する。
  • eb もリポジトリのように init してからそのディレクトリに Elastic Beanstalk アプリケーションの概念を植えてから作業を行っていく。
  • eb init は アプリケーション構築枠をElasticBeanstalkに確保した状態。枠だけなのでまだネットワークも構築されていないしEC2インスタンスも存在しない。
  • eb init で すでに存在している ElasticBeanstalkアプリケーションをカレントディレクトリのGitリポジトリと紐付けることもできる。アプリをシステム丸ごと移管された場合や、既存のシステムの開発に途中から参加する場合に使うと思う。
  • eb create で 「環境」を作る。「開発環境」とか「本番環境」などの「環境」のことだと思えばいい。システムの一式が作られる。つまり、ネットワーク、ELB、EC2が構築され、リポジトリのソースコードがデプロイされる。
  • eb create 実行時は対話でいろいろ聞かれる。構築するリージョンやアプリケーションの言語やELBの種類など。
  • eb create はオプションであらかじめ指定しないと、自分専用のVPCを作ってしまい、他のEC2らがローンチされている統合的なVPCで管理したいという思惑からそれてしまう。
  • eb cli の環境さえ整ってしまえば、あとは圧倒的に楽な感じがする。
  • eb cli のコマンドリファレンスは ここ をみると良い。そんなに種類は多くない。

DNSとSSL

  • ELBみたいに、Elastic BeanstalkアプリケーションにはAWSからDNS名が発行されるので、それをCNAMEレコードとしてDNSサーバに追加することができる。
  • Route53が利用できる場合はAレコードのエイリアスとして登録できる。そちらの方が良い。新規ドメインでのアプリ開発の場合はRoute53利用を前提にしたい。
  • SSL証明書は ACM(Amazon Certificate Manager)から発行される無料の証明書が利用できるので、それを適用できる。楽。

その他気づいたこと

  • Golang 1.5 でサンプルアプリを立ち上げてみたがSNSトピックが勝手にできた。承認URLが書かれたメールが飛んできた。SNSも使う想定で構築してくれる模様。
  • Elastic Beanstalk の公式ドキュメントは他のプロダクトより説明が抽象的で具体的にどうすればいいかわかりにくい印象。エンジニア向けかと思ったら経営層向けのような表現が出てきたり…。
  • Git使ったことない人は先にそっちを覚えたほうがいい。とりあえずは init して status して add して commit して push できるだけでよい。
  • とりあえず臆せずサンプルアプリを立ち上げて、管理画面がどうなっているのかとか、どのタイミングでEC2が生まれるのかとかの挙動を観察してからドキュメント読み込みに入ったほうが理解が早いかも。

次は

  • ebextensions という yaml群 を使うことでアプリのデプロイと一緒にインフラの設定変更やミドルウェアの追加などが可能となっている。自動で構築してくれる。それのやり方とか。
  • Zabbixエージェントとfluentdのインストールを自動化したい。
  • デプロイ時の挙動が選べるけどその辺どうすべき?とか

参考

AWS公式ドキュメント、クラスメソッドさんのブログ、Qiitaの順で漁りました。

0 件のコメント:

コメントを投稿