新しいコンテナレシピのバージョンを作成 - EC2 Image Builder

新しいコンテナレシピのバージョンを作成

このセクションでは、コンテナレシピの新しいバージョンを作成する方法を示します。

コンソールで新しいコンテナレシピの作成

コンテナレシピの新しいバージョンを作成することは、新しいレシピを作成することと実質的に同じです。違いは、ほとんどの場合、基本レシピに合わせて特定の詳細が事前に選択されていることです。以下のリストは、新しいレシピを作成することと、既存のレシピの新しいバージョンを作成することの違いを説明しています。

レシピ詳細
  • 名前 - 編集不可。

  • バージョン – 必須。この情報には、現在のバージョンやシーケンスがあらかじめ入力されていません。作成したいバージョン番号を major.minor.patch の形式で入力します。そのバージョンが既に存在している場合は、エラーが発生します。

ベースイメージ
  • イメージオプションを選択 — あらかじめ選択されていますが、編集可能です。ベースイメージのソースの選択を変更すると、選択した元のオプションに依存するその他の詳細が失われる可能性があります。

    基本イメージの選択に関連する詳細を表示するには、選択内容と一致するタブを選択してください。

    Managed images
    • イメージオペレーティングシステム(OS) - 編集不可。

    • イメージ名 — 既存のレシピで選択した基本イメージの組み合わせに基づいて事前に選択されています。ただし、イメージを選択 オプションを変更すると、事前に選択した イメージ名 は失われます。

    • 自動バージョンアップオプション - 基本レシピと一致しません。自動バージョン管理オプションのデフォルトは選択した OS バージョンを使用です。

      重要

      セマンティックバージョニングを使用してパイプラインのビルドを開始する場合は、この値を利用可能な最新の OS バージョンを使用するに変更してください。Image Builder リソースのセマンティックバージョニングの詳細については、Image Builder でのセマンティックバージョニングを参照してください。

    ECR image
    • イメージオペレーティングシステム (OS) — 事前に選択されていますが、編集可能です。

    • OS バージョン — 事前に選択されていますが、編集可能です。

    • ECR イメージ ID — 事前入力されていますが、編集可能です。

    Docker Hub image
    • イメージオペレーティングシステム (OS) - 編集不可。

    • OS バージョン — 事前に選択されていますが、編集可能です。

    • Docker イメージ ID — 事前に入力されていますが、編集可能です。

インスタンス設定
  • AMI ID — 事前入力されていますが、編集可能です。

  • ストレージ (ボリューム)

    EBS ボリューム 1 (AMI ルート) — 事前に入力されています。ルートボリュームのデバイス名スナップショット、または IOPS の選択内容は編集できません。ただし、サイズ など、残りの設定はすべて変更できます。新しいボリュームを追加することもできます。

    注記

    別のアカウントから共有した場合、ベース AMI を指定した場合、指定したすべての 2 次ボリュームのスナップショットも自分のアカウントと共有する必要があります。

作業ディレクトリパス
  • 作業ディレクトリパス — 事前に入力されていますが、編集可能です。

コンポーネント
  • コンポーネント — レシピに既に含まれているコンポーネントは、各コンポーネントリスト (ビルドとテスト) の最後にある 選択されたコンポーネント セクションに表示されます。ニーズに合わせられるように、選択したコンポーネントを削除または並べ替えることができます。

    CIS 強化コンポーネントは、Image Builder レシピの標準コンポーネント順序ルールに従っていません。CIS 強化コンポーネントは常に最後に実行され、ベンチマークテストが出力イメージに対して確実に実行されます。

    注記

    ビルドコンポーネントリストとテストコンポーネントリストには、コンポーネント所有者のタイプに基づいて使用可能なコンポーネントが表示されます。レシピのコンポーネントを追加または更新するには、探しているコンポーネントの所有者タイプを選択します。例えば、AWS Marketplace でサブスクライブしているベースイメージに関連するコンポーネントを追加したい場合は、検索バーの横にある所有者タイプリストから Third party managed を選択します。

    選択されたコンポーネントについては、次の設定を指定できます。

    • バージョニングオプション — 事前に選択されていますが、変更できます。イメージビルドで常に最新バージョンのコンポーネントが使用されるように、使用可能な最新のコンポーネントバージョンを使用するオプションを選択することをお勧めします。レシピで特定のコンポーネントバージョンを使用する必要がある場合は、コンポーネントバージョンを指定 を選択し、表示される コンポーネントバージョン ボックスにバージョンを入力できます。

    • 入力パラメータ — コンポーネントが受け付ける入力パラメータを表示します。 には、以前のバージョンのレシピの値があらかじめ入力されています。このレシピでこのコンポーネントを初めて使用する場合、入力パラメータにデフォルト値が定義されていると、そのデフォルト値が [値] ボックスにグレーアウトされたテキストで表示されます。他の値を入力しない場合、Image Builder はデフォルト値を使用します。

      入力パラメータが必須で、コンポーネントにデフォルト値が定義されていない場合は、値を指定する必要があります。必須パラメータのいずれかが不足していてデフォルト値も定義されていない場合、Image Builder はレシピバージョンを作成しません。

      重要

      コンポーネントパラメータはプレーンテキストの値で、AWS CloudTrail に記録されます。シークレットを保存するには、AWS Secrets Manager または AWS Systems Manager パラメータストアを使用することをお勧めします。Secrets Manager の詳細については、AWS Secrets Managerユーザーガイドの Secrets Manager とはを参照してください。AWS Systems Managerパラメータストアについては、AWS Systems ManagerユーザーガイドのAWS Systems Managerパラメータストアを参照。

    バージョニング管理オプション または [入力パラメータ] の設定を拡張するには、設定名の横にある矢印を選択します。選択したすべてのコンポーネントの設定をすべて展開するには、[すべて展開] スイッチのオンとオフを切り替えます。

