Last active
July 14, 2021 19:09
-
-
Save cm-iwaki/53afee67f3750bf69d78d4e941f1c7b4 to your computer and use it in GitHub Desktop.
VPC endpoint for Amazon SES SMTP endpoint.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
terraform { | |
required_version = ">= 0.12" | |
backend "s3" { | |
bucket = "<bucket name>" | |
key = "terraform.tfstate" | |
region = "ap-northeast-1" | |
encrypt = true | |
acl = "bucket-owner-full-control" | |
} | |
} | |
provider "aws" { | |
region = "us-west-2" | |
} | |
#------------------------------------------------------------------------------ | |
# VPC | |
#------------------------------------------------------------------------------ | |
resource "aws_vpc" "test_vpc" { | |
cidr_block = "10.0.0.0/16" | |
enable_dns_hostnames = true | |
tags = { | |
Name = "test_vpc" | |
} | |
} | |
#------------------------------------------------------------------------------ | |
# Private Subnet | |
#------------------------------------------------------------------------------ | |
resource "aws_subnet" "test_pri_subnet" { | |
vpc_id = aws_vpc.test_vpc.id | |
cidr_block = "10.0.0.0/24" | |
availability_zone = "us-west-2a" | |
tags = { | |
Name = "test_pri_subnet" | |
} | |
} | |
#------------------------------------------------------------------------------ | |
# Route Table | |
#------------------------------------------------------------------------------ | |
resource "aws_route_table" "test_rtb_pri" { | |
vpc_id = aws_vpc.test_vpc.id | |
tags = { | |
Name = "test_rtb_pri" | |
} | |
} | |
#------------------------------------------------------------------------------ | |
# Assosiation for test_rtb_pri | |
#------------------------------------------------------------------------------ | |
resource "aws_route_table_association" "test_rtb_pri" { | |
route_table_id = aws_route_table.test_rtb_pri.id | |
subnet_id = aws_subnet.test_pri_subnet.id | |
} | |
#------------------------------------------------------------------------------ | |
# Security Group for ec2 | |
#------------------------------------------------------------------------------ | |
resource "aws_security_group" "ec2_sg" { | |
name = "ec2_sg" | |
vpc_id = aws_vpc.test_vpc.id | |
description = "ec2_sg" | |
egress { | |
from_port = 0 | |
protocol = "-1" | |
to_port = 0 | |
cidr_blocks = ["0.0.0.0/0"] | |
} | |
tags = { | |
Name = "ec2_sg" | |
} | |
} | |
#------------------------------------------------------------------------------ | |
# Security Group for vpcendpoint | |
#------------------------------------------------------------------------------ | |
resource "aws_security_group" "vpce_sg" { | |
name = "vpce_sg" | |
vpc_id = aws_vpc.test_vpc.id | |
description = "vpce_sg" | |
ingress { | |
from_port = 443 | |
to_port = 443 | |
protocol = "tcp" | |
cidr_blocks = [aws_vpc.test_vpc.cidr_block] | |
} | |
ingress { | |
from_port = 25 | |
to_port = 25 | |
protocol = "tcp" | |
cidr_blocks = [aws_vpc.test_vpc.cidr_block] | |
} | |
ingress { | |
from_port = 465 | |
to_port = 465 | |
protocol = "tcp" | |
cidr_blocks = [aws_vpc.test_vpc.cidr_block] | |
} | |
ingress { | |
from_port = 587 | |
to_port = 587 | |
protocol = "tcp" | |
cidr_blocks = [aws_vpc.test_vpc.cidr_block] | |
} | |
ingress { | |
from_port = 2465 | |
to_port = 2465 | |
protocol = "tcp" | |
cidr_blocks = [aws_vpc.test_vpc.cidr_block] | |
} | |
ingress { | |
from_port = 2587 | |
to_port = 2587 | |
protocol = "tcp" | |
cidr_blocks = [aws_vpc.test_vpc.cidr_block] | |
} | |
egress { | |
from_port = 0 | |
protocol = "-1" | |
to_port = 0 | |
cidr_blocks = ["0.0.0.0/0"] | |
} | |
tags = { | |
Name = "vpce_sg" | |
} | |
} | |
#------------------------------------------------------------------------------ | |
# EC2 | |
#------------------------------------------------------------------------------ | |
data "aws_ami" "amazon_linux_2" { | |
most_recent = true | |
filter { | |
name = "name" | |
values = ["amzn2-ami-hvm-*-x86_64-gp2"] | |
} | |
owners = ["137112412989"] | |
} | |
resource "aws_instance" "test_ec2" { | |
ami = data.aws_ami.amazon_linux_2.id | |
iam_instance_profile = aws_iam_role.test_ec2_role.name | |
instance_type = "t2.small" | |
subnet_id = aws_subnet.test_pri_subnet.id | |
tags = { | |
"Name" = "test_ec2" | |
} | |
vpc_security_group_ids = [aws_security_group.ec2_sg.id] | |
} | |
#------------------------------------------------------------------------------ | |
# IAM Role | |
#------------------------------------------------------------------------------ | |
resource "aws_iam_role" "test_ec2_role" { | |
assume_role_policy = jsonencode( | |
{ | |
Statement = [ | |
{ | |
Action = "sts:AssumeRole" | |
Effect = "Allow" | |
Principal = { | |
Service = "ec2.amazonaws.com" | |
} | |
}, | |
] | |
Version = "2012-10-17" | |
} | |
) | |
name = "test_ec2_role" | |
tags = { | |
"Name" = "test_ec2_role" | |
} | |
} | |
resource "aws_iam_role_policy_attachment" "test_ec2_role" { | |
role = aws_iam_role.test_ec2_role.name | |
policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore" | |
} | |
resource "aws_iam_instance_profile" "test_ec2_role" { | |
name = "test_ec2_role" | |
role = aws_iam_role.test_ec2_role.name | |
} | |
#------------------------------------------------------------------------------ | |
# VPC endpoint for Session Manager | |
#------------------------------------------------------------------------------ | |
resource "aws_vpc_endpoint" "ssm_vpce" { | |
security_group_ids = [aws_security_group.vpce_sg.id] | |
service_name = "com.amazonaws.us-west-2.ssm" | |
vpc_endpoint_type = "Interface" | |
subnet_ids = [aws_subnet.test_pri_subnet.id] | |
private_dns_enabled = true | |
tags = { | |
"Name" = "ssm_vpce" | |
} | |
vpc_id = aws_vpc.test_vpc.id | |
} | |
resource "aws_vpc_endpoint" "ssmmessages_vpce" { | |
security_group_ids = [aws_security_group.vpce_sg.id] | |
service_name = "com.amazonaws.us-west-2.ssmmessages" | |
vpc_endpoint_type = "Interface" | |
subnet_ids = [aws_subnet.test_pri_subnet.id] | |
private_dns_enabled = true | |
tags = { | |
"Name" = "ssmmessages_vpce" | |
} | |
vpc_id = aws_vpc.test_vpc.id | |
} | |
resource "aws_vpc_endpoint" "ec2messages_vpce" { | |
security_group_ids = [aws_security_group.vpce_sg.id] | |
service_name = "com.amazonaws.us-west-2.ec2messages" | |
vpc_endpoint_type = "Interface" | |
subnet_ids = [aws_subnet.test_pri_subnet.id] | |
private_dns_enabled = true | |
tags = { | |
"Name" = "ec2messages_vpce" | |
} | |
vpc_id = aws_vpc.test_vpc.id | |
} | |
#------------------------------------------------------------------------------ | |
# VPC endpoint for SMTP endpoint | |
#------------------------------------------------------------------------------ | |
resource "aws_vpc_endpoint" "email_vpce" { | |
security_group_ids = [aws_security_group.vpce_sg.id] | |
service_name = "com.amazonaws.us-west-2.email-smtp" | |
vpc_endpoint_type = "Interface" | |
subnet_ids = [aws_subnet.test_pri_subnet.id] | |
private_dns_enabled = true | |
tags = { | |
"Name" = "email_vpce" | |
} | |
vpc_id = aws_vpc.test_vpc.id | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment