AWS Systems Manager ディストリビューターのパッケージを「シンプル」「アドバンスト」それぞれで作成してみた

AWS Systems Manager ディストリビューターのパッケージドキュメントを作成する際に必要な資材、手順について完璧に確認しました。

コンバンハ、千葉(幸)です。

AWS Systems Manager Distributor では、ソフトウェアをパッケージ化し、マネージドインスタンスに対して効率的に配布することができます。配布するパッケージを一元管理することで、複数のインスタンスにおけるソフトウェアのバージョンを統一化したり、ライフサイクルの管理を行うことが可能となります。

パッケージには AWS が用意しているものがいくつか存在するのですが、ユーザーが独自に作成することもできます。マネジメントコンソールから作成する際には「シンプル( Simple 、簡単)」「アドバンスト( Advanced 、高度)」の 2 パターンがあるので、それぞれどないなものなのか確認してみました。

目次

Systems Manager Distributor の仕組み

先に全体像を確認しておきましょう。以下のイメージです。

  • Systems Manager Distributor におけるパッケージは、SSM ドキュメントの一種であるパッケージドキュメントとして作成されます。
  • 初回のみ、 S3 バケットにアップロードした資材をこねこねすることで作成します。
  • パッケージドキュメントは以下のいずれかでマネジードインスタンスに配布されます
    • 一回限りの場合: Run Command
    • スケジュールで実施する場合:ステートマネージャー

パッケージドキュメントの材料

パッケージドキュメントを初回作成する際は、いくつかの資材を S3 バケットにアップロードする必要があります。内訳としては以下のようになっています。

  • 以下を含んだ zip ファイル
    • ソフトウェアファイル (rpm、msi、deb)
    • インストールスクリプト (install.sh、install.ps1)
    • アンインストールスクリプト (uninstall.sh、uninstall.ps1)
    • アップデートスクリプト (update.sh、update.ps1)
  • マニフェストファイル

zip ファイルについて補足します。

  • zip ファイルは OS のプラットフォームごとに作成する
  • パッケージファイルの作成には一つ以上の zip ファイルが必要
  • zip ファイル内のアップデートスクリプトは省略してもよい

例えば Windows 用の zip ファイルであれば、中身のソフウェアファイルは .msi を使用しますし、スクリプトは .ps1 を使用します。

アップデートスクリプトは、インスタンスにすでにインストール済みのソフトウェアに対して更新をかける場合に使用されます。

ディストリビューターによる更新のパターンとして以下2種類があり、後者を選択する場合にはパッケージドキュメントにアップデートスクリプトが含まれている必要があります。

  • Uninstall and reinstall (アンインストールと再インストール)
  • In-place update (インプレース更新)

マニフェストファイルは、パッケージドキュメントに含まれる zip ファイルのリストと、「プラットフォームやバージョンごとにどのファイルを適用するか」の定義内容が含む JSON 形式のファイルです。

サンプルのパッケージ

こちらに 公式で用意されたサンプルのパッケージがあります。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/samples/ExamplePackage.zip

中身を確認してみると、以下のようになっています。

tree ExamplePackage
ExamplePackage
├── ExamplePackage_AMAZON.zip
├── ExamplePackage_UBUNTU.zip
├── ExamplePackage_WINDOWS.zip
└── manifest.json

それぞれの zip ファイルを展開すると以下のようになります。

tree ExamplePackage
ExamplePackage
├── ExamplePackage_AMAZON
│   ├── install.sh
│   ├── powershell-7.0.0-1.rhel.7.x86_64.rpm
│   └── uninstall.sh
├── ExamplePackage_UBUNTU
│   ├── install.sh
│   ├── powershell_7.0.0-1.ubuntu.16.04_amd64.deb
│   └── uninstall.sh
├── ExamplePackage_WINDOWS
│   ├── PowerShell-7.0.0-win-x64.msi
│   ├── install.ps1
│   └── uninstall.ps1
└── manifest.json

