OS設定を一発で確認するためのSSMドキュメントを作ってみた(Amazon Linux2)

EC2 の構築に合わせて最低限の OS 設定をする事が多いのですが、設定内容をチェックする際に毎回コマンドを調べたりするのが面倒だったので、RunCommand 一発で一通り確認するための SSM ドキュメントを作ってみました。
2020.03.25

こんにちは、大前です。

EC2 の構築に合わせて最低限の OS 設定をする事が多いのですが、設定内容をチェックする際に毎回コマンドを調べたりするのが面倒だったので、RunCommand 一発で一通り確認するための SSM ドキュメントを作ってみました。

SSM が使用できる事が前提ではありますが、SSM ドキュメントを改修すればいくらでも応用が効くと思いますので、よければご活用ください。

また、対象 OS は Amazon Linux2 となります。

今回作ったもの

今回は以下をチェックするドキュメントを作成しました。

  • ホスト名
  • タイムゾーン
  • 言語設定
  • yum アップデートの有無
  • 時刻同期状況

作成ドキュメント

作成したドキュメントは以下になります。

特に難しいことはしていないので、基本的な知識がある方であればいい感じにアレンジできるかと思います。

---
schemaVersion: '2.2'
description: Check OS Setting.
parameters:
  hostname:
    type: String
    default: "check"
    description: "ホスト名の確認有無を選択してください。"
    allowedValues:
    - check
    - skip
  timezone:
    type: String
    default: "check"
    description: "タイムゾーンの確認有無を選択してください。"
    allowedValues:
    - check
    - skip
  locale:
    type: String
    default: "check"
    description: "言語設定の確認有無を選択してください。"
    allowedValues:
    - check
    - skip
  update:
    type: String
    default: "check"
    description: "yumアップデートの確認有無を選択してください。"
    allowedValues:
    - check
    - skip
  ntp:
    type: String
    default: "check"
    description: "時刻同期状況の確認有無を選択してください。"
    allowedValues:
    - check
    - skip
mainSteps:
  - action: aws:runShellScript
    name: hostname
    inputs:
      runCommand:
      - if [[ {{ hostname }} == "check" ]]; then hostname ; fi
      - if [[ {{ hostname }} == "skip" ]]; then echo "Do not check hostname" ; fi
  - action: aws:runShellScript
    name: timezone
    inputs:
      runCommand:
      - if [[ {{ timezone }} == "check" ]]; then timedatectl status ; fi
      - if [[ {{ timezone }} == "skip" ]]; then echo "Do not check timezone" ; fi
  - action: aws:runShellScript
    name: locale
    inputs:
      runCommand:
      - if [[ {{ locale }} == "check" ]]; then localectl status ; fi
      - if [[ {{ locale }} == "skip" ]]; then echo "Do not check locale" ; fi
  - action: aws:runShellScript
    name: update
    inputs:
      runCommand:
      - if [[ {{ update }} == "check" ]]; then yum check-update ; fi
      - if [[ {{ update }} == "skip" ]]; then echo "Do not check yum update" ; fi
  - action: aws:runShellScript
    name: ntp
    inputs:
      runCommand:
      - if [[ {{ ntp }} == "check" ]]; then chronyc sources ; fi
      - if [[ {{ ntp }} == "skip" ]]; then echo "Do not check ntp status" ; fi

ドキュメントの作成方法

ドキュメントの作成方法を説明します。

AWS Systems Manager 画面の下部から「ドキュメント」を選択

「Create Command or session」を選択

"名前"、"ターゲットタイプ"、"ドキュメントタイプ" を入力/選択します

  • 名前 ... check-al2 ※ご自由に
  • ターゲットタイプ ... /AWS::EC2::Instance
  • ドキュメントタイプ ... コマンドドキュメント

"コンテンツ" にて YAML を選択し、上記ドキュメントを貼り付ければ、作成完了です。

使ってみた

実際に、作成したドキュメントを使用してみたいと思います。

※事前に Amazon Linux2 の EC2 インスタンスを起動し、適当な初期設定を行っておきます。

AWS Systems Manager 画面より Run Command ページを開いたら、「Run Command」を選択

ドキュメントの検索欄に先ほど作成したドキュメント名を入力し、表示されたドキュメントを選択。

コマンドのパラメータを必要に応じて選択します。今回は全てチェックしたいのでこのまま進みます。

チェック対象のインスタンスを選択し、実行します。

しばらく待つと、成功になりました!

図の様に、チェック項目ごとに出力結果が別れて表示されます。

例えば、ステップ1(hostname)の出力結果を開くとちゃんとホスト名が表示されている事が確認できました。

終わりに

OS 設定を一発で確認するための SSM ドキュメントを作成してみました。

色々と応用が効くと思いますので、よければご活用ください。

以上、AWS 事業本部の大前でした。

参考