Amazon Elastic Container Service (Amazon ECS) タスクが起動しないため、トラブルシューティングしたいです。Amazon Elastic File System (Amazon EFS) ファイルシステム の DNS 名に問題があり、タスクを開始できません。
簡単な説明
ECS タスク定義で EFS ファイルシステムとコンテナマウントポイントを参照する際、ECS はコンテナにファイルシステムをマウントします。EFS ボリュームのマウントで ECS タスク定義を使用して ECS タスクを実行すると、タスクは失敗し、次のエラーが発生します。
"ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: Failed to resolve "fs-<id>.efs.<region>.amazonaws.com" - check that your file system ID is correct, and ensure that the VPC has an EFS mount target for this file system ID. See https://docs.aws.amazon.com/console/efs/mount-dns-name for more detail. Attempting to lookup mount target ip address using botocore. Failed to import necessary dependency botocore, please install botocore first."
このエラーは、次の原因で発生します。
- AmazonProvidedDNS ではなく、仮想プライベートクラウド (VPC) のカスタムドメイン名とサーバーを使用している場合。
- VPC DNS のホスト名が無効の場合。
- EFS にマウントターゲットがないか、ターゲットが ECS タスクと同じアベイラビリティーゾーンに配置されていない場合。
DNS 名で EFS ファイルシステムが解決されない場合、ECS は efs-util を使用して botocore をインストールし、マウントターゲットの IP アドレスを取得します。botocore は ECS 最適化 AMI にデフォルトではインストールされていないため、タスクは失敗します。
解決策
VPC にカスタムドメイン名とサーバーがある場合
Amazon EC2 で実行するタスク
注: これらの手順は、Amazon EC2 インスタンスにのみ適用されます。
1.SSH を使用してコンテナインスタンスに接続します。botocore をインストールするには、次のコマンドを実行します。
sudo pip3 install botocore --upgrade
インスタンスの起動時に、コンテナインスタンスの Auto Scaling グループで構成する UserData に botocore を含め、インストールします。
2.コンテナインスタンスの AWS Identity and Access Management (IAM) ロールに次の権限を追加します。
elasticfilesystem:DescribeMountTargets
ec2:DescribeAvailabilityZones
Fargate で実行するタスク
カスタムドメインネームサーバーが AWS リソースを解決できるようにするには、条件付き DNS 転送を構成します。
注: AWS Fargate インスタンスでは、botocore をインストールするためにインスタンスにアクセスすることはできません。DNS 名を解決する必要があります。
VPC DNS でホスト名解決が無効の場合
DNS 属性を確認するには、「DNS 属性」の手順を実行します。DNS でホスト名解決が無効の場合は有効化し、ECS タスクが実行されているかどうかを確認します。
EFS にマウントターゲットがないか、ターゲットが ECS タスクと同じアベイラビリティーゾーンに配置されていない場合
EFS ファイルシステムにはマウントターゲットが存在し、ターゲットは ECS タスクと同じアベイラビリティーゾーンに配置する必要があります。詳細については、「マウントターゲットとセキュリティグループの作成と管理」を参照してください。
関連情報
DNS 名を解決できない場合に、botocore を使用してマウントターゲットの IP アドレスを取得する (GitHub のウェブサイト)