Image Builder でイメージビルドパイプライン実行エラー「TOE をブートストラップできません」を解決する方法を教えてください。

所要時間2分
0

EC2 Image Builder で、イメージビルドパイプラインの実行が「TOE をブートストラップできません」というエラーで失敗します。これを解決するにはどうすればよいですか?

簡単な説明

イメージビルドパイプラインのビルド段階では、Amazon Elastic Compute Cloud (Amazon EC2) ビルドインスタンスが AWS タスクオーケストレータおよびエグゼキュータ (AWS TOE) ブートストラップスクリプト bootstrap.sh をインストールして実行します。Amazon EC2 ビルドインスタンスがブートストラップスクリプトをインストールまたは実行できない場合、EC2 Image Builder コンソールにエラーが表示されます。

エラーメッセージの例:

SSM execution '7729e837-22d4-49dd-bb60-cc2c835a2625' failed for image arn: 'arn:aws:imagebuilder:us-west-2:account-ID:image/test/1.0.0/1' with 
status= 'Failed' in state = 'BUILDING' and failure message = 'Unable to bootstrap TOE'

Image Builder は AWS Systems Manager Automation を使用してカスタムイメージを構築します。オートメーションは通常、RunBuildScriptsWithLogging または RunBuildScriptsWithoutLogging ステップで失敗します。

ブートストラップスクリプトが失敗する一般的な理由は次のとおりです。

  • EC2 ビルドインスタンスには Amazon Simple Storage Service (Amazon S3) へのアクセス権がありません。
  • ベース Amazon マシンイメージ (AMI) は CIS で強化されており、デフォルトの /tmp ディレクトリは noexec でマウントされています。

解決方法

問題のトラブルシューティングを行うには、エラーメッセージの SSM Automation 実行 ID を使用します。

  1. EC2 Image Builder コンソールを開きます。
  2. 失敗したビルドパイプラインを選択します。
  3. エラーメッセージの SSM オートメーションの実行 ID をメモします。前述のエラーメッセージ例の ID は、7729e837-22d4-49dd-bb60-cc2c835a2625 です。
  4. AWS Systems Manager コンソールを開きます。
  5. ナビゲーションペインで [Automations] (オートメーション) を選択します。
  6. SSM オートメーションの実行 ID に関連付けられているオートメーションを選択します。
  7. ブートストラップスクリプトの失敗に関する詳細を取得するには、RunBuildScriptsWithoutLogging ステップの ID を選択します。

ビルドインスタンスに Amazon S3 へのアクセス権がない

RunBuildScriptsWithoutLogging ステップ中に、「No such file or directory」(そのようなファイルまたはディレクトリがありません) という次のエラーメッセージが表示されます。

{"Status":"Failed","ResponseCode":1,"Output":"Waiting for Cloud-init to initialize ...
Cloud-init fails to initialize ... waiting another 5 minutes for the instance to stabilize
/var/lib/amazon/ssm/i-0ad513xxxxxxx/document/orchestration/bb0d8b53-994f-4c47-8297-e852a484501d/awsrunShellScript/0.awsrunShellScript/_script.sh: 
line 49: /tmp/imagebuilder/TaskOrchestratorAndExecutor/bootstrap.sh: No such file or directory
{\"failureMessage\":\"Unable to bootstrap TOE\"}

上記のエラーは、bootstrap.sh ファイルがビルドインスタンスに存在しないことを意味します。このエラーは、ビルドインスタンスがプライベートサブネットにあり、AWS TOE ブートストラップスクリプトをダウンロードできない場合に発生します。

この問題を解決するには、Amazon S3 ゲートウェイエンドポイント com.amazonaws.region.s3 が、パイプラインのインフラストラクチャ設定と同じ Amazon Virtual Private Cloud (Amazon VPC) にあるかどうかを確認します。エンドポイントが同じ Amazon VPC にある場合は、正しいルートテーブルに関連付けられていることを確認します。エンドポイントは、インフラストラクチャ設定で指定されたサブネットによって使用されるルートテーブルに関連付けられている必要があります。

また、ビルドインスタンスにアタッチされているセキュリティグループが、S3 パブリック IP アドレスへのアウトバウンド HTTPS (ポート 443) 接続を許可していることを確認します。ビルドインスタンスは、Image Builder S3 バケットからブートストラップスクリプトをダウンロードするために、アウトバウンド HTTPS 接続を許可する必要があります。パイプラインの AWS リージョンに対応する S3 パブリック IP アドレス範囲を確認します。

注: Amazon S3 インターフェイスのエンドポイントは、プライベート DNS 機能をサポートしていません。詳細については、「インターフェイス VPC エンドポイントを使用して AWS のサービスにアクセスする」を参照してください。

また、エンドポイントのポリシーで、Image Builder S3 バケット ec2imagebuilder-toe-REGION-prod からの GetObjects アクションが許可されていることを確認してください。このポリシーには、デフォルトでフルアクセス権があります。

/tmp ディレクトリは noexec でマウントされます (Linux AMI ビルドの場合のみ該当)

RunBuildScriptsWithoutLogging ステップ中、「Permission denied」(アクセス許可が拒否されました) という次のエラーメッセージが表示されます。

{"Status":"Failed","ResponseCode":1,"Output":"Waiting for Cloud-init to initialize ...
/var/lib/amazon/ssm/i-0ad513xxxxxxx/document/orchestration/634699d5-3b04-4152-aab3-33d6981524cd/awsrunShellScript/0.awsrunShellScript/_script.sh:
line 49: /tmp/imagebuilder/TaskOrchestratorAndExecutor/bootstrap.sh: Permission denied
{\"failureMessage\":\"Unable to bootstrap TOE\"}

上記のエラーは、オペレーティングシステムのアクセス許可の問題により、ビルドインスタンスが bootstrap.sh スクリプトを実行できないことを意味します。このエラーは、デフォルトの /tmp ディレクトリが noexec オプションでマウントされている場合に発生します。noexec マウントオプションは、マウントされたファイルシステム上でバイナリが実行されないようにします。

/tmp ディレクトリが noexec でマウントされているかどうかを確認するには、イメージレシピで指定されたベース AMI からテストインスタンスを起動します。

次のコマンドを実行します。

sudo mount | grep -E '/tmp.*noexec'

出力:

dev/xvdf on /tmp type ext4 (rw,noexec,relatime,data=ordered)

上記の出力は、/tmp ディレクトリが noexec としてマウントされていることを確認しています。この問題を解決するには、イメージレシピの作業ディレクトリを変更するか、ベース AMI のディレクトリから noexec オプションを削除します。

イメージレシピの作業ディレクトリパラメータを変更するには、新しいイメージレシピバージョンを作成します。次に、パイプラインを編集して新しいバージョンを使用します。新しいディレクトリが既に AMI にあり、noexec オプションでマウントするように設定されていないことを確認します。

/tmp ディレクトリから noexec オプションを削除するには、以下の手順を実行します。

  1. イメージレシピで指定されたベース AMI からインスタンスを手動で起動します。
  2. /etc/fstab ファイルで、/tmp または作業ディレクトリに関連付けられているエントリから noexec オプションを削除します。
  3. イメージレシピのベース AMI として使用する新しい AMI をそのインスタンスから作成します。

AWS公式
AWS公式更新しました 2年前
コメントはありません

関連するコンテンツ