View a markdown version of this page

新しいコンテナレシピのバージョンを作成 - EC2 イメージビルダー

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

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

このセクションでは、コンテナレシピまたは既存のレシピの新しいバージョンを作成する方法について説明します。コンテナレシピは、ベースイメージ、ビルドコンポーネント、ターゲットリポジトリの 3 つの主要な要素を定義します。このレシピを使用して、Image Builder が Amazon ECR に保存するDockerコンテナイメージを作成します。

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

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

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

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

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

    Docker コンテナイメージの場合、 でホストされているパブリックイメージDockerHub、Amazon ECR の既存のコンテナイメージ、または Amazon が管理するコンテナイメージから選択できます。基本イメージの選択に関連する詳細を表示するには、選択内容と一致するタブを選択してください。

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

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

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

      重要

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

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

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

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

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

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

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

インスタンス設定
  • AMI ソース (必須) – コンテナビルドおよびテストインスタンスのベースイメージとして使用するカスタム AMI を特定します。これは、AMI ID または AMI ID を含む AWS Systems Manager (SSM) パラメータストアパラメータです。

    • AMI ID – この設定には、元のエントリが事前に入力されていません。ベースイメージの AMI ID を入力します。例えば、ami-1234567890abcdef1 などです。

    • SSM パラメータ – ベースイメージの AMI ID を含む SSM パラメータストアパラメータの名前または ARN を入力します。例: /ib/test/param または arn:aws:ssm:us-east-1:111122223333:parameter/ib/test/param

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

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

    注記

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

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

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

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

    注記

    ビルドコンポーネントリストとテストコンポーネントリストには、コンポーネント所有者のタイプに基づいて使用可能なコンポーネントが表示されます。コンポーネントを追加するには、ビルドコンポーネントの追加を選択し、適用する所有権フィルターを選択します。たとえば、 AWS Marketplace 製品に関連付けられているビルドコンポーネントを追加するには、 を選択しますAWS Marketplace。これにより、コンポーネントを一覧表示 AWS Marketplace する選択パネルがコンソールインターフェイスの右側に表示されます。

    CIS コンポーネントで、 を選択しますThird party managed

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

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

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

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

      重要

      コンポーネントパラメータはプレーンテキストの値で、 AWS CloudTrailに記録されます。シークレットを保存するには、 AWS Secrets Manager または AWS Systems Manager Parameter Store を使用することをお勧めします。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 が指定されている場合は必須)

    ビルド時に、この変数はビルドコンテキストでコンポーネントをステージングする Dockerfile ディレクティブに解決されます。これらのディレクティブは、コンポーネントスクリプトをイメージにコピーし、それらのスクリプトが使用する環境変数を設定します。環境を準備しますが、指定したコンポーネントは実行しません。この変数を components 変数の前に配置します。

    例:

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

    ビルド時に、この変数は、コンテナレシピに含まれるコンポーネントのビルドコンポーネントスクリプトとテストコンポーネントスクリプトを実行する コマンドに解決され、イメージからそれらのスクリプトを削除します。これは、コンポーネントを実行する変数です。environments 変数の後に配置します。

    例:

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

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

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

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

を使用してコンテナレシピを作成する AWS CLI

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

