

# スクリプト管理
<a name="scripts-management"></a>

AWS での Cloud Migration Factory ソリューションにより、ユーザーはユーザーインターフェイス内の自動化スクリプトやパッケージのライブラリを完全に管理できます。スクリプト管理インターフェイスを使用して、新しいカスタムスクリプトと新しいバージョンのスクリプトをアップロードできます。複数のバージョンがある場合、管理者はこれらのバージョンを切り替えることができるため、デフォルトにする前に更新をテストできます。スクリプト管理インターフェイスでは、管理者がスクリプトパッケージをダウンロードして内容を更新したり確認したりすることもできます。

サポートされているスクリプトパッケージは、ルートに以下の必須ファイルを含む圧縮された ZIP アーカイブです。
+  **Package-Structure.yml** — スクリプトの引数や、説明やデフォルト名などの他のメタデータを定義するために使用されます。詳細については、「[新しいスクリプトパッケージの作成](#composing-a-new-script-package)」を参照してください。
+  **[custom python script].py** — これはジョブが送信されるときに実行される最初のスクリプトです。このスクリプトは他のスクリプトやモジュールを呼び出すことができるので、その場合はそれらをアーカイブに含める必要があります。このスクリプトの名前は、`Package-Structure.yml` の `MasterFileName` キーで指定された値と一致する必要があります。

## コンピューティングプラットフォームの設定
<a name="compute-platform-configuration"></a>

自動化スクリプトの実行には 2 つのコンピューティングプラットフォームを使用できます。\$1 「SSM 自動化ドキュメント」 - 自動化サーバーを必要とせずにスクリプトを AWS Systems Manager Automation ドキュメントとして直接実行します。\$1 「自動化サーバー」 - 専有の自動化サーバーインスタンスでスクリプトを実行します (指定しない場合のデフォルトのプラットフォームです)。

スクリプト実行用のコンピューティングプラットフォームは `Package-Structure.yml` ファイルで定義されます。直接的な SSM ベースの自動化の場合は、`MasterFileName` の後に次の行を追加します: `ComputePlatform: "SSM Automation Document"` 

## 新しいスクリプトパッケージをアップロードする
<a name="upload-new-script-package"></a>

**注記**  
スクリプトパッケージは、サポートされている形式に準拠している必要があります。詳細については、「[新しいスクリプトパッケージの作成](#composing-a-new-script-package)」を参照してください。

1. **[自動化スクリプト]** テーブルで、**[追加]** を選択します。

1. アップロードするパッケージアーカイブファイルを選択します。

1. スクリプトの一意の名前を入力します。ユーザーはこの名前でスクリプトを参照してジョブを開始します。

## スクリプトパッケージをダウンロードする
<a name="download-script-packages"></a>

スクリプトパッケージをコンソールからダウンロードして、アップデートとコンテンツ検証を有効化できます。

1. **[オートメーション]**、**[スクリプト]** の順に選択します。

1. ダウンロードするスクリプトをテーブルから選択し、**[アクション]** を選択してから、**[デフォルトバージョンをダウンロードする]** または **[最新バージョンをダウンロードする]** を選択します。

特定のバージョンのスクリプトをダウンロードできます。そのためには、スクリプト、**[アクション]** の順に選択し、**[デフォルトバージョンを変更する]** を選択します。**[スクリプト (デフォルトバージョン)]** リストから、**[選択したバージョンをダウンロードする]** を選択します。

## スクリプトパッケージの新しいバージョンを追加する
<a name="add-new-version-of-a-script-package"></a>

AWS Cloud Migration Factory スクリプトパッケージに対する更新は、次の手順で **[オートメーション]** > **[スクリプト]** セクションにアップロードできます。

1. **[オートメーション]**、**[スクリプト]** の順に選択します。

1. 既存のスクリプトを選択して新しいバージョンを追加し、**[アクション]**、**[新しいバージョンを追加]** の順に選択します。

1. アップロードするパッケージアーカイブファイルを選択して、**[次へ]** を選択します。新しいスクリプトバージョンでは、デフォルトで既存の名前が保持されます。一意のスクリプト名を入力します。名前を変更した場合、このバージョンのスクリプトにのみ適用されます。

1. **[デフォルトバージョンにする]** を選択すると、新しいバージョンのスクリプトをデフォルトバージョンに設定できます。

1. **アップロード** を選択します。

## スクリプトパッケージとバージョンを削除する
<a name="deleting-script-packages-and-versions"></a>

監査目的でスクリプトやスクリプトのバージョンを削除することはできません。これにより、ある時点でシステムに対して実行されたスクリプトを正確に確認することができます。すべてのスクリプトバージョンには、アップロード時に固有の署名と ID が割り当てられます。これらの署名と ID は、そのスクリプトとバージョンが使用されたジョブ履歴と照合して記録されます。

## 新しいスクリプトパッケージの作成
<a name="composing-a-new-script-package"></a>

AWS での Cloud Migration Factory スクリプトパッケージでは、Python を主要なスクリプト言語としてサポートします。Python のメインプログラムまたはラッパー内から、必要に応じて他のシェルスクリプト言語を起動できます。新しいスクリプトパッケージをすばやく作成するには、あらかじめパッケージ化されているスクリプトの 1 つをダウンロードし、必要なタスクを実行するように更新することをお勧めします。まず、スクリプトのコア機能を実行するマスター Python スクリプトを作成する必要があります。次に、`Package-Structure.yml` ファイルを作成して、スクリプトに必要な引数やその他のメタデータを定義します。詳細については、`Package-Structure.yml` オプションを参照してください。

### メインの Python スクリプト
<a name="main-python-script"></a>

これはジョブの開始時に実行される最初のメインスクリプトです。スクリプトの実行が完了すると、タスクは終了し、最後のリターンコードによってジョブのステータスが決まります。このスクリプトからのすべての出力は、リモートで実行されるとキャプチャされ、参照用にジョブの出力監査ログに渡されます。このログは Amazon CloudWatch にも保存されます。

#### AWS での Cloud Migration Factory データおよびスクリプトからの API にアクセスする
<a name="accessing-cloud-migration-factory-on-aws-data-and-apis-from-a-script"></a>

AWS での Cloud Migration Factory API とデータにアクセスするには、付属の python ヘルパーモジュールを使用できます。モジュールは、開始するための主要な関数として以下のメイン関数を提供します。

 `factory_login` 

AWS での Cloud Migration Factory API を呼び出すのに使用できるアクセストークンを返します。この関数は、認証情報を何度も試して CMF へのログインを試みます。

1. サービスアカウントのユーザ ID とパスワードを含むデフォルトシークレットが存在し、かつアクセスが許可されている場合は、そのシークレットへのアクセスを試みる。このシークレット名 **MFServiceAccount-[`userpool id`]** がチェックされます。

1. ステップ 1 が失敗し、ユーザーがコマンドラインからスクリプトを実行している場合、ユーザーは AWS での Cloud Migration factory のユーザ ID とパスワードを入力するよう求められます。リモート自動化ジョブから実行すると、ジョブは失敗します。

 `get_server_credentials` 

認証情報マネージャーまたはユーザー入力で AWS Cloud Migration Factory のいずれかに格納されているサーバーのログイン認証情報を返します。この関数は、さまざまなソースをチェックして特定のサーバーの認証情報を判断します。ソースの順序は次のとおりです。

1. local\$1username と local\$1password が設定されていて有効であれば、これらが返されます。

1. secret\$1overide が設定されている場合、これを使用して AWS Secret Manager から指定されたシークレットを取得します。そうでない場合は、サーバーレコードにキー **secret\$1name** が含まれているかどうかをチェックします。空欄でない場合は、このシークレット名が使われます。

1. 指定されたシークレットの検索またはアクセスに失敗した場合、関数はユーザーに認証情報の入力を求めるようにフォールバックしますが、これは、**no\$1user\$1prompts** が **False** に設定されている場合に限り、それ以外の場合は失敗を返します。

 **パラメータ** 

local\$1username — 渡された場合は返されます。

local\$1password — 渡された場合は返されます。

server – AWS Cloud Migration Factory で get\$1factory\$1servers から返される CMF サーバー辞書。

secret\$1overide — これを渡すと、これがこのサーバー向けに Secrets Manager から取得するシークレット名が設定されます。

no\$1user\$1prompts — ユーザーにユーザー ID とパスワードの入力を求めないように関数に指示します。保存されていない場合、これはどのリモート自動化スクリプトでも True になります。

 `get_credentials` 

Secrets Manager からの AWS Cloud Migration Factory 認証情報マネージャーを使って保存された認証情報を取得します。

 **パラメータ** 

secret\$1name — 取得するシークレットの名前。

get\$1factory\$1servers

提供された waveid に基づいて、AWS Cloud Migration Factory データストアからサーバー配列を返します。

 **パラメータ** 

waveid — 返されるサーバーのウェーブレコード ID。

token — Lambda 関数の FactoryLogin から取得された認証トークン。

app\$1ids – 含めるウェーブ内のアプリケーション ID のオプションリスト。

server\$1ids – 含めるウェーブおよびアプリケーション内のサーバー ID のオプションリスト。

os\$1split — `true` に設定すると、Linux サーバー用と Windows サーバー用の 2 つのリストが返されます。False に設定すると、1 つの結合されたリストが返されます。

rtype – サーバーの特定の移行戦略のみをフィルタリングするオプションの文字列。つまり、値「Rehost」を渡すと、Rehost を持つサーバーのみが返されます。

#### 最終メッセージ概要
<a name="final-message-summary"></a>

画面または sysout への最終出力として、スクリプトの結果の概要メッセージを提供することをお勧めします。これは、**[最終メッセージ]** プロパティのコンソールの画面に表示されます。これは、ユーザーが出力ログ全体を読まなくても、スクリプトの結果のステータスをすばやく表示します。

#### リターンコード
<a name="return-code"></a>

メインの Python スクリプトは、スクリプトの関数が完全に成功しなかった場合、終了時に 0 以外のリターンコードを返す必要があります。0 以外のリターンコードを受け取ると、ジョブのステータスは、ジョブログで**失敗**と表示されます。これは、出力ログで障害の詳細を確認する必要があることをユーザーに伝えます。

### YAML Package-Structure.yml オプション
<a name="package-structure.yml-options"></a>

#### YAML ファイルの例
<a name="example"></a>

```
Name: "0-Check MGN Prerequisites"
Description: "This script will verify the source servers meet the basic requirements for AWS MGN agent installation."
MasterFileName: "0-Prerequisites-checks.py"
UpdateUrl: ""
Arguments:
-
name: "ReplicationServerIP"
description: "Replication Server IP."
long_desc: "IP Address of an AWS MGN Replication EC2 Instance."
type: "standard"
required: true
-
name: "SecretWindows"
long_desc: "Windows Secret to use for credentials."
description: "Windows Secret"
type: "relationship"
rel_display_attribute: "Name"
rel_entity: "secret"
rel_key: "Name"
-
name: "SecretLinux"
long_desc: "Linux Secret to use for credentials."
description: "Linux Secret"
type: "relationship"
rel_display_attribute: "Name"
rel_entity: "secret"
rel_key: "Name"
-
name: "Waveid"
description: "Wave Name"
type: "relationship"
rel_display_attribute: "wave_name"
rel_entity: "wave"
rel_key: "wave_id"
validation_regex: "^(?!\\s*$).+"
validation_regex_msg: "Wave must be provided."
required: true
SchemaExtensions:
-
schema: "server"
name: "server_pre_reqs_output"
description: "Pre-Req Output"
type: "string"
```

#### YAML キーの説明
<a name="keys"></a>

必須

 **Name** — スクリプトがインポート時に使用するデフォルト名。

 **Description** — スクリプトの使用法の説明。

 **MasterFileName** — これがスクリプトの実行の開始点です。スクリプトパッケージアーカイブに含まれている Python ファイル名である必要があります。

 **Arguments** — MasterFileName Python スクリプトが受け入れる引数のリスト。指定された各引数のニーズは、AWS Cloud Migration Factory 属性定義形式です。各引数に必要なプロパティは、**[名前]** と **[タイプ]** であり、その他のプロパティはすべてオプションです。

オプションです。

 **ComputePlatform** - このキーは、スクリプトを実行する場所を定義します。自動化サーバーを使用せずに AWS Systems Manager で直接実行するには、[SSM 自動化ドキュメント] に設定します。設定しない場合は、デフォルトで自動化サーバーで実行されます。

 **UpdateUrl** — 更新を提供するためにスクリプトパッケージのソースが参照できる URL を指定します。現在のところ、これは参照専用です。

 **SchemaExtensions** — 出力を保存したり追加データを取得したりするために Python スクリプトがスキーマに含める必要がある属性のリスト。各属性は AWS CMF 属性定義形式で指定する必要があります。各属性に必要なプロパティは、**[スキーマ]**、**[名前、説明]** そして **[タイプ]** です。その他のプロパティはすべてオプションです。新しい属性はスクリプトが最初に読み込まれるときに自動的にスキーマに追加され、SchemaExtensions への変更はスクリプトの新しいバージョンでは処理されません。新しいスクリプトを追加するためにこれが必要な場合は、スキーマを手動で更新する必要があります。