各 プラットフォームに応じたインストール/アンインストールスクリプトと、ソフトウェアファイルとして PowerShell が含まれています。

マニフェストファイルの内訳は以下のような形になっています。説明のために一部コメントを入れます。

{
    "schemaVersion": "2.0",    # スキーマバージョン(固定で2.0)
    "version": "1.0.2",    # パッケージドキュメントのバージョン名
    "packages": {
        "windows": {    # プラットフォーム
            "_any": {    # プラットフォームのリリースバージョン
                "x86_64": {    # アーキテクチャ
                    "file": "ExamplePackage_WINDOWS.zip"
                }
            }
        },
        "amazon": {
            "_any": {
                "x86_64": {
                    "file": "ExamplePackage_AMAZON.zip"
                }
            }
        },
        "ubuntu": {
            "16.04": {
                "x86_64": {
                    "file": "ExamplePackage_UBUNTU.zip"
                }
            }
        }
    },
    "files": {    # zip ファイルのリスト
        "ExamplePackage_WINDOWS.zip": {
            "checksums": {
                "sha256": "6911820f48cf981a3ac92e3b2d0a50afaa17e313d2f8cf141f098e641639b353"
            }
        },
        "ExamplePackage_AMAZON.zip": {
            "checksums": {
                "sha256": "bc9ed30923c04c96b13358967c70a889c7fb12348604ee4990ed7fa1a3d5e1df"
            }
        },
        "ExamplePackage_UBUNTU.zip": {
            "checksums": {
                "sha256": "0e51e66bc4cb5b0dbdbdb94604d7e07e8487daf525aba3a3bdd27546a6672ee5"
            }
        }
    }
}

プラットフォームおよびアーキテクチャについては現在以下がサポートされています。

AWS Systems Manager Distributor - サポートされているパッケージのプラットフォームとアーキテクチャ

プラットフォーム マニフェストファイルのコード値 アーキテクチャ
Windows Server windows x86_64 または 386
Debian debian x86_64 または 386
Ubuntu Server ubuntu x86_64 または 386
arm64 (Ubuntu Server 16 以降では、A1 インスタンスタイプ)
Red Hat Enterprise Linux (RHEL) redhat x86_64 または 386
arm64 (RHEL 7.6 以降では、A1 インスタンスタイプ)
CentOS centos x86_64 または 386
Amazon Linux および Amazon Linux 2 amazon x86_64 または 386
arm64 (Amazon Linux 2 では、A1 インスタンスタイプ)
SUSE Linux Enterprise Server (SLES) suse x86_64 または 386
openSUSE opensuse x86_64 または 386
openSUSE Leap opensuseleap x86_64 または 386

プラットフォームのリリースバージョンについては、例えば以下のようなコマンドで確認できるものを指します。

Windows の場合。

wmic OS get /format:list

Linux ベースの場合。

cat /etc/os-release

zip ファイルのリストにおいては、 sha256 ハッシュ値チェックサムを併せて記載する必要があります。以下のようなコマンドで確認できます。

WIndowsの場合。(PowerShell)

Get-FileHash -Path <zipファイルのパス> 

Linux ベースの場合。

cat <zipファイル> | openssl dgst -sha256

これらの詳細は以下を確認してください。

パッケージを作成する - ステップ 2: JSON パッケージマニフェストを作成する

今回はこのサンプルパッケージを利用して、シンプルとアドバンスト両方の方式でパッケージドキュメントを作成していきます。

パッケージドキュメントの作成(シンプル)

参照する AWS ドキュメントは以下です。

パッケージを作成する - AWS Systems Manager

シンプルの方式で作成する場合、最低限ソフトウェアファイル手元に用意しておく必要があります。

マネジメントコンソールの AWS Systems Manager ディストリビューターの画面より、[ パッケージの作成 ] を押下します。

[ 簡単 ] を選択し、まずは以下を入力します。

  • パッケージドキュメント名
  • パッケージドキュメントのバージョン名(オプション)

