@anvil-cloud/sdk 0.0.13 → 0.0.15
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/aws/cognitoAuth.ts +70 -0
- package/aws/cognitoUserPool.ts +132 -0
- package/aws/dynamoDB.ts +176 -0
- package/aws/eventBus.ts +91 -0
- package/aws/httpApi.ts +108 -0
- package/aws/index.ts +63 -0
- package/aws/lambda.ts +9 -3
- package/aws/oauthAuthorizer.ts +70 -0
- package/aws/queue.ts +156 -0
- package/aws/svelteKitSite.ts +14 -0
- package/aws/vpc.ts +159 -0
- package/aws/vpcEndpoint.ts +98 -0
- package/bin/aws/cognitoAuth.d.ts +36 -0
- package/bin/aws/cognitoAuth.js +53 -0
- package/bin/aws/cognitoAuth.js.map +1 -0
- package/bin/aws/cognitoUserPool.d.ts +82 -0
- package/bin/aws/cognitoUserPool.js +65 -0
- package/bin/aws/cognitoUserPool.js.map +1 -0
- package/bin/aws/dynamoDB.d.ts +115 -0
- package/bin/aws/dynamoDB.js +121 -0
- package/bin/aws/dynamoDB.js.map +1 -0
- package/bin/aws/eventBus.d.ts +47 -0
- package/bin/aws/eventBus.js +63 -0
- package/bin/aws/eventBus.js.map +1 -0
- package/bin/aws/httpApi.d.ts +66 -0
- package/bin/aws/httpApi.js +60 -0
- package/bin/aws/httpApi.js.map +1 -0
- package/bin/aws/index.d.ts +27 -0
- package/bin/aws/index.js +37 -1
- package/bin/aws/index.js.map +1 -1
- package/bin/aws/lambda.d.ts +7 -3
- package/bin/aws/lambda.js +2 -0
- package/bin/aws/lambda.js.map +1 -1
- package/bin/aws/oauthAuthorizer.d.ts +36 -0
- package/bin/aws/oauthAuthorizer.js +53 -0
- package/bin/aws/oauthAuthorizer.js.map +1 -0
- package/bin/aws/queue.d.ts +83 -0
- package/bin/aws/queue.js +103 -0
- package/bin/aws/queue.js.map +1 -0
- package/bin/aws/svelteKitSite.d.ts +9 -0
- package/bin/aws/svelteKitSite.js +3 -0
- package/bin/aws/svelteKitSite.js.map +1 -1
- package/bin/aws/vpc.d.ts +98 -0
- package/bin/aws/vpc.js +94 -0
- package/bin/aws/vpc.js.map +1 -0
- package/bin/aws/vpcEndpoint.d.ts +53 -0
- package/bin/aws/vpcEndpoint.js +62 -0
- package/bin/aws/vpcEndpoint.js.map +1 -0
- package/bin/grants.d.ts +0 -10
- package/bin/grants.js +5 -10
- package/bin/grants.js.map +1 -1
- package/bin/package.json +1 -1
- package/bin/types/enums/aws/index.d.ts +211 -7
- package/bin/types/enums/aws/index.js +192 -8
- package/bin/types/enums/aws/index.js.map +1 -1
- package/bin/types/input.d.ts +1040 -0
- package/bin/types/output.d.ts +13 -0
- package/grants.ts +7 -22
- package/package.json +1 -1
- package/tsconfig.json +9 -0
- package/types/enums/aws/index.ts +239 -7
- package/types/input.ts +1079 -0
- package/types/output.ts +14 -0
package/bin/types/output.d.ts
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
export declare namespace aws {
|
|
2
|
+
/**
|
|
3
|
+
* ACM certificate DNS validation CNAME record. Only populated when domain.dns: false and domain.certificateArn is omitted. Add this record in your DNS provider (e.g. Cloudflare) then re-run deploy — Anvil blocks until ACM confirms validation.
|
|
4
|
+
*/
|
|
5
|
+
interface HttpApiCertValidationCname {
|
|
6
|
+
/**
|
|
7
|
+
* The CNAME record name to add in your DNS provider.
|
|
8
|
+
*/
|
|
9
|
+
name: string;
|
|
10
|
+
/**
|
|
11
|
+
* The CNAME record value to point to.
|
|
12
|
+
*/
|
|
13
|
+
value: string;
|
|
14
|
+
}
|
|
2
15
|
}
|
|
3
16
|
export declare namespace gcp {
|
|
4
17
|
}
|
package/grants.ts
CHANGED
|
@@ -12,14 +12,7 @@ import * as aws from '@pulumi/aws';
|
|
|
12
12
|
* Compute resources (Lambda, SvelteKitSite, etc.) satisfy this interface.
|
|
13
13
|
*/
|
|
14
14
|
export interface GrantTarget {
|
|
15
|
-
/**
|
|
16
|
-
* The logical resource name passed to the constructor.
|
|
17
|
-
*/
|
|
18
15
|
grantName(): string;
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* The ARN of the IAM execution role attached to this compute resource.
|
|
22
|
-
*/
|
|
23
16
|
grantRoleArn(): pulumi.Output<string>;
|
|
24
17
|
}
|
|
25
18
|
|
|
@@ -27,10 +20,6 @@ export interface GrantTarget {
|
|
|
27
20
|
* Optional metadata for grant methods.
|
|
28
21
|
*/
|
|
29
22
|
export interface GrantOptions {
|
|
30
|
-
/**
|
|
31
|
-
* Documents why this grant is needed.
|
|
32
|
-
* Stored as a tag on the generated IAM policy resource for audit purposes.
|
|
33
|
-
*/
|
|
34
23
|
justification?: string;
|
|
35
24
|
}
|
|
36
25
|
|
|
@@ -38,8 +27,6 @@ export interface GrantOptions {
|
|
|
38
27
|
* Creates a scoped IAM RolePolicy granting the specified actions on the
|
|
39
28
|
* specified resource ARNs to the target's execution role.
|
|
40
29
|
*
|
|
41
|
-
* This is the core engine that all resource-specific grant methods delegate to.
|
|
42
|
-
*
|
|
43
30
|
* @internal
|
|
44
31
|
*/
|
|
45
32
|
export function createGrant(
|
|
@@ -63,14 +50,11 @@ export function createGrant(
|
|
|
63
50
|
})
|
|
64
51
|
);
|
|
65
52
|
|
|
66
|
-
// Extract role name from ARN (everything after the last "/")
|
|
67
53
|
const roleName = target.grantRoleArn().apply((arn) => {
|
|
68
54
|
const idx = arn.lastIndexOf('/');
|
|
69
55
|
return idx >= 0 ? arn.substring(idx + 1) : arn;
|
|
70
56
|
});
|
|
71
57
|
|
|
72
|
-
// Justification is stored in the resource name suffix for audit trail.
|
|
73
|
-
// Future: compliance audit trail (Pro tier) will capture this metadata separately.
|
|
74
58
|
const policyName = opts?.justification
|
|
75
59
|
? `${name}-${sanitize(opts.justification)}`
|
|
76
60
|
: name;
|
|
@@ -85,7 +69,7 @@ export function createGrant(
|
|
|
85
69
|
);
|
|
86
70
|
}
|
|
87
71
|
|
|
88
|
-
/** @internal
|
|
72
|
+
/** @internal */
|
|
89
73
|
function sanitize(s: string): string {
|
|
90
74
|
return s
|
|
91
75
|
.toLowerCase()
|
|
@@ -95,18 +79,19 @@ function sanitize(s: string): string {
|
|
|
95
79
|
|
|
96
80
|
/**
|
|
97
81
|
* Builds the list of ARNs for a grant based on a base ARN and optional path scoping.
|
|
98
|
-
*
|
|
99
|
-
* - No paths: grants access to the entire resource (baseArn + baseArn/*)
|
|
100
|
-
* - With paths: grants access to baseArn (for list operations) + each scoped path
|
|
101
|
-
*
|
|
102
82
|
* @internal
|
|
103
83
|
*/
|
|
104
84
|
export function buildResourceArns(
|
|
105
85
|
baseArn: pulumi.Output<string>,
|
|
106
|
-
paths?: string[]
|
|
86
|
+
paths?: string[] | null
|
|
107
87
|
): pulumi.Output<string>[] {
|
|
108
88
|
const arns: pulumi.Output<string>[] = [baseArn];
|
|
109
89
|
|
|
90
|
+
if (paths === null) {
|
|
91
|
+
// Explicit null = base ARN only, no sub-paths (used by DynamoDB index grants)
|
|
92
|
+
return arns;
|
|
93
|
+
}
|
|
94
|
+
|
|
110
95
|
if (!paths || paths.length === 0) {
|
|
111
96
|
arns.push(pulumi.interpolate`${baseArn}/*`);
|
|
112
97
|
} else {
|
package/package.json
CHANGED
package/tsconfig.json
CHANGED
|
@@ -14,9 +14,18 @@
|
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
16
16
|
"aws/bucket.ts",
|
|
17
|
+
"aws/cognitoAuth.ts",
|
|
18
|
+
"aws/cognitoUserPool.ts",
|
|
19
|
+
"aws/dynamoDB.ts",
|
|
20
|
+
"aws/eventBus.ts",
|
|
21
|
+
"aws/httpApi.ts",
|
|
17
22
|
"aws/index.ts",
|
|
18
23
|
"aws/lambda.ts",
|
|
24
|
+
"aws/oauthAuthorizer.ts",
|
|
25
|
+
"aws/queue.ts",
|
|
19
26
|
"aws/svelteKitSite.ts",
|
|
27
|
+
"aws/vpc.ts",
|
|
28
|
+
"aws/vpcEndpoint.ts",
|
|
20
29
|
"gcp/function.ts",
|
|
21
30
|
"gcp/index.ts",
|
|
22
31
|
"gcp/storageBucket.ts",
|
package/types/enums/aws/index.ts
CHANGED
|
@@ -2,13 +2,211 @@
|
|
|
2
2
|
// *** Do not edit by hand unless you're certain you know what you are doing! ***
|
|
3
3
|
|
|
4
4
|
|
|
5
|
+
export const CognitoUserPoolCustomAttributeType = {
|
|
6
|
+
String: "String",
|
|
7
|
+
Number: "Number",
|
|
8
|
+
DateTime: "DateTime",
|
|
9
|
+
Boolean: "Boolean",
|
|
10
|
+
} as const;
|
|
11
|
+
|
|
12
|
+
export type CognitoUserPoolCustomAttributeType = (typeof CognitoUserPoolCustomAttributeType)[keyof typeof CognitoUserPoolCustomAttributeType];
|
|
13
|
+
|
|
14
|
+
export const CognitoUserPoolIdentityProviderType = {
|
|
15
|
+
/**
|
|
16
|
+
* Google OAuth 2.0. Requires clientId and clientSecret.
|
|
17
|
+
*/
|
|
18
|
+
Google: "Google",
|
|
19
|
+
/**
|
|
20
|
+
* Facebook OAuth 2.0. Requires clientId and clientSecret.
|
|
21
|
+
*/
|
|
22
|
+
Facebook: "Facebook",
|
|
23
|
+
/**
|
|
24
|
+
* Login with Amazon. Requires clientId and clientSecret.
|
|
25
|
+
*/
|
|
26
|
+
LoginWithAmazon: "LoginWithAmazon",
|
|
27
|
+
/**
|
|
28
|
+
* Sign in with Apple. Requires clientId and clientSecret.
|
|
29
|
+
*/
|
|
30
|
+
SignInWithApple: "SignInWithApple",
|
|
31
|
+
/**
|
|
32
|
+
* Generic OIDC provider (Okta, Auth0, Microsoft Entra, etc.). Requires clientId, clientSecret, and oidcIssuer.
|
|
33
|
+
*/
|
|
34
|
+
OIDC: "OIDC",
|
|
35
|
+
/**
|
|
36
|
+
* SAML 2.0 provider (corporate SSO, Active Directory Federation Services etc.). Requires metadataUrl or metadataContent.
|
|
37
|
+
*/
|
|
38
|
+
SAML: "SAML",
|
|
39
|
+
} as const;
|
|
40
|
+
|
|
41
|
+
export type CognitoUserPoolIdentityProviderType = (typeof CognitoUserPoolIdentityProviderType)[keyof typeof CognitoUserPoolIdentityProviderType];
|
|
42
|
+
|
|
43
|
+
export const CognitoUserPoolMfaMethod = {
|
|
44
|
+
/**
|
|
45
|
+
* Time-based one-time password (authenticator app). No additional AWS resources required.
|
|
46
|
+
*/
|
|
47
|
+
TOTP: "TOTP",
|
|
48
|
+
/**
|
|
49
|
+
* SMS one-time password via SNS. Requires snsCallerArn.
|
|
50
|
+
*/
|
|
51
|
+
SMS: "SMS",
|
|
52
|
+
} as const;
|
|
53
|
+
|
|
54
|
+
export type CognitoUserPoolMfaMethod = (typeof CognitoUserPoolMfaMethod)[keyof typeof CognitoUserPoolMfaMethod];
|
|
55
|
+
|
|
56
|
+
export const CognitoUserPoolMfaMode = {
|
|
57
|
+
/**
|
|
58
|
+
* MFA disabled. Default.
|
|
59
|
+
*/
|
|
60
|
+
OFF: "OFF",
|
|
61
|
+
/**
|
|
62
|
+
* MFA available but not required. Users opt in.
|
|
63
|
+
*/
|
|
64
|
+
OPTIONAL: "OPTIONAL",
|
|
65
|
+
/**
|
|
66
|
+
* MFA required for all users.
|
|
67
|
+
*/
|
|
68
|
+
REQUIRED: "REQUIRED",
|
|
69
|
+
} as const;
|
|
70
|
+
|
|
71
|
+
export type CognitoUserPoolMfaMode = (typeof CognitoUserPoolMfaMode)[keyof typeof CognitoUserPoolMfaMode];
|
|
72
|
+
|
|
73
|
+
export const CognitoUserPoolOAuthFlow = {
|
|
74
|
+
/**
|
|
75
|
+
* Authorization code grant (PKCE). Most secure — use for all browser and server apps.
|
|
76
|
+
*/
|
|
77
|
+
Code: "code",
|
|
78
|
+
/**
|
|
79
|
+
* Implicit grant. Deprecated — tokens visible in browser URL. Avoid for new applications.
|
|
80
|
+
*/
|
|
81
|
+
Implicit: "implicit",
|
|
82
|
+
/**
|
|
83
|
+
* Client credentials grant. M2M only — no user interaction.
|
|
84
|
+
*/
|
|
85
|
+
Client_credentials: "client_credentials",
|
|
86
|
+
} as const;
|
|
87
|
+
|
|
88
|
+
export type CognitoUserPoolOAuthFlow = (typeof CognitoUserPoolOAuthFlow)[keyof typeof CognitoUserPoolOAuthFlow];
|
|
89
|
+
|
|
90
|
+
export const CognitoUserPoolUsernameAttribute = {
|
|
91
|
+
/**
|
|
92
|
+
* Users sign in with their email address.
|
|
93
|
+
*/
|
|
94
|
+
Email: "email",
|
|
95
|
+
/**
|
|
96
|
+
* Users sign in with their phone number.
|
|
97
|
+
*/
|
|
98
|
+
Phone_number: "phone_number",
|
|
99
|
+
} as const;
|
|
100
|
+
|
|
101
|
+
export type CognitoUserPoolUsernameAttribute = (typeof CognitoUserPoolUsernameAttribute)[keyof typeof CognitoUserPoolUsernameAttribute];
|
|
102
|
+
|
|
103
|
+
export const DynamoDBAttributeType = {
|
|
104
|
+
/**
|
|
105
|
+
* String
|
|
106
|
+
*/
|
|
107
|
+
S: "S",
|
|
108
|
+
/**
|
|
109
|
+
* Number
|
|
110
|
+
*/
|
|
111
|
+
N: "N",
|
|
112
|
+
/**
|
|
113
|
+
* Binary
|
|
114
|
+
*/
|
|
115
|
+
B: "B",
|
|
116
|
+
} as const;
|
|
117
|
+
|
|
118
|
+
export type DynamoDBAttributeType = (typeof DynamoDBAttributeType)[keyof typeof DynamoDBAttributeType];
|
|
119
|
+
|
|
120
|
+
export const DynamoDBProjectionType = {
|
|
121
|
+
/**
|
|
122
|
+
* All attributes are projected. Default.
|
|
123
|
+
*/
|
|
124
|
+
ALL: "ALL",
|
|
125
|
+
/**
|
|
126
|
+
* Only the table and GSI key attributes are projected.
|
|
127
|
+
*/
|
|
128
|
+
KEYS_ONLY: "KEYS_ONLY",
|
|
129
|
+
/**
|
|
130
|
+
* Only the specified nonKeyAttributes are projected in addition to keys.
|
|
131
|
+
*/
|
|
132
|
+
INCLUDE: "INCLUDE",
|
|
133
|
+
} as const;
|
|
134
|
+
|
|
135
|
+
export type DynamoDBProjectionType = (typeof DynamoDBProjectionType)[keyof typeof DynamoDBProjectionType];
|
|
136
|
+
|
|
137
|
+
export const DynamoDBStreamStartingPosition = {
|
|
138
|
+
/**
|
|
139
|
+
* Start reading from the oldest available record in the stream. Replays all existing records up to 24hr retention window. AWS default.
|
|
140
|
+
*/
|
|
141
|
+
TRIM_HORIZON: "TRIM_HORIZON",
|
|
142
|
+
/**
|
|
143
|
+
* Start reading from the most recent record. Only processes new events from the point of consumer creation.
|
|
144
|
+
*/
|
|
145
|
+
LATEST: "LATEST",
|
|
146
|
+
} as const;
|
|
147
|
+
|
|
148
|
+
export type DynamoDBStreamStartingPosition = (typeof DynamoDBStreamStartingPosition)[keyof typeof DynamoDBStreamStartingPosition];
|
|
149
|
+
|
|
150
|
+
export const DynamoDBStreamViewType = {
|
|
151
|
+
/**
|
|
152
|
+
* Only the new item image is written to the stream.
|
|
153
|
+
*/
|
|
154
|
+
NEW_IMAGE: "NEW_IMAGE",
|
|
155
|
+
/**
|
|
156
|
+
* Only the old item image is written to the stream.
|
|
157
|
+
*/
|
|
158
|
+
OLD_IMAGE: "OLD_IMAGE",
|
|
159
|
+
/**
|
|
160
|
+
* Both old and new item images are written to the stream.
|
|
161
|
+
*/
|
|
162
|
+
NEW_AND_OLD_IMAGES: "NEW_AND_OLD_IMAGES",
|
|
163
|
+
/**
|
|
164
|
+
* Only the key attributes are written to the stream.
|
|
165
|
+
*/
|
|
166
|
+
KEYS_ONLY: "KEYS_ONLY",
|
|
167
|
+
} as const;
|
|
168
|
+
|
|
169
|
+
export type DynamoDBStreamViewType = (typeof DynamoDBStreamViewType)[keyof typeof DynamoDBStreamViewType];
|
|
170
|
+
|
|
171
|
+
export const HttpApiMethod = {
|
|
172
|
+
/**
|
|
173
|
+
* HTTP GET — read operations.
|
|
174
|
+
*/
|
|
175
|
+
GET: "GET",
|
|
176
|
+
/**
|
|
177
|
+
* HTTP POST — create operations and async consumers (SQS, EventBridge, Step Functions).
|
|
178
|
+
*/
|
|
179
|
+
POST: "POST",
|
|
180
|
+
/**
|
|
181
|
+
* HTTP PUT — replace operations.
|
|
182
|
+
*/
|
|
183
|
+
PUT: "PUT",
|
|
184
|
+
/**
|
|
185
|
+
* HTTP PATCH — partial update operations.
|
|
186
|
+
*/
|
|
187
|
+
PATCH: "PATCH",
|
|
188
|
+
/**
|
|
189
|
+
* HTTP DELETE — delete operations.
|
|
190
|
+
*/
|
|
191
|
+
DELETE: "DELETE",
|
|
192
|
+
/**
|
|
193
|
+
* Matches all HTTP methods. Maps to the $default route key.
|
|
194
|
+
*/
|
|
195
|
+
ANY: "ANY",
|
|
196
|
+
} as const;
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* HTTP method for an API route.
|
|
200
|
+
*/
|
|
201
|
+
export type HttpApiMethod = (typeof HttpApiMethod)[keyof typeof HttpApiMethod];
|
|
202
|
+
|
|
5
203
|
export const LambdaArchitecture = {
|
|
6
204
|
/**
|
|
7
|
-
* Graviton
|
|
205
|
+
* Graviton - 20% cheaper, better performance. Default.
|
|
8
206
|
*/
|
|
9
207
|
Arm64: "arm64",
|
|
10
208
|
/**
|
|
11
|
-
* Intel/AMD
|
|
209
|
+
* Intel/AMD - use for x86-specific native dependencies.
|
|
12
210
|
*/
|
|
13
211
|
X86_64: "x86_64",
|
|
14
212
|
} as const;
|
|
@@ -29,19 +227,19 @@ export const LambdaLogRetention = {
|
|
|
29
227
|
*/
|
|
30
228
|
LambdaLogRetention_90d: "90d",
|
|
31
229
|
/**
|
|
32
|
-
* 1 year (365 days)
|
|
230
|
+
* 1 year (365 days) - SOC 2 / ISO 27001 / PCI-DSS baseline. Default.
|
|
33
231
|
*/
|
|
34
232
|
LambdaLogRetention_1y: "1y",
|
|
35
233
|
/**
|
|
36
|
-
* 3 years (1095 days)
|
|
234
|
+
* 3 years (1095 days) - FedRAMP minimum
|
|
37
235
|
*/
|
|
38
236
|
LambdaLogRetention_3y: "3y",
|
|
39
237
|
/**
|
|
40
|
-
* 6 years (2190 days)
|
|
238
|
+
* 6 years (2190 days) - HIPAA minimum
|
|
41
239
|
*/
|
|
42
240
|
LambdaLogRetention_6y: "6y",
|
|
43
241
|
/**
|
|
44
|
-
* 7 years (2555 days)
|
|
242
|
+
* 7 years (2555 days) - IRAP minimum
|
|
45
243
|
*/
|
|
46
244
|
LambdaLogRetention_7y: "7y",
|
|
47
245
|
} as const;
|
|
@@ -50,7 +248,7 @@ export type LambdaLogRetention = (typeof LambdaLogRetention)[keyof typeof Lambda
|
|
|
50
248
|
|
|
51
249
|
export const LambdaRuntime = {
|
|
52
250
|
/**
|
|
53
|
-
* Node.js 24 (LTS)
|
|
251
|
+
* Node.js 24 (LTS) - recommended
|
|
54
252
|
*/
|
|
55
253
|
Nodejs24_x: "nodejs24.x",
|
|
56
254
|
/**
|
|
@@ -60,3 +258,37 @@ export const LambdaRuntime = {
|
|
|
60
258
|
} as const;
|
|
61
259
|
|
|
62
260
|
export type LambdaRuntime = (typeof LambdaRuntime)[keyof typeof LambdaRuntime];
|
|
261
|
+
|
|
262
|
+
export const S3FlowLogLifecycle = {
|
|
263
|
+
/**
|
|
264
|
+
* Auto-tiered: Standard (0-30d) → Standard-IA (30-90d) → Glacier Instant Retrieval (90d+). Suitable for compliance retention at minimal long-term cost.
|
|
265
|
+
*/
|
|
266
|
+
Standard: "standard",
|
|
267
|
+
} as const;
|
|
268
|
+
|
|
269
|
+
export type S3FlowLogLifecycle = (typeof S3FlowLogLifecycle)[keyof typeof S3FlowLogLifecycle];
|
|
270
|
+
|
|
271
|
+
export const SiteOriginProtectionProvider = {
|
|
272
|
+
/**
|
|
273
|
+
* Cloudflare — inject x-origin-secret via a Cloudflare Transform Rule.
|
|
274
|
+
*/
|
|
275
|
+
Cloudflare: "cloudflare",
|
|
276
|
+
} as const;
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* The CDN/proxy provider sitting in front of CloudFront.
|
|
280
|
+
*/
|
|
281
|
+
export type SiteOriginProtectionProvider = (typeof SiteOriginProtectionProvider)[keyof typeof SiteOriginProtectionProvider];
|
|
282
|
+
|
|
283
|
+
export const VpcNatType = {
|
|
284
|
+
/**
|
|
285
|
+
* AWS managed NAT Gateway. One per AZ for true HA. ~$32/month per AZ plus $0.045/GB data processed.
|
|
286
|
+
*/
|
|
287
|
+
Gateway: "gateway",
|
|
288
|
+
/**
|
|
289
|
+
* fck-nat EC2 instance. Single instance regardless of AZ count. ~$4-6/month for t4g.small. Accepted single point of failure tradeoff for cost savings.
|
|
290
|
+
*/
|
|
291
|
+
Fck_nat: "fck-nat",
|
|
292
|
+
} as const;
|
|
293
|
+
|
|
294
|
+
export type VpcNatType = (typeof VpcNatType)[keyof typeof VpcNatType];
|