多数の同一サーバー上のNginx構成ファイルを同時に更新するにはどうすればよいですか?


12

Amazon EC2にはNginxサーバーのフリートがあり、新しい設定を実装するために設定ファイルを時々更新する必要があります。

現在、カスタムAMIに構成があり、更新する必要がある場合は、AMIを再構築してからEC2インスタンスを再構築する必要があります。ヘルパースクリプトはいくつかありますが、それを行うにはかなりの努力が必要です。もっと良い方法はありますか?


3
いくつか例を挙げると、ansible、saltstack。
-poige

回答:


26

活用できる概念は多数あります。

成功の鍵は自動化です

最初のオプションは、現在行っていることを実行し続けることです。つまり、構成が変更されるたびにEC2を再構築します。完全に自動化された方法で。

AMIを介して構成の更新を行っているので、これをさらに一歩進めて、あるリポジトリで構成ファイルを変更すると、次のようなパイプラインを作成します。

  1. 新しいAMIを自動的に構築します -そのための最も人気のあるツールの1つはPackerです
  2. 自動的にあなたのnginxの艦隊を再構築 -あなたはすでに、すべてのnginxのサーバーを持っている必要があり、自動スケーリンググループアプリケーションロードバランサフロントインチ そうしないASG起動構成を更新し、インスタンスが新しいAMIから再構築されるのを待つのと同じくらい簡単に更新を行うことができます

2番目のオプションは、インスタンスを所定の場所に保持し、構成ファイルのみをデプロイし、それらを再ビルドすることではありません。通常、構成ファイルをコードとして扱い、コードリリースを展開するのと同じ方法で構成の変更を展開できます。AWSにはそれを支援する多くのツールがあります。

  • 内部的に Chefを使用する AWS Elastic Beanstalk。この方法でNginxの更新をスクリプト化できます。
  • AWS Code Deployは、 AWS Code Suiteの他の部分とうまく統合できる、完全にスクリプト可能なデプロイメントツールです。
    • GitでNginx構成ファイルを保持できるコードコミット
    • コードコミットで構成ファイルが更新されるたびに展開を自動的にトリガーできるコードパイプライン
  • Ansibleまたは Puppetは、すべてのサーバーを同じように構成するのに役立つ一般的な非AWSツールです。

これらのNginx構成更新の自動化に慣れたら、インフラストラクチャの残りの部分に自動化を拡張することができます。


AWSでのデプロイオプションの概要に関する優れたホワイトペーパーがあり、わかりやすい概要を提供します。

私はそれが役立つことを願っています:)


AnsibleまたはPuppetの代わりにソルトがあります。これは、マスター/ミニオンタイプのセットアップ用に設計されており、大規模な展開向けに最適化されています。
アラホ

5

EFSに構成を保存し、Nginx構成が予想される場所にEFSをマウントします。代わりに、それらをAmazon S3に置いて、時々同期を実行するか、s3fsを使用します(s3fsは実稼働での使用には十分ではないことに注意してください)。

構成を変更する必要がある場合は、自動スケーリンググループの希望サイズを増やして、新しい構成で新しいインスタンスをトリガーするのに必要なサイズを2倍にし、古いインスタンスを削除する必要なサイズに戻します。または、サーバーのローリングリブートを実行します。

もう1つのオプションは、AWSコードのデプロイなどの基本的な自動化ツールを使用して、サーバーに新しい構成をプッシュすることです。

上記の完全に自動化されたオプションは技術的にはより優れており、よりクリーンですが、構成をめったに変更せず、簡単なソリューションが必要な場合に役立ちます。



1

AMIを再構築するか、構成ファイルの変更のためだけに提案される他のような本格的な展開パイプラインを作成することは、やり過ぎのように思えます。Ansibleを使用して変更をプッシュし、すべてのノードの同期を維持する必要があります。一般的なタスクの自動化に役立つ多くのAnsibleモジュールがあります。


不変のインフラストラクチャの利点の1つは、壊れやすく保守が必要な「ペット」サーバーがないことを知っていることです。これにより、問題なくprod / DR /テストでより多くのサーバーを作成できるという自信が得られます。
ティム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.