プライベートサブネットでECSを実行
プライベートサブネットでECSを実行
ECSはタスク実行時にVPC外のリソースにアクセスする必要があります。
パブリックサブネットに配置する場合は特に必要ありませんが、プライベートサブネットに配置する場合は、それらリソースへのアクセス手段が必要になります。
前提
- ECRのイメージを使用
- コンテナのログドライバーとして
awslogsを使用
タスク実行時にアクセスするリソース
- ECR: イメージのマニフェスト情報
- Amazon S3
ECRにはイメージのマニフェスト情報が配置されており、実際のコンテナレイヤー情報はS3に配置されている観点から必要 ref. エンドポイントを使用してプライベートサブネットでECSを使用する
- CloudWatch:ログドライバーとして
awslogsを設定している場合
接続手段
- NATゲートウェイを使用
- VPC エンドポイントを使用
今回はVPC エンドポイントを使用する例を記載します。
VPC エンドポイント
| サービス名 | タイプ | 内容 |
|---|---|---|
| com.amazonaws.ap-northeast-1.ecr.dkr | Interface | 「ECRへdocker pullやdocker pushを実行する時に利用されるエンドポイント」(エンドポイントを使用してプライベートサブネットでECSを使用する) |
| com.amazonaws.ap-northeast-1.ecr.api | Interface | ECRのAPI |
| com.amazonaws.ap-northeast-1.s3 | Gateway | S3のエンドポイント |
| com.amazonaws.ap-northeast-1.logs | Interface | CloudWatchのエンドポイント |
InterfaceタイプのVPCエンドポイントはENIなのでセキュリティグループを割り当てます。
セキュリティグループはステーフルですが、タスク実行時にエンドポイント側発信のHTTPSアクセスがあるのでHTTPSを許可する必要があります。
タスクからVPC外のリソースにアクセス
SQS
VPCエンドポイントが設定されていない状況。
Error executing "SendMessage" on "https://sqs.xxxxx"; AWS HTTP error: cURL error 6: Could not resolve host: sqs.ap-northeast-1.amaz (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://sqs.xxxxx
参考
- https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/vpc-endpoints.html
- https://aws.amazon.com/jp/premiumsupport/knowledge-center/ecs-fargate-tasks-private-subnet/?utm_source=pocket_mylist
- https://dev.classmethod.jp/articles/privatesubnet_ecs/
- https://blog.not75743.com/post/ecs_private/