@gugananuvem/aws-local-simulator 1.0.35 → 1.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +662 -658
- package/package.json +10 -3
- package/src/config/default-config.js +71 -0
- package/src/config/env-loader.js +4 -2
- package/src/middleware/authorization.js +271 -0
- package/src/middleware/cloudtrail-logger.js +333 -0
- package/src/middleware/error-handler.js +138 -0
- package/src/middleware/index.js +79 -0
- package/src/middleware/policy-enforcement.js +407 -0
- package/src/server.js +74 -4
- package/src/services/acm/index.js +66 -0
- package/src/services/acm/models/certificate.js +202 -0
- package/src/services/acm/server.js +224 -0
- package/src/services/acm/simulator.js +293 -0
- package/src/services/alb/index.js +104 -0
- package/src/services/alb/models/loadBalancer.js +88 -0
- package/src/services/alb/models/targetGroup.js +128 -0
- package/src/services/alb/server.js +160 -0
- package/src/services/alb/simulator.js +262 -0
- package/src/services/apigateway/index.js +22 -0
- package/src/services/apigateway/server.js +247 -35
- package/src/services/apigateway/simulator.js +780 -26
- package/src/services/asg/index.js +100 -0
- package/src/services/asg/models/autoScalingGroup.js +110 -0
- package/src/services/asg/models/launchTemplate.js +41 -0
- package/src/services/asg/models/scalingPolicy.js +51 -0
- package/src/services/asg/server.js +236 -0
- package/src/services/asg/simulator.js +410 -0
- package/src/services/aurora/cluster-manager.js +731 -0
- package/src/services/aurora/data-api.js +514 -0
- package/src/services/aurora/db-engine.js +270 -0
- package/src/services/aurora/index.js +159 -0
- package/src/services/aurora/rds-api.js +189 -0
- package/src/services/aurora/server.js +213 -0
- package/src/services/aurora/sql-translator.js +334 -0
- package/src/services/cloudformation/index.js +2 -2
- package/src/services/cloudformation/server.js +1 -0
- package/src/services/cloudfront/cache-engine.js +225 -0
- package/src/services/cloudfront/geo-restrictions.js +377 -0
- package/src/services/cloudfront/index.js +220 -0
- package/src/services/cloudfront/models/behavior.js +158 -0
- package/src/services/cloudfront/models/distribution.js +284 -0
- package/src/services/cloudfront/models/index.js +99 -0
- package/src/services/cloudfront/models/invalidation.js +109 -0
- package/src/services/cloudfront/models/origin.js +155 -0
- package/src/services/cloudfront/origin-router.js +552 -0
- package/src/services/cloudfront/origin-validator.js +398 -0
- package/src/services/cloudfront/server.js +512 -0
- package/src/services/cloudfront/signed-url-generator.js +377 -0
- package/src/services/cloudfront/simulator.js +425 -0
- package/src/services/cloudfront/store.js +326 -0
- package/src/services/cloudshell/env-builder.js +27 -0
- package/src/services/cloudshell/index.js +48 -0
- package/src/services/cloudshell/routes.js +60 -0
- package/src/services/cloudshell/session-manager.js +226 -0
- package/src/services/cloudshell/static/.gitkeep +0 -0
- package/src/services/cloudshell/static/index.html +406 -0
- package/src/services/cloudshell/websocket-handler.js +107 -0
- package/src/services/cloudtrail/index.js +2 -3
- package/src/services/cloudtrail/server.js +68 -0
- package/src/services/cognito/server.js +4 -1
- package/src/services/dynamodb/server.js +4 -1
- package/src/services/dynamodb/simulator.js +2 -1
- package/src/services/ec2/index.js +101 -0
- package/src/services/ec2/instanceServer.js +311 -0
- package/src/services/ec2/models/ami.js +39 -0
- package/src/services/ec2/models/instance.js +98 -0
- package/src/services/ec2/models/networkInterface.js +74 -0
- package/src/services/ec2/models/securityGroup.js +71 -0
- package/src/services/ec2/server.js +350 -0
- package/src/services/ec2/simulator.js +436 -0
- package/src/services/eventbridge/server.js +36 -0
- package/src/services/eventbridge/simulator.js +230 -45
- package/src/services/iam/index.js +65 -0
- package/src/services/iam/middleware.js +99 -0
- package/src/services/iam/server.js +331 -0
- package/src/services/iam/simulator.js +1432 -0
- package/src/services/index.js +28 -0
- package/src/services/kinesis-analytics/index.js +105 -0
- package/src/services/kinesis-analytics/models/application.js +325 -0
- package/src/services/kinesis-analytics/models/index.js +12 -0
- package/src/services/kinesis-analytics/server.js +250 -0
- package/src/services/kinesis-analytics/simulator.js +407 -0
- package/src/services/kinesis-analytics/store.js +176 -0
- package/src/services/kinesis-data-streams/index.js +106 -0
- package/src/services/kinesis-data-streams/models/index.js +12 -0
- package/src/services/kinesis-data-streams/models/record.js +70 -0
- package/src/services/kinesis-data-streams/models/stream.js +280 -0
- package/src/services/kinesis-data-streams/server.js +255 -0
- package/src/services/kinesis-data-streams/simulator.js +514 -0
- package/src/services/kinesis-data-streams/store.js +163 -0
- package/src/services/kinesis-firehose/index.js +106 -0
- package/src/services/kinesis-firehose/models/delivery-stream.js +265 -0
- package/src/services/kinesis-firehose/models/index.js +10 -0
- package/src/services/kinesis-firehose/server.js +215 -0
- package/src/services/kinesis-firehose/simulator.js +388 -0
- package/src/services/kinesis-firehose/store.js +163 -0
- package/src/services/kms/server.js +4 -1
- package/src/services/lambda/index.js +26 -0
- package/src/services/lambda/server.js +12 -1
- package/src/services/lambda/simulator.js +4 -0
- package/src/services/opensearch/index.js +105 -0
- package/src/services/opensearch/models/document.js +115 -0
- package/src/services/opensearch/models/index.js +73 -0
- package/src/services/opensearch/server.js +310 -0
- package/src/services/opensearch/simulator.js +605 -0
- package/src/services/opensearch/store.js +162 -0
- package/src/services/organizations/control-tower-simulator.js +321 -0
- package/src/services/organizations/control-tower-store.js +182 -0
- package/src/services/organizations/iam-integration.js +413 -0
- package/src/services/organizations/index.js +172 -0
- package/src/services/organizations/models/index.js +13 -0
- package/src/services/organizations/models/invitation.js +48 -0
- package/src/services/organizations/models/organization.js +566 -0
- package/src/services/organizations/models/role.js +244 -0
- package/src/services/organizations/models/scp.js +131 -0
- package/src/services/organizations/server.js +736 -0
- package/src/services/organizations/simulator.js +593 -0
- package/src/services/organizations/store.js +235 -0
- package/src/services/organizations/vpc-integration.js +453 -0
- package/src/services/route53/index.js +67 -0
- package/src/services/route53/models/healthCheck.js +101 -0
- package/src/services/route53/models/hostedZone.js +37 -0
- package/src/services/route53/models/resourceRecord.js +106 -0
- package/src/services/route53/server.js +841 -0
- package/src/services/route53/simulator.js +350 -0
- package/src/services/s3/index.js +62 -0
- package/src/services/s3/presigned-url-generator.js +337 -0
- package/src/services/s3/server.js +231 -0
- package/src/services/s3/simulator.js +551 -4
- package/src/services/sns/index.js +31 -0
- package/src/services/sns/server.js +9 -0
- package/src/services/sqs/index.js +38 -0
- package/src/services/sqs/server.js +57 -4
- package/src/services/sqs/simulator.js +423 -33
- package/src/services/sts/simulator.js +209 -17
- package/src/services/vpc/README.md +459 -0
- package/src/services/vpc/ec2ResponseFormatter.js +431 -0
- package/src/services/vpc/index.js +90 -0
- package/src/services/vpc/models/internetGateway.js +71 -0
- package/src/services/vpc/models/routeTable.js +160 -0
- package/src/services/vpc/models/subnet.js +48 -0
- package/src/services/vpc/models/vpc.js +37 -0
- package/src/services/vpc/models/vpcEndpoint.js +100 -0
- package/src/services/vpc/models/vpcGateway.js +134 -0
- package/src/services/vpc/server.js +836 -0
- package/src/services/vpc/simulator.js +613 -0
- package/src/utils/policy-cache.js +215 -0
- package/aws-config +0 -154
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
# VPC Service - Simulador de Virtual Private Cloud
|
|
2
|
+
|
|
3
|
+
Simulador completo de AWS VPC com suporte a rotas, subnets, Internet Gateways, VPC Endpoints e VPC Gateways.
|
|
4
|
+
|
|
5
|
+
## Características
|
|
6
|
+
|
|
7
|
+
✅ **VPCs**: Criar, listar, deletar, modificar atributos
|
|
8
|
+
✅ **Subnets**: Criar subnets por VPC com validação de CIDR
|
|
9
|
+
✅ **Route Tables**: Tabelas de rotas com múltiplas regras de roteamento
|
|
10
|
+
✅ **Internet Gateways**: Criar e associar a VPCs
|
|
11
|
+
✅ **VPC Endpoints**: S3, DynamoDB, Lambda, SQS, SNS
|
|
12
|
+
✅ **NAT Gateways**: Gerenciar gateways para subnets privadas
|
|
13
|
+
✅ **VPN**: VPN Gateways e Connections (futuro)
|
|
14
|
+
✅ **Tags**: Suporte completo para tags em todos os recursos
|
|
15
|
+
|
|
16
|
+
## Arquitetura
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
src/services/vpc/
|
|
20
|
+
├── index.js # Serviço principal (VPCService)
|
|
21
|
+
├── server.js # Servidor HTTP com rotas
|
|
22
|
+
├── simulator.js # Lógica de simulação VPCSimulator
|
|
23
|
+
├── models/
|
|
24
|
+
│ ├── vpc.js # Modelo de VPC
|
|
25
|
+
│ ├── subnet.js # Modelo de Subnet
|
|
26
|
+
│ ├── routeTable.js # Modelo de RouteTable
|
|
27
|
+
│ ├── internetGateway.js # Modelo de IGW
|
|
28
|
+
│ ├── vpcEndpoint.js # Modelo de VPC Endpoint
|
|
29
|
+
│ └── vpcGateway.js # Modelo de NAT/VPN Gateways
|
|
30
|
+
└── utils/
|
|
31
|
+
└── validators.js # Validadores de CIDR, etc
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Configuração
|
|
35
|
+
|
|
36
|
+
### arquivo `aws-local-simulator.json`
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"services": {
|
|
41
|
+
"vpc": true
|
|
42
|
+
},
|
|
43
|
+
"vpc": {
|
|
44
|
+
"vpcs": [
|
|
45
|
+
{
|
|
46
|
+
"CidrBlock": "10.0.0.0/16",
|
|
47
|
+
"Tags": [
|
|
48
|
+
{ "Key": "Name", "Value": "main-vpc" }
|
|
49
|
+
],
|
|
50
|
+
"EnableDnsHostnames": true,
|
|
51
|
+
"EnableDnsSupport": true
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"subnets": [
|
|
55
|
+
{
|
|
56
|
+
"VpcId": "vpc-xxxxx",
|
|
57
|
+
"CidrBlock": "10.0.1.0/24",
|
|
58
|
+
"AvailabilityZone": "us-east-1a",
|
|
59
|
+
"Tags": [
|
|
60
|
+
{ "Key": "Name", "Value": "public-subnet" }
|
|
61
|
+
],
|
|
62
|
+
"MapPublicIpOnLaunch": true
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Variáveis de Ambiente
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Habilitar/Desabilitar
|
|
73
|
+
export AWS_LOCAL_SIMULATOR_VPC=true
|
|
74
|
+
|
|
75
|
+
# Porta (padrão: 4014)
|
|
76
|
+
export AWS_LOCAL_SIMULATOR_VPC_PORT=4014
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## API REST
|
|
80
|
+
|
|
81
|
+
### VPCs
|
|
82
|
+
|
|
83
|
+
#### Criar VPC
|
|
84
|
+
```
|
|
85
|
+
POST /__admin/vpcs/create
|
|
86
|
+
Content-Type: application/json
|
|
87
|
+
|
|
88
|
+
{
|
|
89
|
+
"CidrBlock": "10.0.0.0/16",
|
|
90
|
+
"Tags": [
|
|
91
|
+
{ "Key": "Name", "Value": "my-vpc" }
|
|
92
|
+
],
|
|
93
|
+
"EnableDnsHostnames": true,
|
|
94
|
+
"EnableDnsSupport": true
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
#### Listar VPCs
|
|
99
|
+
```
|
|
100
|
+
GET /__admin/vpcs
|
|
101
|
+
GET /__admin/vpcs?vpcIds=vpc-xxxxx
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
#### Obter VPC
|
|
105
|
+
```
|
|
106
|
+
GET /__admin/vpcs/{vpcId}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### Modificar VPC
|
|
110
|
+
```
|
|
111
|
+
POST /__admin/vpcs/{vpcId}/attributes
|
|
112
|
+
Content-Type: application/json
|
|
113
|
+
|
|
114
|
+
{
|
|
115
|
+
"attribute": "enableDnsHostnames|enableDnsSupport",
|
|
116
|
+
"value": true/false
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
#### Deletar VPC
|
|
121
|
+
```
|
|
122
|
+
DELETE /__admin/vpcs/{vpcId}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Subnets
|
|
126
|
+
|
|
127
|
+
#### Criar Subnet
|
|
128
|
+
```
|
|
129
|
+
POST /__admin/subnets/create
|
|
130
|
+
Content-Type: application/json
|
|
131
|
+
|
|
132
|
+
{
|
|
133
|
+
"VpcId": "vpc-xxxxx",
|
|
134
|
+
"CidrBlock": "10.0.1.0/24",
|
|
135
|
+
"AvailabilityZone": "us-east-1a",
|
|
136
|
+
"Tags": [],
|
|
137
|
+
"MapPublicIpOnLaunch": true
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
#### Listar Subnets
|
|
142
|
+
```
|
|
143
|
+
GET /__admin/subnets
|
|
144
|
+
GET /__admin/subnets?vpcIds=vpc-xxxxx
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
#### Obter Subnet
|
|
148
|
+
```
|
|
149
|
+
GET /__admin/subnets/{subnetId}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
#### Deletar Subnet
|
|
153
|
+
```
|
|
154
|
+
DELETE /__admin/subnets/{subnetId}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Route Tables
|
|
158
|
+
|
|
159
|
+
#### Criar Route Table
|
|
160
|
+
```
|
|
161
|
+
POST /__admin/route-tables/create
|
|
162
|
+
Content-Type: application/json
|
|
163
|
+
|
|
164
|
+
{
|
|
165
|
+
"VpcId": "vpc-xxxxx",
|
|
166
|
+
"Tags": []
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
#### Listar Route Tables
|
|
171
|
+
```
|
|
172
|
+
GET /__admin/route-tables
|
|
173
|
+
GET /__admin/route-tables?vpcIds=vpc-xxxxx
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
#### Obter Route Table
|
|
177
|
+
```
|
|
178
|
+
GET /__admin/route-tables/{rtId}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
#### Adicionar Rota
|
|
182
|
+
```
|
|
183
|
+
POST /__admin/route-tables/{rtId}/routes
|
|
184
|
+
Content-Type: application/json
|
|
185
|
+
|
|
186
|
+
{
|
|
187
|
+
"DestinationCidrBlock": "0.0.0.0/0",
|
|
188
|
+
"Target": "igw-xxxxx",
|
|
189
|
+
"TargetType": "igw|nat|vpce|instance"
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
#### Remover Rota
|
|
194
|
+
```
|
|
195
|
+
DELETE /__admin/route-tables/{rtId}/routes/{cidr}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
#### Associar com Subnet
|
|
199
|
+
```
|
|
200
|
+
POST /__admin/route-tables/{rtId}/associations
|
|
201
|
+
Content-Type: application/json
|
|
202
|
+
|
|
203
|
+
{
|
|
204
|
+
"SubnetId": "subnet-xxxxx"
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
#### Desassociar Subnet
|
|
209
|
+
```
|
|
210
|
+
DELETE /__admin/route-tables/{rtId}/associations/{subnetId}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
#### Deletar Route Table
|
|
214
|
+
```
|
|
215
|
+
DELETE /__admin/route-tables/{rtId}
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Internet Gateways
|
|
219
|
+
|
|
220
|
+
#### Criar IGW
|
|
221
|
+
```
|
|
222
|
+
POST /__admin/internet-gateways/create
|
|
223
|
+
Content-Type: application/json
|
|
224
|
+
|
|
225
|
+
{
|
|
226
|
+
"Tags": []
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
#### Listar IGWs
|
|
231
|
+
```
|
|
232
|
+
GET /__admin/internet-gateways
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
#### Obter IGW
|
|
236
|
+
```
|
|
237
|
+
GET /__admin/internet-gateways/{igwId}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
#### Anexar a VPC
|
|
241
|
+
```
|
|
242
|
+
POST /__admin/internet-gateways/{igwId}/attach
|
|
243
|
+
Content-Type: application/json
|
|
244
|
+
|
|
245
|
+
{
|
|
246
|
+
"VpcId": "vpc-xxxxx"
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
#### Desanexar de VPC
|
|
251
|
+
```
|
|
252
|
+
POST /__admin/internet-gateways/{igwId}/detach
|
|
253
|
+
Content-Type: application/json
|
|
254
|
+
|
|
255
|
+
{
|
|
256
|
+
"VpcId": "vpc-xxxxx"
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
#### Deletar IGW
|
|
261
|
+
```
|
|
262
|
+
DELETE /__admin/internet-gateways/{igwId}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### VPC Endpoints
|
|
266
|
+
|
|
267
|
+
#### Criar Endpoint (Gateway)
|
|
268
|
+
```
|
|
269
|
+
POST /__admin/vpc-endpoints/create
|
|
270
|
+
Content-Type: application/json
|
|
271
|
+
|
|
272
|
+
{
|
|
273
|
+
"VpcId": "vpc-xxxxx",
|
|
274
|
+
"ServiceName": "com.amazonaws.region.s3|dynamodb",
|
|
275
|
+
"VpcEndpointType": "Gateway",
|
|
276
|
+
"RouteTableIds": ["rtb-xxxxx"]
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
#### Criar Endpoint (Interface)
|
|
281
|
+
```
|
|
282
|
+
POST /__admin/vpc-endpoints/create
|
|
283
|
+
Content-Type: application/json
|
|
284
|
+
|
|
285
|
+
{
|
|
286
|
+
"VpcId": "vpc-xxxxx",
|
|
287
|
+
"ServiceName": "com.amazonaws.region.lambda",
|
|
288
|
+
"VpcEndpointType": "Interface",
|
|
289
|
+
"SubnetIds": ["subnet-xxxxx"],
|
|
290
|
+
"SecurityGroupIds": ["sg-xxxxx"],
|
|
291
|
+
"PrivateDnsEnabled": true
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
#### Listar Endpoints
|
|
296
|
+
```
|
|
297
|
+
GET /__admin/vpc-endpoints
|
|
298
|
+
GET /__admin/vpc-endpoints?vpcIds=vpc-xxxxx
|
|
299
|
+
GET /__admin/vpc-endpoints?vpcEndpointIds=vpce-xxxxx
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
#### Obter Endpoint
|
|
303
|
+
```
|
|
304
|
+
GET /__admin/vpc-endpoints/{epId}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
#### Modificar Endpoint
|
|
308
|
+
```
|
|
309
|
+
POST /__admin/vpc-endpoints/{epId}/modify
|
|
310
|
+
Content-Type: application/json
|
|
311
|
+
|
|
312
|
+
{
|
|
313
|
+
"RouteTableIds": ["rtb-xxxxx"],
|
|
314
|
+
"SubnetIds": ["subnet-xxxxx"],
|
|
315
|
+
"PolicyDocument": {}
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
#### Deletar Endpoint
|
|
320
|
+
```
|
|
321
|
+
DELETE /__admin/vpc-endpoints/{epId}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### Recursos
|
|
325
|
+
|
|
326
|
+
#### Listar Todos os Recursos
|
|
327
|
+
```
|
|
328
|
+
GET /__admin/resources
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
Response inclui: VPCs, Subnets, RouteTables, InternetGateways, VPCEndpoints, NATGateways
|
|
332
|
+
|
|
333
|
+
### Health Check
|
|
334
|
+
|
|
335
|
+
```
|
|
336
|
+
GET /__admin/health
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
Response: `{ "status": "ok", "service": "vpc" }`
|
|
340
|
+
|
|
341
|
+
## Exemplos
|
|
342
|
+
|
|
343
|
+
### Criar uma arquitetura VPC completa
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
# 1. Criar VPC
|
|
347
|
+
VPC=$(curl -s -X POST http://localhost:4014/__admin/vpcs/create \
|
|
348
|
+
-H "Content-Type: application/json" \
|
|
349
|
+
-d '{"CidrBlock":"10.0.0.0/16"}' | jq -r '.Vpc.VpcId')
|
|
350
|
+
|
|
351
|
+
# 2. Criar Subnets
|
|
352
|
+
SUBNET_1=$(curl -s -X POST http://localhost:4014/__admin/subnets/create \
|
|
353
|
+
-H "Content-Type: application/json" \
|
|
354
|
+
-d "{\"VpcId\":\"$VPC\",\"CidrBlock\":\"10.0.1.0/24\",\"AvailabilityZone\":\"us-east-1a\"}" | jq -r '.Subnet.SubnetId')
|
|
355
|
+
|
|
356
|
+
# 3. Criar Internet Gateway
|
|
357
|
+
IGW=$(curl -s -X POST http://localhost:4014/__admin/internet-gateways/create \
|
|
358
|
+
-H "Content-Type: application/json" \
|
|
359
|
+
-d '{}' | jq -r '.InternetGateway.InternetGatewayId')
|
|
360
|
+
|
|
361
|
+
# 4. Anexar IGW à VPC
|
|
362
|
+
curl -s -X POST http://localhost:4014/__admin/internet-gateways/$IGW/attach \
|
|
363
|
+
-H "Content-Type: application/json" \
|
|
364
|
+
-d "{\"VpcId\":\"$VPC\"}"
|
|
365
|
+
|
|
366
|
+
# 5. Criar Route Table
|
|
367
|
+
RT=$(curl -s -X POST http://localhost:4014/__admin/route-tables/create \
|
|
368
|
+
-H "Content-Type: application/json" \
|
|
369
|
+
-d "{\"VpcId\":\"$VPC\"}" | jq -r '.RouteTable.RouteTableId')
|
|
370
|
+
|
|
371
|
+
# 6. Adicionar rota padrão
|
|
372
|
+
curl -s -X POST http://localhost:4014/__admin/route-tables/$RT/routes \
|
|
373
|
+
-H "Content-Type: application/json" \
|
|
374
|
+
-d "{\"DestinationCidrBlock\":\"0.0.0.0/0\",\"Target\":\"$IGW\",\"TargetType\":\"igw\"}"
|
|
375
|
+
|
|
376
|
+
# 7. Associar Subnet com Route Table
|
|
377
|
+
curl -s -X POST http://localhost:4014/__admin/route-tables/$RT/associations \
|
|
378
|
+
-H "Content-Type: application/json" \
|
|
379
|
+
-d "{\"SubnetId\":\"$SUBNET_1\"}"
|
|
380
|
+
|
|
381
|
+
# 8. Criar VPC Endpoint S3
|
|
382
|
+
curl -s -X POST http://localhost:4014/__admin/vpc-endpoints/create \
|
|
383
|
+
-H "Content-Type: application/json" \
|
|
384
|
+
-d "{\"VpcId\":\"$VPC\",\"ServiceName\":\"com.amazonaws.us-east-1.s3\",\"VpcEndpointType\":\"Gateway\",\"RouteTableIds\":[\"$RT\"]}"
|
|
385
|
+
|
|
386
|
+
echo "Arquitetura criada com sucesso!"
|
|
387
|
+
echo "VPC: $VPC"
|
|
388
|
+
echo "Subnet: $SUBNET_1"
|
|
389
|
+
echo "IGW: $IGW"
|
|
390
|
+
echo "Route Table: $RT"
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
## Validações
|
|
394
|
+
|
|
395
|
+
- **CIDR Overlap**: Evita subnets com CIDR blocks sobrepostos na mesma VPC
|
|
396
|
+
- **Dependências**: Valida dependências ao deletar recursos
|
|
397
|
+
- **Associações**: Evita associações duplicadas de subnets em route tables
|
|
398
|
+
- **Attachments**: Permite um único IGW por VPC, múltiplos por IGW
|
|
399
|
+
|
|
400
|
+
## Limites
|
|
401
|
+
|
|
402
|
+
- Max 5 VPCs por simulador (configurável)
|
|
403
|
+
- Max 10 subnets por VPC (configurável)
|
|
404
|
+
- Max 20 rotes por route table
|
|
405
|
+
- Max 5 endpoints por VPC
|
|
406
|
+
- Sem limite de tags por recurso
|
|
407
|
+
|
|
408
|
+
## Status da Implementação
|
|
409
|
+
|
|
410
|
+
- ✅ VPCs (CRUD completo)
|
|
411
|
+
- ✅ Subnets (CRUD completo)
|
|
412
|
+
- ✅ Route Tables (CRUD + associações)
|
|
413
|
+
- ✅ Internet Gateways (CRUD + attach/detach)
|
|
414
|
+
- ✅ VPC Endpoints (CRUD + modificações)
|
|
415
|
+
- ✅ NAT Gateways (básico)
|
|
416
|
+
- ⏳ Network ACLs (futuro)
|
|
417
|
+
- ⏳ Security Groups (futuro)
|
|
418
|
+
- ⏳ VPN Connections (futuro)
|
|
419
|
+
- ⏳ Peering (futuro)
|
|
420
|
+
|
|
421
|
+
## Integração com CloudFormation
|
|
422
|
+
|
|
423
|
+
O serviço VPC será integrado com CloudFormation para criar recursos via templates.
|
|
424
|
+
|
|
425
|
+
## Notas Importantes
|
|
426
|
+
|
|
427
|
+
1. O simulador VPC não faz roteamento real de tráfego - apenas simula o estado
|
|
428
|
+
2. Subnets e VPCs são apenas gerenciamento de estado, não há isolamento real de rede
|
|
429
|
+
3. Os dados são armazenados em memória e perdidos ao reiniciar
|
|
430
|
+
4. Para persistência, implemente storage backend (arquivo, banco de dados)
|
|
431
|
+
|
|
432
|
+
## Troubleshooting
|
|
433
|
+
|
|
434
|
+
### "VPC not found"
|
|
435
|
+
- Verifique se o VPC ID está correto
|
|
436
|
+
- Use `GET /__admin/vpcs` para listar IDs
|
|
437
|
+
|
|
438
|
+
### "Cannot delete VPC: VPC has subnets"
|
|
439
|
+
- Delete as subnets primeiro ou desassocie as subnets
|
|
440
|
+
|
|
441
|
+
### "CIDR block overlaps with existing subnets"
|
|
442
|
+
- Escolha um CIDR block que não sobrescreva subnets existentes
|
|
443
|
+
- Use subnets de 10.0.0.0/8 de forma não sobreposta
|
|
444
|
+
|
|
445
|
+
### "Cannot delete Internet Gateway with attachments"
|
|
446
|
+
- Desanexe o IGW da VPC primeiro com POST `/detach`
|
|
447
|
+
|
|
448
|
+
## Contribuindo
|
|
449
|
+
|
|
450
|
+
Para adicionar mais funcionalidades:
|
|
451
|
+
|
|
452
|
+
1. Adicione o modelo em `models/`
|
|
453
|
+
2. Implemente operações no `simulator.js`
|
|
454
|
+
3. Adicione rotas no `server.js`
|
|
455
|
+
4. Atualize este README
|
|
456
|
+
|
|
457
|
+
## Licença
|
|
458
|
+
|
|
459
|
+
MIT
|