Image Builder でのビルドパイプラインのタイムアウトエラーをトラブルシューティングする方法を教えてください。
EC2 Image Builder で表示されるビルドパイプラインのタイムアウトエラーをトラブルシューティングしたいと考えています。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
ビルドパイプラインのタイムアウトエラーをトラブルシューティングするには、タイムアウトが発生したタイミングに応じて次の操作を実行します。タイムアウトをモニタリングする方法については、「Monitor Image Builder logs with Amazon CloudWatch Logs」(Amazon CloudWatch Logs による Image Builder のログのモニタリング) を参照してください。
ビルドが SSM Agent の可用性を検証するときにタイムアウトが発生する場合
ビルドが AWS Systems Manager Agent (SSM Agent) を検証するときにタイムアウトが発生すると、次のいずれかのエラーメッセージが表示されることがあります。
"Workflow Execution ID: failed with reason: ExpectationNotMet. ssm:*CommandInvocations returned terminal state Failed in workflow step LaunchBuildInstance."
"Workflow Execution ID: failed with reason: An error occurred (InvalidInstanceId) when calling the SendCommand operation: Instances [[i-1a1b1c1d1e1f1g1h1]] not in a valid state for account in workflow step LaunchBuildInstance."
"Workflow Execution ID: failed with reason: ExpectationNotMet. ec2:DescribeInstanceStatus did not meet terminal states: [['passed']] after 100 attempts.Reason: Timeout. in workflow step LaunchBuildInstance."
これらのエラーをトラブルシューティングするには、次の操作を実行します。
Amazon EC2 インスタンスに必要な IAM アクセス許可があることを確認する
Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに必要な AWS Identity and Access Management (IAM) アクセス許可があることを確認します。Image Builder で使用する IAM ロールに AmazonSSMManagedInstanceCore マネージドポリシーをアタッチします。Image Builder で使用しているロールを特定するには、インフラストラクチャ設定の詳細を確認してください。また、AWSServiceRoleForImageBuilder ロールが、イメージレシピのブロックデバイスで指定されている AWS Key Management Service (AWS KMS) キーを使用できることを確認してください。
SSM Agent がエンドポイントに到達できることを確認する
構成に応じて次の設定を確認します。
- インターネットゲートウェイを利用してパブリックサブネットを使用する場合は、パブリック IPv4 アドレスを自動的に割り当てるようにサブネットを設定します。
- NAT ゲートウェイを利用してプライベートサブネットを使用する場合は、パブリックサブネットを使用するように NAT ゲートウェイを設定します。
- Amazon Virtual Private Cloud (Amazon VPC) エンドポイントを使用してプライベートサブネットを使用する場合は、AWS Systems Manager のプライベートエンドポイントを設定します。
- セキュリティグループとネットワークアクセスコントロールリスト (ネットワーク ACL) が、エフェメラルポート 1024~65535 でのインバウンド接続と、ポート 443 でのアウトバウンド接続を許可していることを確認します。
- AWS PrivateLink エンドポイントを利用してプライベートサブネットを使用する場合は、Amazon VPC エンドポイントのセキュリティグループがポート 443 でのインバウンド接続を許可していることを確認します。
注: インバウンド接続を許可するには、サブネットまたは Amazon VPC CIDR アドレスを使用します。
その他のトラブルシューティング手順については、「イメージビルドパイプラインが、Image Builder で「Step timed out while step is verifying the Systems Manager Agent availability on the target instance(s)」(ステップがターゲットインスタンスで Systems Manager Agent の可用性を検証している間に、ステップがタイムアウトしました) というエラーで失敗するのはなぜですか?」を参照してください。
ビルドが AWS CLI をダウンロードするときにタイムアウトが発生する場合
EC2 インスタンスの Amazon マシンイメージ (AMI) に AWS CLI がない場合、ブートストラップスクリプトはインターネット経由で AWS CLI をインストールします。ただし、インターネット接続を許可していないプライベートサブネットでビルドすると、ApplyBuildComponents ステップでビルドがタイムアウトします。コンテナビルドの場合、タイムアウトは BootstrapBuildInstance ステップで発生します。
このタイムアウトの問題を解決するには、NAT ゲートウェイまたはインターネットゲートウェイを介してサブネットのインターネット接続を許可します。または、AWS CLI をインストールするカスタム AMI を作成します。
LaunchBuildInstance ステップでタイムアウトが発生する場合
ビルドインスタンスでは、一意のルートデバイス名を使用する必要があります。そのため、ルートデバイスに /dev/xvda や /dev/sda1 という名前を付けるのはベストプラクティスではありません。CreateImageRecipe API を使用するときに重複するルートデバイス名を使用すると、次のエラーメッセージとともにタイムアウトが発生します。
"Workflow Execution ID: failed with reason: ExpectationNotMet. ec2:DescribeInstanceStatus did not meet terminal states: [['passed']] after 100 attempts.Reason: Timeout. in workflow step LaunchBuildInstance."
注: AWS Nitro System 上に構築されたインスタンス、または Xen インスタンスタイプのインスタンスを使用する場合は、重複したデバイス名を使用できます。
ソース AMI のデバイス名を確認するには、次の describe-images AWS CLI コマンドを実行します。
aws ec2 describe-images \ --region exampleregion \ --image-ids exampleami
注: exampleregion を AWS リージョンに、exampleami をソース AMI ID に置き換えます。
出力で、RootDeviceName の値を確認してください。Image Builder レシピでは必ず同じデバイス名を使用してください。
ビルドが Image Builder コンポーネントを取得しているときにタイムアウトが発生する場合
プライベートサブネットでビルドしており、Image Builder がコンポーネントをダウンロードするために接続できない場合、次のエラーメッセージが表示されます。
"failed with reason: failed to download the EC2 Image Builder Component, operation error imagebuilder: GetComponent, exceeded maximum number of attempts, 3, dial tcp i/o timeout."
上記のエラーを解決するには、セキュリティグループと DNS 解決が、必要なポートでの通信を許可していることを確認してください。または、Image Builder インフラストラクチャ設定で使用しているのと同じ VPC とサブネット用にインターフェイス Amazon VPC エンドポイントを作成します。また、設定が Image Builder の要件に準拠していることも確認してください。
ビルドがミラーリストを取得するときにタイムアウトが発生する場合
Amazon Linux はミラーリストを Amazon Simple Storage Service (Amazon S3) バケットに保存します。Amazon S3 にアクセスできないプライベートサブネットでビルドすると、次のタイムアウトエラーメッセージが表示されます。
"Could not retrieve mirrorlist; error was 12: Timeout was reached."
この問題を解決するには、Amazon S3 用の Amazon VPC ゲートウェイエンドポイントを作成します。デフォルトでは、Amazon VPC はエンドポイントを作成するときに Amazon S3 プレフィックスリストをルートテーブルに追加します。ただし、プレフィックスリストがルートテーブルにあることを確認するのがベストプラクティスです。
Amazon Linux 以外の AMI でビルドする場合、ミラーリストは Amazon S3 に保存されません。このシナリオでは、ビルドがリポジトリ/ミラーリストを取得するときにビルドのタイムアウトが発生する可能性があります。ネットワークファイアウォールまたはプロキシで、リポジトリアドレスまたは URL を許可していることを確認してください。リポジトリ/ミラーリストにインターネットが必要な場合は、サブネットで NAT ゲートウェイ経由のインターネット接続を許可します。
ApplyBuildComponents ステップでタイムアウトが発生する場合
ApplyBuildComponents ステップでビルドタイムアウトが発生すると、次のエラーメッセージが表示されます。
"Workflow Execution ID: failed with reason: ExpectationNotMet. ssm:ListCommandInvocations did not meet terminal states: [['Success']] after 1440 attempts.Reason: Timeout. in workflow step ApplyBuildComponents."
この問題をトラブルシューティングするには、Image Builder がインフラストラクチャの Amazon S3 バケットに送信したログを分析します。詳細については、「Troubleshoot pipeline builds」(パイプラインビルドのトラブルシューティング) の「Review workflow runtime logs」(ワークフローのランタイムログを確認する) を参照してください。
また、新しいイメージの構築やテストに使用するインスタンスのコンポーネントログを分析してください。ログを確認する前に、[失敗時にインスタンスを終了] を無効にしてしてください。この機能を使用するには、次の手順を実行します。
- Image Builder コンソールを開きます。
- [インフラストラクチャを編集] を選択します。
- [編集] を選択し、[イメージのビルドに関する問題をトラブルシューティングするための設定を指定する] を選択します。
- [インスタンス設定] を選択し、[失敗時にインスタンスを終了する] をオフにします。
注: detailedoutput.json ログファイルには、コンポーネントが失敗またはタイムアウトした理由が記載されています。application.log ファイルには、デバッグレベルのトラブルシューティング情報が記載されています。
最後に、ドキュメントの YAML スキーマにある timeoutSeconds パラメータ値を確認します。デフォルト値は 7200 です。Image Builder がタイムアウトするまでの時間を延ばすには、YAML ドキュメントの値を更新します。値を -1 にすると無制限になります。
関連するコンテンツ
質問済み 1年前
質問済み 1年前
