16

AWS Cloudformation を使用して、ウェブ アプリケーション用のネットワーク インフラストラクチャ (VPC、セキュリティ グループ、サブネット、自動スケーリング グループなど) の多数の要素をセットアップしています。プロセス全体を自動化してほしい。ボタンをクリックして、すべてを起動できるようにしたい。

このすべてのネットワーク インフラストラクチャを設定する Cloudformation テンプレートの作成に成功しました。ただし、EC2 インスタンスは現在、必要なソフトウェアなしで起動されています。今、私はそのソフトウェアをそれらに搭載する最善の方法を見つけようとしています.

これを行うために、Packer.ioを使用して AMI を作成しています。しかし、代わりに Cloud-Init を使用するよう勧める人もいます。何を AMI に焼き付けるか、および/または Cloud-Init を介して何を構成するかを決定するには、どのヒューリスティックを使用すればよいですか?

たとえば、私 ( saqib) が自分のラップトップからパスワードなしでログインできるように、EC2 インスタンスを事前構成したいと考えています。したがって、EC2 にはユーザーが必要です。そのユーザーにはホーム ディレクトリが必要です。そして、そのホーム ディレクトリには、.ssh/known_hosts暗号化されたコードを含むファイルが存在する必要があります。これらのディレクトリを AMI にベイクする必要がありますか? それとも、cloud-init を使用してセットアップする必要がありますか? また、このケースや他の同様のケースでは、どのように決定すればよいですか?

4

2 に答える 2

17

私はマシンのプロビジョニングを環境のプロビジョニングから分離したいと考えています。

一般的に、私は以下をガイドとして使用します。

構築フェーズ

  • アプリケーションの実行に必要なすべてのソフトウェアを含む、Packer などを使用してベース マシン イメージを構築します。これから AMI を作成します。
  • アプリケーション イメージを作成するベース マシン イメージにアプリケーションをインストールします。このアーティファクトにタグを付けてバージョンを付けます。データベース接続などの環境固有のものをここに埋め込まないでください。これにより、異なる環境ランタイム間でこの AMI を簡単に再利用できなくなります。
  • すべてのサービスが停止していることを確認する

リリース段階

  • CFN のようなものを使用して、必要なイメージとインフラストラクチャで構成される環境をスピンアップします。
  • Cloud-Inituser-dataを使用してアプリケーション環境 (データベース接続、ログ フォワーダーなど)を構成し、アプリケーション/サービスを開始します。

このアプローチは最大の柔軟性を提供し、継続的デリバリー パイプラインのさまざまな問題を明確に分離します。

于 2015-03-29T23:21:20.050 に答える
5

サーバー、AMI、およびインフラストラクチャの計画をどのように組み立てるべきかを決定する重要な要因の 1 つは、次の質問に答えることです。本番環境では、新しいインスタンスをどのくらいの速さで起動する必要がありますか?

この質問に対する答えによって、AMI に焼き込む量と起動後にビルドする量が決まります。

注:私の経験は Chef Server であるため、Chef の用語を使用しますが、概念は他の構成管理スタックでも同じです。

一般的な経験則は、「インフラストラクチャをコードとして」扱うことです。これは、インスタンスを起動するプロセス、そのマシンでユーザーを作成するプロセス、およびアプリケーション コードと同じように known_hosts ファイルと SSH キーを管理するプロセスについて考えることを意味します。インフラストラクチャへの変更をソース コードで追跡できるため、管理、再展開、さらには CI もはるかに簡単になります。

この Chef の紹介では、Chef のクックブック、レシピ、リソースなどの用語について説明します。シンプルな LAMP スタックを構築する方法と、それを 1 つのコマンドで簡単に再起動する方法を示します。

したがって、あなたの質問の例を考えると、大まかに言えば、次のことを行います。

  • Cloudformation スクリプトを使用して、基本の Ubuntu Linux AMI (現在は 14.04) を起動します。
  • インスタンス構成の UserData セクションで、Chef クライアントのインストール プロセスをブートストラップします。
  • レシピを実行してユーザーを作成します。
  • レシピを実行して、ユーザーの known_hosts ファイルを作成します

インフラストラクチャを特定の機能を実行するコードの小さなブロックに分割できるため、Chef などのツールが使用されます。サービスの作成、ソフトウェア パッケージのインストールなどの基本的な構成要素を実行する、多数のクックブックが既に作成されて利用可能になっています。

とはいえ、特定のドメインや要件のために、ベスト プラクティスから逸脱しなければならない場合もあります。インフラストラクチャ管理のすべての利点を考慮して、アイテムを AMI に焼き付ける必要がある場合があります。

アプリケーションが画像処理を行い、ImageMagick を使用する必要があるとしましょう。ソースから ImageMagick をビルドする必要があると仮定しましょう。Chef Recipes を介してこれを行うと、ImageMagick をコンパイルするだけで、通常のインスタンスの起動時間にさらに 7 分間かかる可能性があります。新しいインスタンスがオンラインになるまで 10 ~ 12 分待つのが長すぎる場合は、ImageMagick が既にコンパイルおよびインストールされている独自の AMI を作成することを検討してください。

これは許容できる解決策ですが、事前に作成された AMI の独自のフリートを管理すると、インフラストラクチャのオーバーヘッドが追加されることに注意してください。新しい AMI がリリースされると、カスタム AMI を最新の状態に保つ必要があります。さまざまなインスタンス タイプやさまざまな AWS リージョンに拡張します。

于 2015-03-21T14:26:25.300 に答える