Dockerfile テンプレート
  • Dockerfile テンプレート - 事前に入力されていますが、編集可能です。次のコンテキスト変数を指定できます。これらは、実行時に Image Builder によってビルド情報に置き換えられます。

     

    parentImage (必須)

    この変数は、ビルド時にレシピのベースイメージに解決されます。

    例:

    FROM {{{ imagebuilder:parentImage }}}
    environments (components が指定されている場合は必須)

    この変数は、コンポーネントを実行するスクリプトに解決されます。

    例:

    {{{ imagebuilder:environments }}}
    components (オプション)

    Image Builder は、コンテナレシピに含まれているコンポーネントのビルドおよびテストコンポーネントスクリプトを解決します。この変数は、Dockerfile 内で environments 変数の後の任意の場所に配置できます。

    例:

    {{{ imagebuilder:components }}}
ターゲットリポジトリ
  • ターゲットリポジトリ名 — パイプラインが実行されるリージョン (リージョン 1) のパイプラインのディストリビューション設定で他にリポジトリが指定されていない場合に、出力イメージが保存される Amazon ECR リポジトリ。

新しいコンテナレシピのバージョンを作成するには:
  1. コンテナレシピの詳細ページの上部で、新しいバージョンを作成 を選択します。コンテナレシピのレシピの作成ページが表示されます。

  2. 新しいバージョンを作成するには、変更を加え、レシピの作成を選択します。

イメージパイプラインを作成するときにコンテナレシピを作成する方法の詳細については、本ガイドのはじめにセクションの「ステップ 2: レシピを選択する」を参照してください。

AWS CLI でコンテナレシピを作成する

AWS CLIのimagebuilder create-container-recipeコマンドで Image Builder コンテナレシピを作成するには、以下の手順に従います。

前提条件

このセクションの Image Builder コマンドを実行して AWS CLI でコンテナレシピを作成する前に、レシピが使用するコンポーネントを作成する必要があります。次のステップのコンテナレシピの例は、このガイドの AWS CLI でのカスタムコンポーネントの作成 セクションで作成したサンプルコンポーネントを参照しています。

