

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Image Builder を使用したカスタムコンポーネントの作成
<a name="create-component"></a>

コンポーネントドキュメントが完成したら、それを使用して、Image Builder レシピで使用できるカスタムコンポーネントを作成できます。カスタムコンポーネントは、Image Builder コンソール、API か SDK、またはコマンドラインから作成できます。入力パラメータを持つカスタムコンポーネントを作成してレシピで使用する方法の詳細については、「[チュートリアル: 入力パラメータを持つカスタムコンポーネントを作成する](tutorial-component-parameters.md)」を参照してください。

以下のセクションでは、コンソールまたは AWS CLIからコンポーネントを作成する方法を示します。

**Topics**
+ [コンソールでのカスタムモデルコンポーネントの作成](#create-component-ib-console)
+ [からカスタムコンポーネントを作成する AWS CLI](#create-component-ib-cli)
+ [スクリプトをインポートして からコンポーネントを作成する AWS CLI](#import-component-cli)
+ [自動ビルドバージョン管理](#auto-build-version-management)
+ [バージョンリファレンスの使用](#using-version-references)

## コンソールでのカスタムモデルコンポーネントの作成
<a name="create-component-ib-console"></a>

Image Builder コンソールから AWSTOE アプリケーションコンポーネントを作成するには、次の手順に従います。

1. [https://console.aws.amazon.com/imagebuilder/](https://console.aws.amazon.com/imagebuilder/) で、EC2 Image Builder コンソールを開きます。

1. ナビゲーションペインから **コンポーネント** を選択します。次に **コンポーネントを作成** を選択します。

1. 「**コンポーネントの作成**」ページの「**コンポーネントの詳細**」で、次のように入力します。

   1. **イメージオペレーティングシステム (OS)**。コンポーネントと互換性のあるオペレーティングシステムを指定します。

   1. **コンポーネントカテゴリ**。ドロップダウンから、作成するビルドコンポーネントまたはテストコンポーネントのタイプを選択します。

   1. **コンポーネント名**。コンポーネントの名前を入力します。

   1. **コンポーネントのバージョン**。コンポーネントのバージョン番号を入力します。

   1. **説明**。ジョブの説明を追加して、ジョブを識別することも可能です。

   1. **説明の変更**。このバージョンのコンポーネントに加えられた変更点を理解しやすいように、オプションで説明を入力します。

1. 「**定義文書**」セクションのデフォルトオプションは「**文書コンテンツの定義**」です。コンポーネントドキュメントは、イメージを作成するために Image Builder がビルドインスタンスとテストインスタンスで実行するアクションを定義します。

   「**コンテンツ**」ボックスに、YAML コンポーネントドキュメントの内容を入力します。Linux 用の Hello World サンプルから始めるには、「**サンプルを使用する**」オプションを選択します。YAML コンポーネントドキュメントの作成方法や、そのページから UpdateOS サンプルをコピーして貼り付ける方法について詳しくは、[Image Builder でのカスタムコンポーネント用 YAML コンポーネントドキュメントの作成](create-component-yaml.md)を参照してください。

1. コンポーネントの詳細を入力したら、「**コンポーネントを作成**」を選択します。
**注記**  
レシピを作成または更新するときに新しいコンポーネントを表示するには、ビルドまたはテスト用のコンポーネントリストに **Owned by me** フィルタを適用します。フィルタは、コンポーネントリストの上部にある、検索ボックスの横にあります。

1. コンポーネントを削除するには、**コンポーネント** ページで、削除するコンポーネントの横にあるチェックボックスをオンにします。** Actions ** （アクション）ドロップダウンから** Deploy API **( デプロイAPI ）を選択します。

**コンポーネントの更新**  
新しいコンポーネントバージョンを作成するには、次の手順に従います。

1. どこから始めるかによって:
   + **コンポーネント**リストページから — コンポーネント名の横にあるチェックボックスを選択し、「**アクション**」メニューから「**新規バージョンを作成**」を選択します。
   + コンポーネントの詳細ページから — 見出しの右上隅にある **新規バージョンを作成** ボタンをクリックします。

1. 「**Create Component**」ページが表示されると、コンポーネント情報には現在の値が既に入力されています。「コンポーネントを作成」の手順に従って、コンポーネントを更新します。これにより、**コンポーネントバージョン**には固有のセマンティックバージョンを確実に入力できます。Image Builder リソースのセマンティックバージョニングの詳細については、[Image Builder でのセマンティックバージョニング](ibhow-semantic-versioning.md)を参照してください。

## からカスタムコンポーネントを作成する AWS CLI
<a name="create-component-ib-cli"></a>

このセクションでは、次のように、 で Image Builder コマンドをセットアップして使用 AWS CLI して AWSTOE アプリケーションコンポーネントを作成する方法について説明します。
+ YAML コンポーネントドキュメントを S3 バケットにアップロードし、コマンドラインから参照できるようにします。
+ **create-component** コマンドを使用して AWSTOE アプリケーションコンポーネントを作成します。
+ **list-components**コマンドと名前フィルタを使用してコンポーネントのバージョンを一覧表示し、既に存在するバージョンを確認します。この出力を使用して、更新に必要な次のバージョンを決定できます。

入力 YAML ドキュメントから AWSTOE アプリケーションコンポーネントを作成するには、イメージオペレーティングシステムプラットフォームに一致するステップに従います。

------
#### [ Linux ]

**アプリケーションコンポーネントドキュメントを Amazon S3 に保存する**

S3 バケットは、 AWSTOE アプリケーションコンポーネントのソースドキュメントのリポジトリとして使用できます。コンポーネントドキュメントを保存するには、次の手順に従います。
+ 

**ドキュメントを Amazon S3 にアップロードする**

  ドキュメントが 64 KB 未満の場合は、このステップをスキップできます。64 KB とその以上のサイズのドキュメントは Amazon S3 に保存する必要があります。

  ```
  aws s3 cp update-linux-os.yaml s3://amzn-s3-demo-destination-bucket/my-path/update-linux-os.yaml
  ```

**YAML ドキュメントからコンポーネントを作成する**

で使用する**create-component**コマンドを効率化するには AWS CLI、コマンドに渡すすべてのコンポーネントパラメータを含む JSON ファイルを作成します。前の手順で作成した `update-linux-os.yaml` ドキュメントの場所を含めてください。`uri`キー値のペアには、ファイル参照が含まれます。
**注記**  
JSON ファイル内のデータ値の命名規則は、Image Builder API オペレーションリクエストパラメータに指定されているパターンに従います。API コマンドリクエストパラメータを確認するには、EC2 Image Builder API リファレンスの [CreateComponent](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateComponent.html) コマンドを参照してください。  
データ値をコマンドラインパラメータとして指定するには、AWS CLI コマンドリファレンスで指定されているパラメータ名を参照してください。

1. 

**CLI 入力 JSON ファイルの作成**

   ファイル編集ツールを使用して、`create-update-linux-os-component.json` という名前のファイルを作成します。次の内容を含めます:

   ```
   {
   	"name": "update-linux-os",
   	"semanticVersion": "1.1.2",
   	"description": "An example component that updates the Linux operating system",
   	"changeDescription": "Initial version.",
   	"platform": "Linux",
   	"uri": "s3://amzn-s3-demo-destination-bucket/my-path/update-linux-os.yaml",
   	"kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/98765432-b123-456b-7f89-0123456f789c",
   	"tags": {
   		"MyTagKey-purpose": "security-updates"
   	}
   }
   ```

1. 

**コンポーネントを作成する**

   以下のコマンドを使用して、前のステップで作成した JSON ファイルのファイル名を参照してコンポーネントを作成します。

   ```
   aws imagebuilder create-component --cli-input-json file://create-update-linux-os-component.json
   ```
**注記**  
JSON ファイルパスの先頭に `file://` 表記を含める必要があります。
JSON ファイルのパスは、コマンドを実行するベースオペレーティングシステムに適した規則に従う必要があります。例えば、Windows ではディレクトリパスを表すためにバックスプラッシュ (\$1) が使用され、Linux と macOS ではフォーワードスラッシュ (/) が使用されます。

------
#### [ Windows ]

**アプリケーションコンポーネントドキュメントを Amazon S3 に保存する**

S3 バケットは、 AWSTOE アプリケーションコンポーネントのソースドキュメントのリポジトリとして使用できます。コンポーネントドキュメントを保存するには、次の手順に従います。
+ 

**ドキュメントを Amazon S3 にアップロードする**

  ドキュメントが 64 KB 未満の場合は、このステップをスキップできます。64 KB とその以上のサイズのドキュメントは Amazon S3 に保存する必要があります。

  ```
  aws s3 cp update-windows-os.yaml s3://amzn-s3-demo-destination-bucket/my-path/update-windows-os.yaml
  ```

**YAML ドキュメントからコンポーネントを作成する**

で使用する**create-component**コマンドを効率化するには AWS CLI、コマンドに渡すすべてのコンポーネントパラメータを含む JSON ファイルを作成します。前の手順で作成した `update-windows-os.yaml` ドキュメントの場所を含めてください。`uri`キー値のペアには、ファイル参照が含まれます。
**注記**  
JSON ファイル内のデータ値の命名規則は、Image Builder API オペレーションリクエストパラメータに指定されているパターンに従います。API コマンドリクエストパラメータを確認するには、EC2 Image Builder API リファレンスの [CreateComponent](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateComponent.html) コマンドを参照してください。  
データ値をコマンドラインパラメータとして指定するには、AWS CLI コマンドリファレンスで指定されているパラメータ名を参照してください。

1. 

**CLI 入力 JSON ファイルの作成**

   ファイル編集ツールを使用して、`create-update-windows-os-component.json` という名前のファイルを作成します。次の内容を含めます:

   ```
   {
   	"name": "update-windows-os",
   	"semanticVersion": "1.1.2",
   	"description": "An example component that updates the Windows operating system.",
   	"changeDescription": "Initial version.",
   	"platform": "Windows",
   	"uri": "s3://amzn-s3-demo-destination-bucket/my-path/update-windows-os.yaml",
   	"kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/98765432-b123-456b-7f89-0123456f789c",
   	"tags": {
   		"MyTagKey-purpose": "security-updates"
   	}
   }
   ```
**注記**  
JSON ファイルパスの先頭に `file://` 表記を含める必要があります。
JSON ファイルのパスは、コマンドを実行するベースオペレーティングシステムに適した規則に従う必要があります。例えば、Windows ではディレクトリパスを表すためにバックスプラッシュ (\$1) が使用され、Linux と macOS ではフォーワードスラッシュ (/) が使用されます。

1. 

**コンポーネントを作成する**

   以下のコマンドを使用して、前のステップで作成した JSON ファイルのファイル名を参照してコンポーネントを作成します。

   ```
   aws imagebuilder create-component --cli-input-json file://create-update-windows-os-component.json
   ```
**注記**  
JSON ファイルパスの先頭に `file://` 表記を含める必要があります。
JSON ファイルのパスは、コマンドを実行するベースオペレーティングシステムに適した規則に従う必要があります。例えば、Windows ではディレクトリパスを表すためにバックスプラッシュ (\$1) が使用され、Linux と macOS ではフォーワードスラッシュ (/) が使用されます。

------
#### [ macOS ]

**アプリケーションコンポーネントドキュメントを Amazon S3 に保存する**

S3 バケットは、 AWSTOE アプリケーションコンポーネントのソースドキュメントのリポジトリとして使用できます。コンポーネントドキュメントを保存するには、次の手順に従います。
+ 

**ドキュメントを Amazon S3 にアップロードする**

  ドキュメントが 64 KB 未満の場合は、このステップをスキップできます。64 KB とその以上のサイズのドキュメントは Amazon S3 に保存する必要があります。

  ```
  aws s3 cp wget-macos.yaml s3://amzn-s3-demo-destination-bucket/my-path/wget-macos.yaml
  ```

**YAML ドキュメントからコンポーネントを作成する**

で使用する**create-component**コマンドを効率化するには AWS CLI、コマンドに渡すすべてのコンポーネントパラメータを含む JSON ファイルを作成します。前の手順で作成した `wget-macos.yaml` ドキュメントの場所を含めてください。`uri`キー値のペアには、ファイル参照が含まれます。
**注記**  
JSON ファイル内のデータ値の命名規則は、Image Builder API オペレーションリクエストパラメータに指定されているパターンに従います。API コマンドリクエストパラメータを確認するには、EC2 Image Builder API リファレンスの [CreateComponent](https://docs.aws.amazon.com/imagebuilder/latest/APIReference/API_CreateComponent.html) コマンドを参照してください。  
データ値をコマンドラインパラメータとして指定するには、AWS CLI コマンドリファレンスで指定されているパラメータ名を参照してください。

1. 

**CLI 入力 JSON ファイルの作成**

   ファイル編集ツールを使用して、`install-wget-macos-component.json` という名前のファイルを作成します。次の内容を含めます:

   ```
   {
   	"name": "install install-wget-macos-component",
   	"semanticVersion": "1.1.2",
   	"description": "An example component that installs and verifies the wget utility on macOS.",
   	"changeDescription": "Initial version.",
   	"platform": "macOS",
   	"uri": "s3://amzn-s3-demo-destination-bucket/my-path/wget-macos.yaml",
   	"kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/98765432-b123-456b-7f89-0123456f789c",
   	"tags": {
   		"MyTagKey-purpose": "install-software"
   	}
   }
   ```

1. 

**コンポーネントを作成する**

   以下のコマンドを使用して、前のステップで作成した JSON ファイルのファイル名を参照してコンポーネントを作成します。

   ```
   aws imagebuilder create-component --cli-input-json file://install-wget-macos-component.json
   ```
**注記**  
JSON ファイルパスの先頭に `file://` 表記を含める必要があります。
JSON ファイルのパスは、コマンドを実行するベースオペレーティングシステムに適した規則に従う必要があります。例えば、Windows ではディレクトリパスを表すためにバックスプラッシュ (\$1) が使用され、Linux と macOS ではフォーワードスラッシュ (/) が使用されます。

------

### AWSTOE からの更新のコンポーネントバージョニング AWS CLI
<a name="component-update-cli"></a>

AWSTOE コンポーネント名とバージョンは、コンポーネントのプレフィックスの後にコンポーネントの Amazon リソースネーム (ARN) に埋め込まれます。コンポーネントの新しいバージョンにはそれぞれ固有の ARN があります。新しいバージョンを作成する手順は、そのコンポーネント名に対してセマンティックバージョンが一意である限り、新しいコンポーネントを作成する手順と完全に同じです。Image Builder リソースのセマンティックバージョニングの詳細については、[Image Builder でのセマンティックバージョニング](ibhow-semantic-versioning.md)を参照してください。

次の論理的なバージョンを割り当てるために、まず変更したいコンポーネントの既存のバージョンのリストを取得してください。で **list-components** コマンドを使用し AWS CLI、名前をフィルタリングします。

この例では、以前の Linux の例で作成したコンポーネントの名前をフィルタします。作成したコンポーネントをリストアップするには、**create-component**コマンドで使用した JSON ファイルの`name`パラメータの値を使用する。

```
aws imagebuilder list-components --filters name="name",values="update-linux-os"	
{
    "requestId": "123a4567-b890-123c-45d6-ef789ab0cd1e",
    "componentVersionList": [
        {
            "arn": "arn:aws:imagebuilder:us-west-2:1234560087789012:component/update-linux-os/1.0.0",
            "name": "update-linux-os",
            "version": "1.0.0",
            "platform": "Linux",
            "type": "BUILD",
            "owner": "123456789012",
            "dateCreated": "2020-09-24T16:58:24.444Z"
        },
        {
            "arn": "arn:aws:imagebuilder:us-west-2:1234560087789012:component/update-linux-os/1.0.1",
            "name": "update-linux-os",
            "version": "1.0.1",
            "platform": "Linux",
            "type": "BUILD",
            "owner": "123456789012",
            "dateCreated": "2021-07-10T03:38:46.091Z"
        }
    ]
}
```

結果に基づいて、次のバージョンを決定できます。

## スクリプトをインポートして からコンポーネントを作成する AWS CLI
<a name="import-component-cli"></a>

シナリオによっては、既存のスクリプトから始める方が簡単な場合もあります。このシナリオでは、以下の例を使うことができます。

この例では、`import-component.json` (図のように) というファイルがあることを前提としています。このファイルは、既に `amzn-s3-demo-source-bucket` にアップロードされている `AdminConfig.ps1` というPowerShell スクリプトを直接に参照していることを注意してください。現在、コンポーネント`SHELL`がサポートされている`format`。

```
{
"name": "MyImportedComponent",
"semanticVersion": "1.0.0",
"description": "An example of how to import a component",
"changeDescription": "First commit message.",
"format": "SHELL",
"platform": "Windows",
"type": "BUILD",
"uri": "s3://amzn-s3-demo-source-bucket/AdminConfig.ps1",
"kmsKeyId": "arn:aws:kms:us-west-2:123456789012:key/60763706-b131-418b-8f85-3420912f020c"
}
```

インポートされたスクリプトからコンポーネントを作成するには、次のコマンドを実行します。

```
aws imagebuilder import-component --cli-input-json file://import-component.json
```

## 自動ビルドバージョン管理
<a name="auto-build-version-management"></a>

既存のコンポーネントと同じ名前とセマンティックバージョンを持つコンポーネントを作成すると、Image Builder は自動的にビルドバージョンをインクリメントします (たとえば、 `/1` から `/2`、 から `/3`など）。これにより、バージョン番号を手動で管理しなくてもコンポーネントを反復更新できます。これは、CI/CD パイプラインやinfrastructure-as-codeのデプロイで特に役立ちます。コンポーネントのコンテンツが以前のビルドバージョンと同じ場合、Image Builder は を返し`ResourceAlreadyExistsException`、重複するコンポーネントがサービスクォータを消費しないようにします。

## バージョンリファレンスの使用
<a name="using-version-references"></a>

コンポーネントを作成または取得すると、Image Builder は latestVersionReferences オブジェクトにワイルドカードバージョンパターンを持つ構築済みの ARNs を自動的に提供します。これらのリファレンスにより、ARNs を手動で解析することなく、レシピやパイプラインでコンポーネントの最新バージョンを簡単に使用できます。

**適切なバージョンリファレンスの選択**
+ latestVersionArn (x.x.x) - 常に最新のコンポーネントバージョンを使用してください。
+ atestMajorVersionArn (1.x.x) - メジャーバージョン内で最新のマイナーバージョンとパッチバージョンを使用します。
+ latestMinorVersionArn (1.2.x) - 最新のパッチバージョンのみを使用します。
+ latestPatchVersionArn (1.2.3) - 特定のセマンティックバージョンを参照しますが、最新のビルドバージョンを取得します。