概要
今回は接続するサーバーや環境によって、グローバルIP制限が掛けられていることが多々あるかと思います。そのようなときにLambdaから固定IPを振る必要があるため、Terraformでどのようにresouceを作っていけばよいか解説します。
全体の構成としては以下のような形になり、VPC配下にパブリックサブネットとプライベートサブネットを作成します。その後パブリックサブネットのルートにはIGW(インターネットゲートウェイ)を入れ、プライベートサブネットのルートにNATゲートウェイを入れます。そしてNATゲートウェイにEIPを付与すればLambdaが固定IPでインターネットに出られるようになります。
※今回VPCはデフォルトで作成されているものを利用することとします。
EIPとIGWとNATゲートウェイの作成
まずEIPを作成します。適宜リソース名などは必要に応じて変更してください。
resource "aws_eip" "eip" {
vpc = true
tags = {
Name = "EIP"
}
}
続いてIGWを作成します。
resource "aws_internet_gateway" "gw" {
vpc_id = "vpc-id" //利用するvpcのidを入力する
tags = {
Name = "gw"
}
}
続いてNATゲートウェイを作成します。subnet_idの部分は後ほどプライベートサブネットを作成します。
resource "aws_nat_gateway" "nat_gateway" {
allocation_id = aws_eip.eip.id
subnet_id = aws_subnet.private_subnet.id
connectivity_type = "public"
tags = {
Name = "Nat Gateway"
}
}
サブネットを作成する
まずパブリックサブネットを作成し、ルートテーブルにIGWを紐付けます。
resource "aws_subnet" "public_subnet" {
availability_zone = "ap-northeast-1a"
vpc_id = "vpc-id" //利用するvpcのidを入力する
cidr_block = "172.31.16.0/20" // VPCのCidrによって変更してください
tags = {
Name = "Public Subnet"
}
}
resource "aws_route_table" "public_subnet_route_table" {
vpc_id = "vpc-id" //利用するvpcのidを入力する
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.gw.id
}
tags = {
Name = " Public Subnet Route Table"
}
}
resource "aws_route_table_association" "public_subnet_route_table_association" {
subnet_id = aws_subnet.public_subnet.id
route_table_id = aws_route_table.public_subnet_route_table.id
}
続いてプライベートサブネットを作成し、NATゲートウェイをルートテーブルに入れます。
resource "aws_subnet" "private_subnet" {
availability_zone = "ap-northeast-1a"
vpc_id = "vpc-id" //利用するvpcのidを入力する
cidr_block = "172.31.32.0/20" // VPCのCidrによって変更してください
tags = {
Name = "Private Subnet"
}
}
resource "aws_route_table" "private_subnet_route_table" {
vpc_id = "vpc-id" //利用するvpcのidを入力する
route {
cidr_block = "0.0.0.0/0"
nat_gateway_id = aws_nat_gateway.nat_gateway.id
}
tags = {
Name = "Private Subnet Route Table"
}
}
resource "aws_route_table_association" "private_subnet_route_table_association" {
subnet_id = aws_subnet.private_subnet.id
route_table_id = aws_route_table.private_subnet_route_table.id
}
Lambdaへの紐付け
まずセキュリティグループを作成します。今回は全ての通信を許可しておきます。
resource "aws_security_group" "security_group" {
name = "SecurityGroup"
description = " security group"
vpc_id = "vpc-id" //利用するvpcのidを入力する
ingress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
tags = {
Name = " Security Group"
}
}
そして最後にLambdaをプライベートサブネット内に配置します。aws_lambda_functionのresouce内に以下を記載してください。
vpc_config {
security_group_ids = [aws_security_group.security_group.id]
subnet_ids = [aws_subnet.private_subnet.id]
}
終わりに
これでLambdaへ固定IPを振ることができたと思います。Terraformは日々アップデートが入り書き方が変わっていく可能性もあるので、上手く行かなかったら公式サイトを読んでみてください。
Terraform Registry
コメント