前提条件

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

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

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

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

    注記

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

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

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

    • components (オブジェクトの配列、オプション) – ComponentConfiguration オブジェクトの配列が含まれます。コンテナレシピのコンポーネントはオプションです。出力イメージは BUILD コンポーネント、Dockerfile テンプレートの手順 ( RUN または COPYステートメントなど)、またはその両方を使用してカスタマイズできます。TEST コンポーネントはイメージを検証しますが、変更しません。

      注記

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

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

        ヒント

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

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

        重要

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

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

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

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

    • dockerfileTemplateData (文字列) – イメージを構築するためのインライン Dockerfile テンプレート。インラインデータは 16,000 文字に制限されています。dockerfileTemplateData または dockerfileTemplateUri のパラメータを指定する必要があります。両方を指定することはできません。

      Dockerfile テンプレートには、コンテキスト変数 (Image Builder が実行時にビルド情報に置き換えるプレースホルダー) を含めることができます。少なくとも parentImage変数を含めます。レシピにコンポーネントが含まれている場合は、 environments変数と components変数も含めます。

      parentImage (必須)

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

      例:

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

      ビルド時に、この変数はビルドコンテキストでコンポーネントをステージングする Dockerfile ディレクティブに解決されます。これらのディレクティブは、コンポーネントスクリプトをイメージにコピーし、それらのスクリプトが使用する環境変数を設定します。環境を準備しますが、指定したコンポーネントは実行しません。この変数を components 変数の前に配置します。

      例:

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

      ビルド時に、この変数は、コンテナレシピに含まれるコンポーネントのビルドコンポーネントスクリプトとテストコンポーネントスクリプトを実行する コマンドに解決され、イメージからそれらのスクリプトを削除します。これは、コンポーネントを実行する変数です。environments 変数の後に配置します。

      例:

      {{{ imagebuilder:components }}}

      代わりに Amazon S3 にテンプレートを保存するには、有効な Amazon S3 URI を持つ dockerfileTemplateUri パラメータを使用します (例: s3://my-bucket/templates/Dockerfile)。

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

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

    • parentImage (文字列、必須) – カスタマイズされたイメージのベースラインとしてDockerコンテナレシピで使用するコンテナイメージ。

      • でホストされているパブリックイメージ DockerHub

      • Amazon ECR の既存のコンテナイメージ

      • Amazon が管理するコンテナイメージ

    • platformOverride (文字列) –カスタムベースイメージを使用する場合のオペレーティングシステムプラットフォームを指定します。Docker Hub または Amazon ECR イメージを使用する場合は、この値を設定することをお勧めします。これを省略すると、Image Builder はコンテナマニフェストからプラットフォームを検出しようとしますが、常に利用できるとは限りません。親イメージが Image Builder イメージ ARN platformOverrideの場合、 を指定することはできません。有効な値は、Linux および Windows です。コンテナレシピは macOS プラットフォームをサポートしていません。

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

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

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

      • image (文字列) – コンテナビルドおよびテストインスタンスのベースイメージ。これには AMI ID を含めることも、 AWS Systems Manager (SSM) Parameter Store パラメータを指定することもできます。プレフィックスは で、パラメータ名または ARN がssm:続きます。SSM パラメータを使用する場合は、パラメータ値に AMI ID が含まれている必要があります。ベースイメージを指定しない場合、Image Builder は適切な Amazon ECS 最適化 AMI をベースイメージとして使用します。

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

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

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

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

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

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

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

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

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

      • service (文字列、必須) – 出力イメージを保存するリポジトリサービスを指定します。有効値は ECR です。ターゲットリポジトリは既に存在している必要があります。

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

    次の例は、ビルドコンポーネントを含む Linux コンテナを定義する完全なDockerコンテナレシピ入力ファイルを示しています。として保存しcreate-container-recipe.jsoncreate-container-recipe コマンドで使用します。

    { "components": [ { "componentArn": "arn:aws:imagebuilder:us-west-2:111122223333: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-1234567890abcdef1", "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 ではフォーワードスラッシュ (/) が使用されます。

    次の出力例は、新しく作成されたコンテナレシピの ARN と、リクエストのリクエスト ID とクライアントトークンを示しています。

    { "requestId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "clientToken": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222", "containerRecipeArn": "arn:aws:imagebuilder:us-west-2:123456789012:container-recipe/my-container-recipe/1.0.2" }

コンテナレシピの制約

コンテナレシピを作成する前に、次の制約を確認してください。

  • 既存のターゲット Amazon ECR リポジトリを指定する必要があります。

  • AWS Marketplace コンポーネントはコンテナレシピではサポートされていません。

  • コンポーネントはオプションです。出力イメージは BUILD コンポーネント、Dockerfile テンプレートの手順 ( RUN または COPYステートメントなど)、またはその両方を使用してカスタマイズできます。TEST コンポーネントはイメージを検証しますが、変更しません。

  • コンテナレシピは macOS プラットフォームをサポートしていません。

  • Dockerfile テンプレートには、インラインデータ (最大 16,000 文字) または Amazon S3 URI を指定します。両方を指定することはできません。

  • 累積レシピサイズは 25 KB を超えることはできません。サイズエラーが発生した場合は、コンポーネントパラメータの数を減らすか、パラメータ値を短くします。この制限は、Dockerfile テンプレートのサイズ制限とは異なります。

  • platformOverride を に設定するときはWindows、 も指定する必要がありますimageOsVersionOverride。これは、Amazon ECR イメージやイメージなど、Image Builder 以外の親イメージに適用されますDocker Hub。

一般的なエラーとトラブルシューティング

次の表に、コンテナレシピの作成時に発生する可能性がある一般的なエラーとその解決方法を示します。

エラー 原因 解決策
「コンテナレシピにマーケットプレイスコンポーネントを含めることはできません」 コンテナレシピの AWS Marketplace コンポーネント。 非AWS Marketplace コンポーネントのみを使用してください。
「コンテナレシピは現在 macOS プラットフォームをサポートしていません」 platformOverride は macOS に設定されます。 Linux または Windows を使用します。
dockerfileTemplateData または dockerfileTemplateUri を指定する必要があります」 両方またはどちらも指定していません。 1 つだけ指定します。
「無効な S3 URI」 の不正な形式の Amazon S3 パスdockerfileTemplateUri 形式 s3://bucket/key を使用します。
「Image Builder イメージを親として使用する場合、プラットフォームオーバーライドを指定することはできません」 platformOverride Image Builder イメージ ARN を使用する。 platformOverride を削除します。Image Builder は、親イメージメタデータからプラットフォームを検出します。
「ECR リポジトリを Windows プラットフォームの親イメージとして使用する場合は、イメージ OsVersion オーバーライドを指定する必要があります」 OS バージョンplatformOverrideのない Windows。 imageOsVersionOverride フィールドを追加します。