App RunnerからCognitoへ接続する際にタイムアウトが発生し少し時間がかかってしまったので整理
前提
- App Runnerの構築とCognitoのユーザープールおよびIDトークンを用いた検証の実装などは済んでいる状態
- App RunnerはVPC Connectorを利用してVPC内のリソースに接続している
App RunnerのVPC Connectorなど参考になる記事
https://dev.classmethod.jp/articles/introduction-2024-aws-app-runner/
つまずいたところ
App RunnerからCognitoのリクエストでタイムアウト
原因:ネットワーク
- App Runnerはデフォルトではインターネット経由で外部にアクセス
- ただし、VPC Connectorを利用すると、VPCネットワークに接続してプライベートにアクセスになる
- CognitoはVPCの外にあるので、VPC Connecotr利用する場合App Runnerから接続できない状態になっていた。
対応:NatGatewayを設置
terraformで管理している場合は以下のようなリソースを追加すればOK
main.tf
/* ===================================
// NAT Gateway
// =================================== */
// public subnet
resource "aws_subnet" "app_public_subnet1" {
vpc_id = aws_vpc.app_vpc.id
cidr_block = "172.16.10.0/24"
availability_zone = "ap-northeast-1a"
tags = {
Name = "app_public_subnet1"
}
}
resource "aws_internet_gateway" "app_igw" {
vpc_id = aws_vpc.app_vpc.id
}
// ルートテーブル for NAT Gateway
resource "aws_route_table" "app_public_route_table" {
vpc_id = aws_vpc.app_vpc.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.app_igw.id
}
}
// ルートテーブルに紐づくサブネット
resource "aws_route_table_association" "public_route_table_association" {
subnet_id = aws_subnet.app_public_subnet1.id
route_table_id = aws_route_table.app_public_route_table.id
}
// EIP
resource "aws_eip" "nat_eip" {
domain = "vpc"
}
resource "aws_nat_gateway" "nat_gateway" {
allocation_id = aws_eip.nat_eip.id
subnet_id = aws_subnet.app_public_subnet1.id
}
//ルートテーブルfor private subnet
resource "aws_route_table" "app_private_route_table" {
vpc_id = aws_vpc.app_vpc.id
// すべての外部トラフィックをNAT Gatewayにルーティング
route {
cidr_block = "0.0.0.0/0"
nat_gateway_id = aws_nat_gateway.nat_gateway.id
}
}
// apprunner sgのセキュリティグループ
resource "aws_security_group" "app_runner_sg" {
name = var.app_runner_sg_name
vpc_id = var.vpc_id
description = "Security group for App Runner"
# Outboundルール: HTTPS (443)
egress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] # NAT Gateway へのアクセスは0.0.0.0/0を使用します
}
}
これでネットワークの問題は解決するはずです!
関連
上記を解決したもののCognitoへの接続時に509エラーになったのでそれについては以下に書いています。
https://qiita.com/yukiyoshimura/items/0b6e31b117853049c228