Amazon Web Services ブログ

EC2 Run Command を使用した、SSH アクセスなしでの大規模なインスタンスの管理

Ananth Vaidyanathan (EC2 Systems Manager のシニア製品マネージャー) および Rich Urmston (Pegasystems のクラウドアーキテクチャのシニアディレクター) によって書かれた次のゲスト投稿は、EC2 Run Command を使用して、SSH を用いることなく EC2 インスタンスの大量のコレクションを管理する方法を示しています。

Jeff;


多くの場合、エンタープライズは管理対象環境および数千の Amazon EC2 インスタンスを持っています。Secure Shell (SSH) について悩むことなく、システムをセキュアに管理することが重要です。Amazon EC2 Systems Manager の一部である Run Command では、制御され管理可能な方法で、インスタンス (またはタグを使用してインスタンスのグループ) でリモートコマンドを実行できます。これは、Run Command サービスに毎日依存する Pega Cloud オペレーションにとって、生産性を向上するための優れた追加機能です。標準の IAM ロールとポリシーを通じた Run Command の制御、ドキュメントの定義による入力パラメーターの使用、コマンド出力を返すために使用される S3 バケットの制御が可能です。また、他の AWS アカウントや一般ユーザーとドキュメントを共有することもできます。全体として、Run コマンドは優れた一連のリモート管理機能を提供します。

SSH よりも優れる
Run Command が SSH よりも優れたオプションであり、Pegasystems がこれを主要なリモート管理ツールとして採用した理由を示します。Run Command にかかる時間が短い – インスタンスへのセキュアな接続では、接続するジャンプボックス、ホワイトリストに登録する IP アドレスなど、いくつかのステップが必要です。Run Command では、クラウド Ops エンジニアはノートパソコンから直接コマンドを呼び出すことができ、キーやインスタンス ID を探す必要はありません。代わりに、システムセキュリティは AWS 認証、IAM ロールとポリシーに依存します。Run Command オペレーションは完全に監査される – SSH では、実行できる操作に実質的な制御はなく、監査証跡もありません。Run Command では、呼び出された各オペレーションは CloudTrail で監査されます。これには、呼び出し元のユーザーの情報、コマンドが実行されたインスタンス、パラメーター、およびオペレーションのステータスが含まれます。お客様は完全なコントロールを持ち、システムでエンジニアが実行できる機能を制限することができます。Run Command には管理する SSH キーがない – Run Command は標準の AWS 認証情報、API キー、および IAM ポリシーを利用します。エンジニアは、企業認証システムとの統合を通じて、企業の認証情報と ID に基づいてシステムとやり取りします。Run Command は同時に複数のシステムを管理できる – Linux サービスのステータスの確認や、マネージドインスタンスのフリート全体のログファイルの取得などの簡単なタスクでも、SSH を使用すると手間がかかります。Run Command では、ID またはタグでインスタンスのリストを指定し、指定したフリート全体に対して並行してコマンドを呼び出すことができます。これにより、最小の Pega クラスターよりも多くをトラブルシューティングまたは管理する場合に、高い利用価値が得られます。Run Command により複雑なタスクの自動化が簡単に – 操作タスクの標準化では、正確なコマンドを記述する詳細な手順のドキュメントやスクリプトが必要です。フリート全体でこうしたスクリプトを管理またはデプロイするのは面倒です。Run Command ドキュメントにより、複雑な関数をカプセル化し、ドキュメント管理とアクセスコントロールに対応するための簡単な方法が得られます。ドキュメントは、AWS Lambda と組み合わせると、複雑なタスクを処理するための強力なオートメーションプラットフォームを提供します。

例 – Docker コンテナの再起動
Docker コンテナの再起動に使用されるシンプルなドキュメントの例を示します。これには 1 つのパラメーター (再起動する Docker コンテナの名前) があります。ドキュメントは AWS-RunShellScript メソッドを使用してコマンドを呼び出します。出力はサービスにより自動的に収集され、呼び出し元に返されます。最新のドキュメントスキーマの例については、「Systems Manager ドキュメントの作成」を参照してください。

{
  "schemaVersion":"1.2",
  "description":"指定された Docker コンテナを再起動します。",
  "parameters":{
    "param":{
      "type":"String",
      "description":"(必須) 再起動するコンテナの名前。",
      "maxChars":1024
    }
  },
  "runtimeConfig":{
    "aws:runShellScript":{
      "properties":[
        {
          "id":"0.aws:runShellScript",
          "runCommand":[
            "docker restart {{param}}"
          ]
        }
      ]
    }
  }
}

 

Pegasystems での Run Command の実行
Pegasystems プロビジョニングシステムは、Pega Cloud リソースのデプロイと更新に使用される、AWS CloudFormation 上にあります。この最上位にあるのは Pega Provisioning エンジンです。これは CloudFormation テンプレートおよび Ansible 戦略のライブラリを管理する、サーバーレスで Lambda ベースのサービスです。設定管理データベース (CMDB) は各デプロイおよび更新のすべての設定詳細と履歴を追跡し、階層ディレクトリの命名規則を使用してデータをレイアウトします。次の図は、さまざまなシステムの統合方法を示しています。

クラウドシステム管理の場合、Pega オペレーションでは、 cuttysh と呼ばれるコマンドラインバージョンと、Pega Operations Portal と呼ばれる Pega 7 プラットフォームに基づくグラフィカルバージョンを使用します。両方のツールとも、Run Command を通じて、デプロイされた環境の CMDB の参照、設定の表示、デプロイされた EC2 インスタンスの操作が可能です。

