Closed4
VPCエンドポイントを設定しているのにECSタスクがECRへアクセスできない問題のメモ
以下エラーが出ていた際の対応内容をメモ
※IPは伏せ字にしています
ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 3 time(s): RequestError: send request failed caused by: Post "https://api.ecr.ap-northeast-1.amazonaws.com/": dial tcp XXX.XXX.XXX.XXX:443: i/o timeout. Please check your task network configuration.
一応以下記事を参考にしていた
結論から言うと、セキュリティグループの設定が足りていなかった。
色々訳ありでL1で以下のようにCDKでVPCエンドポイントを作っていた
new CfnVPCEndpoint(this, 'ECRInterfaceEndpoint', {
vpcEndpointType: 'Interface',
serviceName: `com.amazonaws.${this.region}.ecr.api`,
vpcId: vpc.vpcId,
subnetIds: [protectedSubnet0.subnetId, protectedSubnet1.subnetId],
privateDnsEnabled: true,
});
この場合、セキュリティグループがデフォルトのものが設定されるみたく、
Post "https://api.ecr.ap-northeast-1.amazonaws.com/": dial tcp XXX.XXX.XXX.XXX:443
へのアクセスはもちろん許可されていないため、タイムアウトとなっていた。
このあたり勝手にやってくれるのかなとかおもってたけど、
ちゃんと設定する必要があるみたいです。
対応内容
const securityGroup = new SecurityGroup(this, 'InterfaceEndpointSecurityGroup', {
securityGroupName: 'InterfaceEndpointSecurityGroup',
vpc,
});
new CfnVPCEndpoint(this, 'ECRInterfaceEndpoint', {
vpcEndpointType: 'Interface',
serviceName: `com.amazonaws.${this.region}.ecr.api`,
vpcId: vpc.vpcId,
subnetIds: [protectedSubnet0.subnetId, protectedSubnet1.subnetId],
securityGroupIds: [securityGroup.securityGroupId],
privateDnsEnabled: true,
});
で、ECSサービスのセキュリティグループからのHTTPS, Port:443のインバウンドを許可してあげればOK
このスクラップは2023/09/06にクローズされました