コンポーネントを作成したら、または既存のコンポーネントを使用している場合は、レシピに含める ARN をメモしてください。

  1. CLI 入力 JSON ファイルの作成

    create-container-recipe コマンドのすべての入力をインラインコマンドパラメータで指定できます。ただし、生成されるコマンドはかなり長くなる可能性があります。コマンドを効率化するために、代わりにすべてのコンテナレシピ設定を含む JSON ファイルを提供できる

    注記

    JSON ファイル内のデータ値の命名規則は、Image Builder API アクションリクエストパラメータに指定されているパターンに従います。API コマンドのリクエストパラメータを確認するには、EC2 Image Builder API Reference の CreateContainerRecipe コマンドを参照してください。

    データ値をコマンドラインパラメータとして指定するには、AWS CLI コマンドリファレンスで指定されているパラメータ名を参照してください。

    以下に、この例のパラメータの概要を示します。

    • コンポーネント (オブジェクトの配列、必須) — ComponentConfiguration オブジェクトの配列が含まれます。少なくとも 1 つのビルドコンポーネントを指定する必要があります。

      注記

      Image Builder は、レシピで指定した順序でコンポーネントをインストールします。しかし、CIS のハードニング・コンポーネントは、ベンチマーク・テストが出力イメージに対して実行されるように、常に最後に実行します。

      • コンポーネント ARN (文字列、必須) — コンポーネント ARN。

        ヒント

        例の 1 つを使用して独自のコンテナレシピを作成するには、サンプル ARN をレシピに使用しているコンポーネントの ARN に置き換える必要があります。これらには AWS リージョン、それぞれの、名前、バージョン番号が含まれます。

      • パラメータ (オブジェクトの配列) — ComponentParameter オブジェクトの配列が含まれます。入力パラメータが必須で、コンポーネントにデフォルト値が定義されていない場合は、値を指定する必要があります。必須パラメータのいずれかが不足していてデフォルト値も定義されていない場合、Image Builder はレシピバージョンを作成しません。

        重要

        コンポーネントパラメータはプレーンテキストの値で、AWS CloudTrail に記録されます。シークレットを保存するには、AWS Secrets Manager または AWS Systems Manager パラメータストアを使用することをお勧めします。Secrets Manager の詳細については、AWS Secrets Managerユーザーガイドの Secrets Manager とはを参照してください。AWS Systems Managerパラメータストアについては、AWS Systems ManagerユーザーガイドのAWS Systems Managerパラメータストアを参照。

        • 名前 (文字列、必須) — 設定するコンポーネントパラメータの名前。

        • (文字列の配列、必須) — 指定されたコンポーネントパラメータの値を設定する文字列の配列を含みます。コンポーネントにデフォルト値が定義されていて、他の値が指定されていない場合は、AWSTOE はそのデフォルト値を使用します。

    • containerType (文字列、必須) — 作成するコンテナのタイプ。有効な値には DOCKER が含まれます。

    • DockerFileTemplateData (文字列) — イメージの構築に使用される Dockerfile テンプレート。インラインデータブロブとして表現されます。

    • 名前 (文字列、必須) — コンテナレシピの名前。

    • 説明 (文字列) — コンテナレシピの説明。

    • 親イメージ (文字列、必須) — コンテナレシピがカスタマイズ画像のベースとして使用します。値を入れられるのは、ベースイメージ ARN または AMI ID です。

    • platformOverride (文字列) –カスタムベースイメージを使用する場合のオペレーティングシステムプラットフォームを指定します。

    • semanticVersion 文字列、必須) - コンテナレシピのセマンティックバージョンを以下のフォーマットで指定します:<major>.<minor>.<patch>。文字列の例は 1.0.0 などです。Image Builder リソースのセマンティックバージョニングの詳細については、Image Builder でのセマンティックバージョニングを参照してください。

    • タグ (文字列マップ)コンテナレシピにアタッチされているタグ。

    • instanceConfiguration (オブジェクト) —コンテナイメージの構築とテストを目的としてインスタンスを設定するために使用できるオプションのグループ。

      • image (文字列) – コンテナの構築およびテストインスタンスのベースイメージとして使用する AMI ID。この値を指定しない場合、Image Builder は適切な Amazon ECS 最適化 AMI をベースイメージとして使用します。

      • BlockDeviceMappings (オブジェクトの配列) — imageパラメータで指定した Image Builder AMI からインスタンスを構築するためにアタッチするブロックデバイスを定義します。

        • DeviceName (文字列) — これらのマッピングが適用されるデバイス。

        • ebs (オブジェクト) – このマッピングの Amazon EBS 固有の構成を管理するために使用します。

          • deleteOnTermination (Boolean) –関連付けられたデバイスの終了時に削除を設定するために使用します。

          • 暗号化済み (ブール値) — デバイス暗号化の設定に使用されます。

          • volumeSize (整数) — デバイスのボリュームサイズを上書きするために使用します。

          • volumeType (文字列) — デバイスのボリュームサイズを上書きするために使用します。

    • targetRepository (オブジェクト、必須) — パイプラインが稼働するリージョン (リージョン 1) のパイプラインのディストリビューション設定で他にリポジトリが指定されていない場合のコンテナイメージのデスティネーションリポジトリ。

      • repositoryName (文字列、必須) - 出力コンテナイメージを保存するコンテナリポジトリの名前。この名前の先頭には、リポジトリの場所が付きます。

      • サービス (文字列、必須) - このイメージが登録されたサービスを指定します。

    • workingDirectory (文字列) - ビルドとテストのワークフローで使用する作業ディレクトリ。

    { "components": [ { "componentArn": "arn:aws:imagebuilder:us-east-1:123456789012:component/helloworldal2/x.x.x" } ], "containerType": "DOCKER", "description": "My Linux Docker container image", "dockerfileTemplateData": "FROM {{{ imagebuilder:parentImage }}}\n{{{ imagebuilder:environments }}}\n{{{ imagebuilder:components }}}", "name": "amazonlinux-container-recipe", "parentImage": "amazonlinux:latest", "platformOverride": "Linux", "semanticVersion": "1.0.2", "tags": { "sometag" : "Tag detail" }, "instanceConfiguration": { "image": "ami-1234567890", "blockDeviceMappings": [ { "deviceName": "/dev/xvda", "ebs": { "deleteOnTermination": true, "encrypted": false, "volumeSize": 8, "volumeType": "gp2" } } ] }, "targetRepository": { "repositoryName": "myrepo", "service": "ECR" }, "workingDirectory": "/tmp" }
  2. レシピを作成する

    レシピを作成するには以下のコマンドを使用します。前のステップで作成した JSON ファイルの名前を --cli-input-json パラメータに入力します。

    aws imagebuilder create-container-recipe --cli-input-json file://create-container-recipe.json
    注記
    • JSON ファイルパスの先頭に file:// 表記を含める必要があります。

    • JSON ファイルのパスは、コマンドを実行するベースオペレーティングシステムに適した規則に従う必要があります。例えば、Windows ではディレクトリパスを表すためにバックスプラッシュ (\) が使用され、Linux と macOS ではフォーワードスラッシュ (/) が使用されます。