【CloudWatch】オンプレ環境にssmエージェントをインストールする

AWS

任意のコマンドで監視するために、まずはオンプレサーバーにSSM Agentをインストールします。

今回もAnsibleでの実行を行いました。

大元のプレイブックはこちらをご覧ください。

AWS System Managerのアクティベーションコードの発行

  1. まずAWS System Managerのコンソールを開き、左ペインの「ノード管理」-「ハイブリッドアクティベーション」をクリックします。下のような画面が表示されるので、「アクティベーションの作成」をクリックします。

2. デフォルトのインスタンス名 だけサーバーのホスト名に変えて、他はデフォルトで「アクティベーションの作成」をクリック

3. 下の画像のように「Activation Code」と「Activation ID」が表示されるので、控えておきます。

参考:

ステップ 2: ハイブリッドおよびマルチクラウド環境用のハイブリッドアクティベーションを作成する - AWS Systems Manager
マネージドノードのアクティベーションを作成して、マネージドノードから Systems Manager サービスへの安全なアクセスを提供します。

SSMのインストールとアクティベート

アクティベーションコードの発行が終わったら、実際にサーバーにSSMをインストールしてアクティベートしていきます。

家のNUCにはCentOS 7 が入っているので、以下のような形になりました。

  • インストール用のプレイブック
# install_ssm.yml

- name: confirm exists ssm rpm
  stat:
    path: /tmp/amazon-ssm-agent.rpm
  register: ssm_rpm

- name: ssm rpm download
  get_url:
    url: https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm
    dest: /tmp
  when: ssm_rpm.stat.exists  == false

- name: install ssm agent (yum)
  become: yes 
  yum: 
    name:
     - /tmp/amazon-ssm-agent.rpm
    state: present
  when: ssm_rpm.stat.exists  == false
  check_mode: no
  notify: ssm activate

CloudWatch Agentと同じように、get_urlでrpmを取得してきたあと、yumモジュールでインストールしています。

インストールが行われたならhandlerのssm activateを呼ぶようにしています。

  • handler
- name: ssm activate
  become: yes
  shell: |
    systemctl stop amazon-ssm-agent &&
      amazon-ssm-agent -register \
      -code "{{ ssm_activation_code }}" \
      -id "{{ ssm_activation_id }}" \
      -region "ap-northeast-1" &&
      systemctl start amazon-ssm-agent
      

公式ページのインストールコマンドに従って、ssm-agentの停止、アクティベート、起動を行っています。

group_varsの方で、ssm_activation_codeとssm_activation_idを先ほど控えたものを設定しておいて、こちらで読み込んでいます。

参考:

ステップ 3: ハイブリッドおよびマルチクラウド環境 (Linux) に SSM Agent をインストールする - AWS Systems Manager
ハイブリッドおよびマルチクラウド環境の非 EC2 Linux マシンに SSM Agent をインストールします。

プライベートキーの自動ローテーション設定

アクティベートした後のプライベートキーは、自動ローテーションが設定できるようなのでこちらも設定します。

ssmをインストールした後に出来る amazon-ssm-agent.json.templateをAnsible実行端末側にもってきて、そちらを書き換えてAnsibleでコピーしています。

- name: config ssm
  become: yes
  copy:
    src: amazon-ssm-agent.json
    dest: /etc/amazon/ssm/amazon-ssm-agent.json 
  notify:
    - Restart ssm daemon

handlerではただデーモンを再起動しているだけです。

- name: Restart ssm daemon
  become: yes
  service:
    name: amazon-ssm-agent
    state: restarted

amazon-ssm-agent.json はこのようにしています。

ローテーションの設定として、ProfileのKeyAutoRotateDaysを1に変えているだけです。(デフォルト0)

{
    "Profile":{
        "ShareCreds" : true,
        "ShareProfile" : "",
        "ForceUpdateCreds" : false,
        "KeyAutoRotateDays": 1
    },
    "Mds": {
        "CommandWorkersLimit" : 5,
        "StopTimeoutMillis" : 20000,
        "Endpoint": "",
        "CommandRetryLimit": 15
    },
    "Ssm": {
        "Endpoint": "",
        "HealthFrequencyMinutes": 5,
        "CustomInventoryDefaultLocation" : "",
        "AssociationLogsRetentionDurationHours" : 24,
        "RunCommandLogsRetentionDurationHours" : 336,
        "SessionLogsRetentionDurationHours" : 336,
        "PluginLocalOutputCleanup": "",
        "OrchestrationDirectoryCleanup": ""
    },
    "Mgs": {
        "Region": "",
        "Endpoint": "",
        "StopTimeoutMillis" : 20000,
        "SessionWorkersLimit" : 1000
    },
    "Agent": {
        "Region": "",
        "OrchestrationRootDir": "",
        "SelfUpdate": false,
        "TelemetryMetricsToCloudWatch": false,
        "TelemetryMetricsToSSM": true,
        "AuditExpirationDay" : 7,
        "LongRunningWorkerMonitorIntervalSeconds": 60
    },
    "Os": {
        "Lang": "en-US",
        "Name": "",
        "Version": "1"
    },
    "S3": {
        "Endpoint": "",
        "Region": "",
        "LogBucket":"",
        "LogKey":""
    },
    "Kms": {
        "Endpoint": ""
    }
}

まとめ

これで一応コマンド等を実行できる環境が整いました。

RunCommandで任意のコマンド実行結果をCloudWatchで監視するまでもう一息です。。。

この記事を書いた人

渋谷で働くよわよわエンジニア。TypeScript(Next.js/Node.js)/Golang/AWS/Flutterなど
LINE API Expert(2023/1~)

tokkuをフォローする
オススメ記事
在宅ワークが多くなって、デスクの配線周りに困っている方は、拡張デスクの導入がおすすめです。Windows/MacOS/Linuxの複数の機器をスッキリとデスク周りに収める事ができました!リモートからサーバーメンテを行うインフラエンジニアは必見です!
AWS
tokkuをフォローする
インフラエンジニアがもがくブログ

コメント

タイトルとURLをコピーしました