

# トラブルシューティング
<a name="microvms-troubleshooting"></a>

このセクションでは、AWS Lambda MicroVMs を操作するときに発生する一般的な問題のデバッグとトラブルシューティングを行う方法について説明します。

## シェルアクセス
<a name="microvms-troubleshooting-shell"></a>

シェルアクセスを使用して、実行中の MicroVM に直接接続し、デバッグとトラブルシューティングを行います。

MicroVM シェルには、次の 2 つの方法で接続できます。
+ **コンソール** – Lambda コンソールで MicroVM を選択して [接続] を選択します。
+ **CLI** – `create-microvm-shell-auth-token` でシェルトークンを生成し、そのトークンを使用して接続を確立します。

シェルトークンを生成して接続します。

```
aws lambda-microvms create-microvm-shell-auth-token \
  --microvm-identifier <id> --expiration-in-minutes 30
# In Console: select MicroVM -> Connect
# In shell: ctr task ls, then ctr task exec -t --exec-id shell <id> /bin/sh
```

MicroVM は、`SHELL_INGRESS` ネットワークコネクタ (`arn:aws:lambda:{{us-east-1}}:aws:network-connector:aws-network-connector:SHELL_INGRESS`) で実行されている必要があります。MicroVM がこのコネクタで起動されていない場合、`create-microvm-shell-auth-token` は `ValidationException` を返します。

その他の問題が発生した場合:
+ 終了した MicroVM の `get-microvm` レスポンスの `terminationMessage` フィールドを確認します。
+ CloudWatch ビルドログでイメージ作成の問題を確認します。
+ `FAILED` 状態のネットワークコネクタの `StateReason` フィールドを確認します。

## トラブルシューティング
<a name="microvms-troubleshooting-troubleshooting"></a>

このセクションでは、Lambda MicroVMs で作業する際の一般的な問題の解決策を示します。


| 症状 | 考えられる原因と解決方法 | 
| --- | --- | 
| イメージビルドが失敗する (CREATION\_FAILED) | /aws/lambda/microvms/<image-name> のビルドログを確認します。Dockerfile 構文、Amazon S3 アクセス許可、ベースイメージの可用性を確認します。ローカルで docker build を実行して再現します。 | 
| MicroVM が PENDING から遷移しない | 待機して再試行します。遷移しない場合、サービスの正常性を確認します。同時実行クォータが制限に達していないことを確認します。 | 
| 再開後にアプリケーションが応答しない | /resume ライフサイクルフックを実装して接続を再確立し、状態を検証します。再開後にアプリがポート 8080 (または設定されたポート) にバインドされていることを確認します。 | 
| エンドポイントからの 502 Bad Gateway | アプリケーションがクラッシュしたか、リッスンしていません。ランタイムログを確認します。Dockerfile の EXPOSE と CMD を確認します。自動再開の場合、MicroVM が再開に失敗した可能性があります (get-microvm から状態を確認します)。 | 
| 429 Too Many Requests | リクエストレートを超えました。エクスポネンシャルバックオフとジッターを使用して再試行します。 | 
| 接続が失敗する | アイドルタイムアウトがトリガーされました。ping/pong キープアライブを実装します。または、アイドルポリシーで maxIdleDurationSeconds を拡張します。 | 
| エンドポイントでの高レイテンシー | 帯域幅の飽和。トラフィックが MicroVM サイズの帯域幅機能を超えているかどうかを確認します。より大きなサイズにスケールアップします。 | 
| 認証トークンの有効期限が切れています (403) | トークンの有効期限は設定可能です。古いトークンの有効期限が切れる前に新しいトークンを生成します。クライアントにトークン更新ロジックを実装します。 | 
| VPC 出力が機能しない | ネットワークコネクタが ACTIVE 状態であることを確認します。セキュリティグループルールがアウトバウンドトラフィックを許可していることを確認します。サブネットにターゲットリソースへのルートがあることを確認します。 | 

## 一般的なエラー (イメージの作成)
<a name="microvms-troubleshooting-image-errors"></a>


