TerraformでLambdaに固定グローバルIPを振る

プログラミング

概要

今回は接続するサーバーや環境によって、グローバル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
最後まで読んで頂きありがとうございます!

面白かった、参考になった、と少しでも感じて頂けましたら
ブログランキング上位になるための応援をして頂けないでしょうか!
今後も面白い記事を更新していきますので、ぜひ宜しくおねがいします!
プログラミング
【TechGrowth】

コメント