CLI のウォークスルー
お客様のデプロイを調べ、Run Command を使用してインスタンスを操作する CLI のウォークスルーを示します。 cuttysh ツールを起動すると、CMDB のルートに移動し、プロビジョニングされたお客様のリストを表示できます。

% cuttysh
d CUSTA
d CUSTB
d CUSTC
d CUSTD

CMDB は、標準 Linux シェルコマンド ( cdlscat、および grep などを使用して操作できます。s という接頭辞が付く項目は、表示可能なプロパティを持つサービスです。d という接頭辞が付く項目は、CMDB 階層でナビゲート可能なサブディレクトリです。この例では、ディレクトリを CMDB 階層の顧客の CUSTB 部分に変更し、さらに Dev ネットワークの env1 というプロビジョニングされた Pega 環境に変更します。このツールは、その環境用にプロビジョニングされたアーティファクトを表示します。これらのエントリはプロビジョニングされた CloudFormation テンプレートにマッピングされます。

> cd CUSTB
/ROOT/CUSTB/us-east-1 > cd DEV/env1

ls –l コマンドは、プロビジョニングされたリソースのバージョンを表示します。これらのバージョン番号は、Pega Cloud のバージョンを構成する CloudFormation、Ansible、その他のコンポーネントのソース管理により管理されたアーティファクトにマッピングされます。

/ROOT/CUSTB/us-east-1/DEV/env1 > ls -l
s 1.2.5 RDSDatabase 
s 1.2.5 PegaAppTier 
s 7.2.1 Pega7 

ここで、Run Command を使用して、デプロイされた環境とやり取りします。これを行うには、attach コマンドを使用して、やり取りするサービスを指定します。次の例では、Pega ウェブ層にアタッチします。CLI は、CMDB およびインスタンスタグの情報を使用して、対応する EC2 インスタンスを見つけ、それに関するいくつかの基本情報を表示します。このデプロイには 3 つのインスタンスがあります。

/ROOT/CUSTB/us-east-1/DEV/env1 > attach PegaWebTier
 # ID         State  Public Ip    Private Ip  Launch Time
 0 i-0cf0e84 running 52.63.216.42 10.96.15.70 2017-01-16 
 1 i-0043c1d running 53.47.191.22 10.96.15.43 2017-01-16 
 2 i-09b879e running 55.93.118.27 10.96.15.19 2017-01-16 

ここから、 run コマンドを使用して Run Command ドキュメントを呼び出すことができます。次の例では、 docker-ps ドキュメントをインスタンス 0 (リストの最初のインスタンス) に対して実行できます。EC2 はコマンドを実行し、出力を CLI に返します。CLI はその出力を表示します。

/ROOT/CUSTB/us-east-1/DEV/env1 > run 0 docker-ps
. . 
CONTAINER ID IMAGE             CREATED      STATUS        NAMES
2f187cc38c1  pega-7.2         10 weeks ago  Up 8 weeks    pega-web

同じコマンドおよび定義されたその他のドキュメントの一部を使用して、Docker コンテナを再起動するか、ファイルのコンテンツをローカルシステムに戻すこともできます。ファイルを取得すると、Run Command は同僚にリンクを渡す場合に備えて、コピーを S3 バケット内に残します。

/ROOT/CUSTB/us-east-1/DEV/env1 > run 0 docker-restart pega-web
..
pega-web

/ROOT/CUSTB/us-east-1/DEV/env1 > run 0 get-file /var/log/cfn-init-cmd.log
. . . . . 
get-file

データはローカルに /tmp/get-file/i-0563c9e/data にコピーされました
データは S3 (s3://my-bucket/CUSTB/cuttysh/get-file/data) でも利用できます

ここで、Run Command の機能を利用して、一度に複数の操作を実行します。次の例では、デプロイに 3 つの実行中のインスタンスをアタッチし、各インスタンスの稼働時間を確認します。 par (parallel) オプション ( run 用) を使用して、CLI はすべてのインスタンスで並列で稼働時間ドキュメントを実行するよう Run Command に伝えます。

/ROOT/CUSTB/us-east-1/DEV/env1 > run par uptime
 …
Output for: i-006bdc991385c33
 20:39:12 up 15 days, 3:54, 0 users, load average: 0.42, 0.32, 0.30

Output for: i-09390dbff062618
 20:39:12 up 15 days, 3:54, 0 users, load average: 0.08, 0.19, 0.22

Output for: i-08367d0114c94f1
 20:39:12 up 15 days, 3:54, 0 users, load average: 0.36, 0.40, 0.40

コマンドが完了しました。
/ROOT/PEGACLOUD/CUSTB/us-east-1/PROD/prod1 > 

 

要約
Run Command は、システムへのアクセスを高速にして生産性を向上させ、インスタンスのグループに対してオペレーションを実行する機能を提供します。Pega Cloud のオペレーションは、他の操作ツールとともに Run Command を統合し、システム管理のためのクリーンでセキュアな方法を提供します。これにより、運用効率が向上し、管理されたデプロイでだれが何をできるかについて、より高度な管理が可能になります。Pega の継続的な改善プロセスにより、ユーザーがアクセスを必要とする理由が定期的に評価され、それらのオペレーションを、ライブラリに追加する新しい Run Command ドキュメントに変換します。その長期的な目標は、SSH を有効にしたクラウドシステムのデプロイを中止することにあります。ご不明の点またはご提案があれば、当社までコメントをお寄せください。

— Ananth および Rich