| エラー | 原因 | ソリューション | 
| --- | --- | --- | 
| S3\_ACCESS\_DENIED | ビルドロールに Amazon S3 アーティファクトを取得するアクセス許可がありません。 | アーティファクトバケットの s3:GetObject アクセス許可を追加します。 | 
| S3\_NO\_SUCH\_KEY | アーティファクトキーがバケットに存在しません。 | Amazon S3 パスが正しいことを確認します。 | 
| S3\_NO\_SUCH\_BUCKET | Amazon S3 バケットが存在しません | バケット名を確認し、バケットが作成されていることを確認します。 | 
| S3\_INVALID\_OBJECT | アーティファクトが Glacier または直接アクセスできないストレージクラスにあります。 | アーティファクトを標準ストレージクラスに移動します。 | 
| S3\_CROSS\_REGION\_ACCESS\_DENIED | アーティファクトが MicroVM イメージとは異なるリージョンにある。 | アーティファクトが MicroVM イメージと同じリージョンにあることを確認します。 | 
| ARCHIVE\_DOCKERFILE\_NOT\_FOUND | Zip アーカイブのルートディレクトリに Dockerfile がありません。 | zip アーカイブのルートに Dockerfile を追加します。 | 
| ARCHIVE\_INVALID | アーカイブファイルが有効な ZIP ではないか、破損しています。 | zip アーカイブを再作成し、再度アップロードします。 | 
| CONTAINER\_BUILD\_FAILED | 無効な Dockerfile 命令、ファイルの欠如、または構文エラー。 | docker build を使用してローカルで Dockerfile をデバッグします。 | 
| DISK\_STORAGE\_FULL | MicroVM のビルド中にストレージが不足しました。 | アーティファクトのサイズを縮小するか、サポートに連絡してください。 | 
| INTERNAL\_PLATFORM\_ERROR | 内部エラーが発生しました。 | オペレーションを再試行する。問題が解決しない場合は、サポートに連絡してください。 | 

## ネットワークコネクタのトラブルシューティング
<a name="microvms-troubleshooting-connector-errors"></a>


| エラーコード | 原因 | ソリューション | 
| --- | --- | --- | 
| DisallowedByVpcEncryptionControl | VPC には、暗号化されていないネットワークインターフェイスやトラフィックを防止する暗号化コントロールポリシーがあります。Lambda は、暗号化要件を満たす ENI を作成できません。 | VPC 暗号化コントロールの除外リストに Lambda を追加します。除外できない場合は、制限付きの暗号化コントロールが適用されていない VPC またはサブネットを使用します。 | 
| Ec2RequestLimitExceeded | Lambda は EC2 API コール (CreateNetworkInterface や DescribeSubnets など) を行って接続をセットアップします。同時実行 EC2 API コールが多すぎると、スロットリングが発生します。 | 少し待ってからオペレーションを再試行します。問題が解決しない場合は、ネットワークコネクタの同時オペレーションを減らすか、AWS サポートを介して EC2 API スロットリング制限の引き上げをリクエストします。 | 
| InsufficientRolePermissions | 必要な EC2 アクセス許可がオペレーターロールにありません。 | 必要な EC2 ネットワークアクセス許可が IAM ロールにあることを確認します。 | 
| InternalError | ネットワークコネクタリクエストの処理中に Lambda サービス内で予期しないエラーが発生しました。 | オペレーションを再試行する。複数回再試行しても問題が解決しない場合は、AWS サポートにネットワークコネクタ ARN とおおよそのタイムスタンプをお知らせください。 | 
| InvalidSecurityGroup | セキュリティグループ ID が存在しないか、削除されています。または指定されたサブネットと同じ VPC に属していません。 | すべてのセキュリティグループ ID が存在し、サブネットと同じ VPC に属していることを確認します。aws ec2 describe-security-groups --group-ids <sg-id> を使用して検証します。 | 
| InvalidSubnet | サブネット ID が存在しないか、削除されているか、予期されたものとは異なる VPC に属しています。 | すべてのサブネット ID が存在し、正しい VPC に属していることを確認します。aws ec2 describe-subnets --subnet-ids <subnet-id> を使用して検証します。 | 
| SubnetOutOfIPAddresses | サブネットの CIDR ブロックの上限に達しました。すべての IP が他のリソース (ENI、インスタンスなど) に割り当てられるため、Lambda はネットワークインターフェイスを作成できません。 | 未使用の ENI/インスタンスを削除するか、使用可能な容量を持つ別のサブネットを使用して IP アドレスを解放します。ネットワークコネクタには、より大きなサブネット (/24 以上など) を検討してください。 | 