@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.
Files changed (149) hide show
  1. package/README.md +662 -658
  2. package/package.json +10 -3
  3. package/src/config/default-config.js +71 -0
  4. package/src/config/env-loader.js +4 -2
  5. package/src/middleware/authorization.js +271 -0
  6. package/src/middleware/cloudtrail-logger.js +333 -0
  7. package/src/middleware/error-handler.js +138 -0
  8. package/src/middleware/index.js +79 -0
  9. package/src/middleware/policy-enforcement.js +407 -0
  10. package/src/server.js +74 -4
  11. package/src/services/acm/index.js +66 -0
  12. package/src/services/acm/models/certificate.js +202 -0
  13. package/src/services/acm/server.js +224 -0
  14. package/src/services/acm/simulator.js +293 -0
  15. package/src/services/alb/index.js +104 -0
  16. package/src/services/alb/models/loadBalancer.js +88 -0
  17. package/src/services/alb/models/targetGroup.js +128 -0
  18. package/src/services/alb/server.js +160 -0
  19. package/src/services/alb/simulator.js +262 -0
  20. package/src/services/apigateway/index.js +22 -0
  21. package/src/services/apigateway/server.js +247 -35
  22. package/src/services/apigateway/simulator.js +780 -26
  23. package/src/services/asg/index.js +100 -0
  24. package/src/services/asg/models/autoScalingGroup.js +110 -0
  25. package/src/services/asg/models/launchTemplate.js +41 -0
  26. package/src/services/asg/models/scalingPolicy.js +51 -0
  27. package/src/services/asg/server.js +236 -0
  28. package/src/services/asg/simulator.js +410 -0
  29. package/src/services/aurora/cluster-manager.js +731 -0
  30. package/src/services/aurora/data-api.js +514 -0
  31. package/src/services/aurora/db-engine.js +270 -0
  32. package/src/services/aurora/index.js +159 -0
  33. package/src/services/aurora/rds-api.js +189 -0
  34. package/src/services/aurora/server.js +213 -0
  35. package/src/services/aurora/sql-translator.js +334 -0
  36. package/src/services/cloudformation/index.js +2 -2
  37. package/src/services/cloudformation/server.js +1 -0
  38. package/src/services/cloudfront/cache-engine.js +225 -0
  39. package/src/services/cloudfront/geo-restrictions.js +377 -0
  40. package/src/services/cloudfront/index.js +220 -0
  41. package/src/services/cloudfront/models/behavior.js +158 -0
  42. package/src/services/cloudfront/models/distribution.js +284 -0
  43. package/src/services/cloudfront/models/index.js +99 -0
  44. package/src/services/cloudfront/models/invalidation.js +109 -0
  45. package/src/services/cloudfront/models/origin.js +155 -0
  46. package/src/services/cloudfront/origin-router.js +552 -0
  47. package/src/services/cloudfront/origin-validator.js +398 -0
  48. package/src/services/cloudfront/server.js +512 -0
  49. package/src/services/cloudfront/signed-url-generator.js +377 -0
  50. package/src/services/cloudfront/simulator.js +425 -0
  51. package/src/services/cloudfront/store.js +326 -0
  52. package/src/services/cloudshell/env-builder.js +27 -0
  53. package/src/services/cloudshell/index.js +48 -0
  54. package/src/services/cloudshell/routes.js +60 -0
  55. package/src/services/cloudshell/session-manager.js +226 -0
  56. package/src/services/cloudshell/static/.gitkeep +0 -0
  57. package/src/services/cloudshell/static/index.html +406 -0
  58. package/src/services/cloudshell/websocket-handler.js +107 -0
  59. package/src/services/cloudtrail/index.js +2 -3
  60. package/src/services/cloudtrail/server.js +68 -0
  61. package/src/services/cognito/server.js +4 -1
  62. package/src/services/dynamodb/server.js +4 -1
  63. package/src/services/dynamodb/simulator.js +2 -1
  64. package/src/services/ec2/index.js +101 -0
  65. package/src/services/ec2/instanceServer.js +311 -0
  66. package/src/services/ec2/models/ami.js +39 -0
  67. package/src/services/ec2/models/instance.js +98 -0
  68. package/src/services/ec2/models/networkInterface.js +74 -0
  69. package/src/services/ec2/models/securityGroup.js +71 -0
  70. package/src/services/ec2/server.js +350 -0
  71. package/src/services/ec2/simulator.js +436 -0
  72. package/src/services/eventbridge/server.js +36 -0
  73. package/src/services/eventbridge/simulator.js +230 -45
  74. package/src/services/iam/index.js +65 -0
  75. package/src/services/iam/middleware.js +99 -0
  76. package/src/services/iam/server.js +331 -0
  77. package/src/services/iam/simulator.js +1432 -0
  78. package/src/services/index.js +28 -0
  79. package/src/services/kinesis-analytics/index.js +105 -0
  80. package/src/services/kinesis-analytics/models/application.js +325 -0
  81. package/src/services/kinesis-analytics/models/index.js +12 -0
  82. package/src/services/kinesis-analytics/server.js +250 -0
  83. package/src/services/kinesis-analytics/simulator.js +407 -0
  84. package/src/services/kinesis-analytics/store.js +176 -0
  85. package/src/services/kinesis-data-streams/index.js +106 -0
  86. package/src/services/kinesis-data-streams/models/index.js +12 -0
  87. package/src/services/kinesis-data-streams/models/record.js +70 -0
  88. package/src/services/kinesis-data-streams/models/stream.js +280 -0
  89. package/src/services/kinesis-data-streams/server.js +255 -0
  90. package/src/services/kinesis-data-streams/simulator.js +514 -0
  91. package/src/services/kinesis-data-streams/store.js +163 -0
  92. package/src/services/kinesis-firehose/index.js +106 -0
  93. package/src/services/kinesis-firehose/models/delivery-stream.js +265 -0
  94. package/src/services/kinesis-firehose/models/index.js +10 -0
  95. package/src/services/kinesis-firehose/server.js +215 -0
  96. package/src/services/kinesis-firehose/simulator.js +388 -0
  97. package/src/services/kinesis-firehose/store.js +163 -0
  98. package/src/services/kms/server.js +4 -1
  99. package/src/services/lambda/index.js +26 -0
  100. package/src/services/lambda/server.js +12 -1
  101. package/src/services/lambda/simulator.js +4 -0
  102. package/src/services/opensearch/index.js +105 -0
  103. package/src/services/opensearch/models/document.js +115 -0
  104. package/src/services/opensearch/models/index.js +73 -0
  105. package/src/services/opensearch/server.js +310 -0
  106. package/src/services/opensearch/simulator.js +605 -0
  107. package/src/services/opensearch/store.js +162 -0
  108. package/src/services/organizations/control-tower-simulator.js +321 -0
  109. package/src/services/organizations/control-tower-store.js +182 -0
  110. package/src/services/organizations/iam-integration.js +413 -0
  111. package/src/services/organizations/index.js +172 -0
  112. package/src/services/organizations/models/index.js +13 -0
  113. package/src/services/organizations/models/invitation.js +48 -0
  114. package/src/services/organizations/models/organization.js +566 -0
  115. package/src/services/organizations/models/role.js +244 -0
  116. package/src/services/organizations/models/scp.js +131 -0
  117. package/src/services/organizations/server.js +736 -0
  118. package/src/services/organizations/simulator.js +593 -0
  119. package/src/services/organizations/store.js +235 -0
  120. package/src/services/organizations/vpc-integration.js +453 -0
  121. package/src/services/route53/index.js +67 -0
  122. package/src/services/route53/models/healthCheck.js +101 -0
  123. package/src/services/route53/models/hostedZone.js +37 -0
  124. package/src/services/route53/models/resourceRecord.js +106 -0
  125. package/src/services/route53/server.js +841 -0
  126. package/src/services/route53/simulator.js +350 -0
  127. package/src/services/s3/index.js +62 -0
  128. package/src/services/s3/presigned-url-generator.js +337 -0
  129. package/src/services/s3/server.js +231 -0
  130. package/src/services/s3/simulator.js +551 -4
  131. package/src/services/sns/index.js +31 -0
  132. package/src/services/sns/server.js +9 -0
  133. package/src/services/sqs/index.js +38 -0
  134. package/src/services/sqs/server.js +57 -4
  135. package/src/services/sqs/simulator.js +423 -33
  136. package/src/services/sts/simulator.js +209 -17
  137. package/src/services/vpc/README.md +459 -0
  138. package/src/services/vpc/ec2ResponseFormatter.js +431 -0
  139. package/src/services/vpc/index.js +90 -0
  140. package/src/services/vpc/models/internetGateway.js +71 -0
  141. package/src/services/vpc/models/routeTable.js +160 -0
  142. package/src/services/vpc/models/subnet.js +48 -0
  143. package/src/services/vpc/models/vpc.js +37 -0
  144. package/src/services/vpc/models/vpcEndpoint.js +100 -0
  145. package/src/services/vpc/models/vpcGateway.js +134 -0
  146. package/src/services/vpc/server.js +836 -0
  147. package/src/services/vpc/simulator.js +613 -0
  148. package/src/utils/policy-cache.js +215 -0
  149. 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