手動によるシステム管理はもうやめました。私は自分のインフラストラクチャをプログラム可能なエンティティと見なし、構成管理やEC2ノードのメンテナンスなどを自動化するツールでシステムを構成することで、そのように扱います。ツールボックス内のツール:
- Ruby(私のお気に入りのスクリプト/ツール言語)
- Git(バージョン管理)
- OpscodeのChef(Rubyで記述)(1)
- カピストラーノ(臨時の大量保守)
- インスタンスおよびイメージのメンテナンスのためのAmazonのEC2 APIツール。
- RightscaleのAWS gem(EC2のRubyバインディング)
(1)-開示、私はOpscodeで働いています。Reductive Labの人形のような他のツールがこのスペースを埋めます。
特定の機能に必要な方法でノードを構築したら、AMIをバンドルします。たとえば、Railsアプリサーバーを構築している場合は、すべての必須パッケージをインストールして、構築にかかる時間を節約します。
他のすべてが失敗した場合、私はSSHでシステムにログインします。私は長年にわたって手動のシステム管理を行っていました。これは古い帽子です。
ボックスにアクセスするために、何らかの形式のウィンドウシステムとリモートデスクトップを使用していますか、それともすべてコマンドラインですか?
パッケージに依存関係があり、パッケージが自動インストールされない限り、サーバーにGUIをインストールしません。
Linuxの世界でこれに相当するものはありますか?(ファイルの転送)
私は通常、2種類のファイル転送/ファイル保守を行います。
プラットフォームにネイティブなパッケージについては、APTやYUMなどの標準パッケージ管理ツールを使用します。ソースインストール(something.tar.gz)の場合、通常はwget経由でダウンロードします。
構成ファイルは通常、Chefによって管理されるERBテンプレートです。
SSHとSCP / SFTPを使用して手動でファイルを転送します。
マシン上で直接設定変更/スクリプト調整を行っていますか?または、これらのファイルをリモートで編集するためにローカルボックスに何か設定されていますか?または、リモートで編集してから、保存するたびに転送しますか?
システムの管理に関連するすべてのものをソフトウェア制御リポジトリに保管します。これは、1つ以上のシステムで構成を更新するときの私の典型的なワークフローです。私は自分のローカルワークステーションから開始します。
- 他の人の変更のためにマスターGitリポジトリからプルします。
- ローカルでファイルを編集します(構成ファイルの更新など)。
- 変更をコミットし、マスターにプッシュします。
- Chefサーバー(SSH経由でログイン)で、コミットした最新の変更をプルします。
- Chefサーバーの適切な場所に構成をデプロイします(このためにRakeを使用しています)。
- Chefクライアントは一定の間隔で実行されるため、30分ごとに変更を取得します。すぐに何かが必要な場合は、chef-clientを手動で実行します。
- 変更を確認してください!
EC2とローカル環境の間でファイルをどのように移動しますか?FTP?VPN経由でマップされたドライブのようなものですか?
EC2ノードで使用するファイルが保存される可能性のある場所がいくつかあります。
- Chefサーバー。主に設定テンプレート、いくつかの小さなパッケージも。
- GitHub。コード(オープンソースプロジェクト)をGitHubに保存します。EC2ノードはこれに簡単にアクセスできます(何かの最新バージョンのチェックアウトなど)。
- Amazon S3バケット。いくつかのものはバケツに保管されます。
私はEC2で多くの作業を行い、主に環境と変更のテストを行っています。私のツールとワークフローの結果として、実際に気にかけることに取り組むのに多くの時間を費やし、個々のファイルの処理や特定の構成の検討に費やす時間を減らしています。