シンプルで作成する場合、ソフトウェアファイルを S3 バケットにアップロードすることになります。アップロード先のバケット、プレフィックスを指定します。アップロード対象となるソフトウェアを [ ソフトウェアを追加 ] より選択します。

アップロードしたいファイルを選択すると、以下のように表示されます。それぞれ必要な情報を選択します。ここで選択した内容を基にマニフェストファイルが自動で生成されます。

  • ターゲットプラットフォーム
  • プラットフォームのバージョン
  • アーキテクチャ

ここではまとめて複数のソフトウェアをアップロードできます。(今回は一つのみのアップロードしてみます。)

選択したプラットフォームの情報を基に、インストールスクリプト、アンインストールスクリプトが自動で入力されています。ここで内容を修正することもできます。

アップデートスクリプトは自動で入力されないため、必要な場合はユーザー側で入力する必要があります。

ここまで選択した内容に応じて、自動的にマニフェストファイルが生成されています。ここでユーザーが編集することも可能です。

問題なければ、 [ パッケージの作成 ] を押下します。

マニフェストファイルと、ソフトウェアファイル、各種スクリプトが S3 バケットにアップロードされ、それを基にパッケージドキュメントが生成されます。

ファイルサイズによりますが、数分程度でアップロードが完了します。

作成されたパッケージドキュメントはこのような形で確認可能です。 [ アクセス許可 ] の部分から他の AWS アカウント番号を入力することで、アカウント間共有も可能です。

[ 追加情報 ] 部はこのような情報が記載されています。

パッケージドキュメントのバージョンを確認することもできます。バージョン名として指定したものが表示されています。 [ バージョンの追加 ] より、ドキュメントの新たなバージョンを追加することもできます。

ちなみに、パッケージを作成した段階でソフトウェアファイルなどの各種資材は Systems Manager の内部ストアに格納されているため、 S3 バケットから削除しても差し支えありません。

パッケージドキュメントの作成(アドバンスト)

続いてアドバンストの方式で作成するパターンを見ていきます。

シンプルの場合はコンソールからファイルをアップロード可能でしたが、アドバンストの場合 zip ファイルをあらかじめ S3 バケットにアップロードしておく必要があります。(場合によってはマニフェストファイルも必要です。)

パッケージの作成画面で [ 高度 ] を選び、名前とバージョン名を入力します。(マニフェストファイルで定義したバージョン名より、ここで入力したものが優先されます。)

zip ファイル(および場合によってはマニフェストファイル)をアップロードしてある S3 バケット、およびプレフィックスを指定します。今回はマニフェストファイルと3つの zip ファイルをあらかじめアップロード済みです。

マニフェストファイルを指定します。以下の2パターンから選択可能です。

  • パッケージからの抽出:S3 バケットに配置したものを読み込みます
    • コンソール上で修正も可能
  • 新しいマニフェスト:コンソール上で新規に入力します

これらを入力し終えたら、[ パッケージの作成 ] を押下します。

シンプルの場合は S3 へのアップロード処理を挟みましたが、アドバンストの場合はそのままパッケージドキュメントの作成処理に入ります。作成が完了するとこのように確認できます。

これでシンプル/アドバンストそれぞれでの作成方法が確認できました!

終わりに

AWS Systems Manager ディストリビューターのパッケージドキュメントの作成手順について確認しました。

従来はアドバンストに相当する方式しか無かったようですが、2019年7月のアップデートによりシンプル方式に対応したようです。シンプルで事足りるのであれば、そちらを採用した方が便利そうですね。

AWS Systems Manager Distributor によって、配信可能なソフトウェアパッケージの作成が簡単に

作成したパッケージドキュメントをディストリビューターにより配布する際にはどのような手順をとるのか?については別のエントリで記載されていますのでそちらをご参照ください。

ドキュメントで文字だけ見てもイメージわかん……という方の理解の一助になれば幸いです。

以上、ちばゆきがお送りしました。