Skip to content

Commit 65af77d

Browse files
committed
feat: enable s3,ssm and ecr endpoints for VPC and Public Subnet on standard network for AWS
This setup allow us to move things to S3 and reuse them internally without extra cost (no internet access required), same for ecr images and ssm. Signed-off-by: Adrian Riobo <[email protected]>
1 parent 83fd523 commit 65af77d

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

pkg/provider/aws/modules/network/standard/standard.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ func DefaultNetworkRequest(name, regionName string) NetworkRequest {
8989
return NetworkRequest{
9090
Name: name,
9191
CIDR: DefaultCIDRNetwork,
92+
Region: regionName,
9293
AvailabilityZones: azs,
9394
PublicSubnetsCIDRs: GeneratePublicSubnetCIDRs(azCount),
9495
PrivateSubnetsCIDRs: GeneratePrivateSubnetCIDRs(azCount),
@@ -166,6 +167,7 @@ func (r NetworkRequest) managePublicSubnets(mCtx *mc.Context, vpc *ec2.Vpc,
166167
VPC: vpc,
167168
InternetGateway: igw,
168169
CIDR: r.PublicSubnetsCIDRs[i],
170+
Region: r.Region,
169171
AvailabilityZone: r.AvailabilityZones[i],
170172
Name: fmt.Sprintf("%s%s%d", namePrefix, r.Name, i),
171173
AddNatGateway: r.checkIfNatGatewayRequired(i),

pkg/provider/aws/services/vpc/subnet/public.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ type PublicSubnetRequest struct {
1313
VPC *ec2.Vpc
1414
InternetGateway *ec2.InternetGateway
1515
CIDR string
16+
Region string
1617
AvailabilityZone string
1718
Name string
1819
AddNatGateway bool
@@ -89,6 +90,11 @@ func (r PublicSubnetRequest) Create(ctx *pulumi.Context, mCtx *mc.Context) (*Pub
8990
if err != nil {
9091
return nil, err
9192
}
93+
// Manage endpoints
94+
err = endpoints(ctx, r.Name, r.Region, r.VPC, sn, rt)
95+
if err != nil {
96+
return nil, err
97+
}
9298
return &PublicSubnetResources{
9399
Subnet: sn,
94100
RouteTable: rt,
@@ -97,3 +103,60 @@ func (r PublicSubnetRequest) Create(ctx *pulumi.Context, mCtx *mc.Context) (*Pub
97103
NatGatewayEip: nEip},
98104
nil
99105
}
106+
107+
func endpoints(ctx *pulumi.Context, name, region string,
108+
vpc *ec2.Vpc, sn *ec2.Subnet, rt *ec2.RouteTable) error {
109+
sg, err := ec2.NewSecurityGroup(ctx,
110+
fmt.Sprintf("%s-%s", "sg-endpoints", name),
111+
&ec2.SecurityGroupArgs{
112+
VpcId: vpc.ID(),
113+
Ingress: ec2.SecurityGroupIngressArray{
114+
&ec2.SecurityGroupIngressArgs{
115+
Protocol: pulumi.String("tcp"),
116+
FromPort: pulumi.Int(443),
117+
ToPort: pulumi.Int(443),
118+
CidrBlocks: pulumi.StringArray{vpc.CidrBlock},
119+
},
120+
},
121+
})
122+
if err != nil {
123+
return err
124+
}
125+
_, err = ec2.NewVpcEndpoint(ctx,
126+
fmt.Sprintf("%s-%s", "endpoint-s3", name),
127+
&ec2.VpcEndpointArgs{
128+
VpcId: vpc.ID(),
129+
ServiceName: pulumi.Sprintf("com.amazonaws.%s.s3", region),
130+
VpcEndpointType: pulumi.String("Gateway"),
131+
RouteTableIds: pulumi.StringArray{rt.ID()},
132+
SecurityGroupIds: pulumi.StringArray{sg.ID()},
133+
})
134+
if err != nil {
135+
return err
136+
}
137+
_, err = ec2.NewVpcEndpoint(ctx,
138+
fmt.Sprintf("%s-%s", "endpoint-ecr", name),
139+
&ec2.VpcEndpointArgs{
140+
VpcId: vpc.ID(),
141+
ServiceName: pulumi.Sprintf("com.amazonaws.%s.ecr.dkr", region),
142+
VpcEndpointType: pulumi.String("Interface"),
143+
SubnetIds: pulumi.StringArray{sn.ID()},
144+
SecurityGroupIds: pulumi.StringArray{sg.ID()},
145+
})
146+
if err != nil {
147+
return err
148+
}
149+
_, err = ec2.NewVpcEndpoint(ctx,
150+
fmt.Sprintf("%s-%s", "endpoint-ssm", name),
151+
&ec2.VpcEndpointArgs{
152+
VpcId: vpc.ID(),
153+
ServiceName: pulumi.Sprintf("com.amazonaws.%s.ssm", region),
154+
VpcEndpointType: pulumi.String("Interface"),
155+
SubnetIds: pulumi.StringArray{sn.ID()},
156+
SecurityGroupIds: pulumi.StringArray{sg.ID()},
157+
})
158+
if err != nil {
159+
return err
160+
}
161+
return nil
162+
}

0 commit comments

Comments
 (0)