alchemy-effect 0.4.0 → 0.6.0
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 +13 -7
- package/bin/alchemy-effect.js +307 -266
- package/bin/alchemy-effect.js.map +1 -1
- package/lib/apply.d.ts.map +1 -1
- package/lib/apply.js +253 -246
- package/lib/apply.js.map +1 -1
- package/lib/aws/client.d.ts.map +1 -1
- package/lib/aws/client.js +15 -2
- package/lib/aws/client.js.map +1 -1
- package/lib/aws/dynamodb/secondary-index.d.ts.map +1 -1
- package/lib/aws/dynamodb/table.d.ts.map +1 -1
- package/lib/aws/dynamodb/table.js.map +1 -1
- package/lib/aws/dynamodb/table.provider.d.ts.map +1 -1
- package/lib/aws/dynamodb/table.provider.js +10 -2
- package/lib/aws/dynamodb/table.provider.js.map +1 -1
- package/lib/aws/ec2/egress-only-igw.d.ts +55 -0
- package/lib/aws/ec2/egress-only-igw.d.ts.map +1 -0
- package/lib/aws/ec2/egress-only-igw.js +4 -0
- package/lib/aws/ec2/egress-only-igw.js.map +1 -0
- package/lib/aws/ec2/egress-only-igw.provider.d.ts +6 -0
- package/lib/aws/ec2/egress-only-igw.provider.d.ts.map +1 -0
- package/lib/aws/ec2/egress-only-igw.provider.js +114 -0
- package/lib/aws/ec2/egress-only-igw.provider.js.map +1 -0
- package/lib/aws/ec2/eip.d.ts +85 -0
- package/lib/aws/ec2/eip.d.ts.map +1 -0
- package/lib/aws/ec2/eip.js +4 -0
- package/lib/aws/ec2/eip.js.map +1 -0
- package/lib/aws/ec2/eip.provider.d.ts +6 -0
- package/lib/aws/ec2/eip.provider.d.ts.map +1 -0
- package/lib/aws/ec2/eip.provider.js +135 -0
- package/lib/aws/ec2/eip.provider.js.map +1 -0
- package/lib/aws/ec2/index.d.ts +18 -0
- package/lib/aws/ec2/index.d.ts.map +1 -1
- package/lib/aws/ec2/index.js +18 -0
- package/lib/aws/ec2/index.js.map +1 -1
- package/lib/aws/ec2/internet-gateway.d.ts.map +1 -1
- package/lib/aws/ec2/internet-gateway.provider.d.ts.map +1 -1
- package/lib/aws/ec2/internet-gateway.provider.js +9 -5
- package/lib/aws/ec2/internet-gateway.provider.js.map +1 -1
- package/lib/aws/ec2/nat-gateway.d.ts +127 -0
- package/lib/aws/ec2/nat-gateway.d.ts.map +1 -0
- package/lib/aws/ec2/nat-gateway.js +4 -0
- package/lib/aws/ec2/nat-gateway.js.map +1 -0
- package/lib/aws/ec2/nat-gateway.provider.d.ts +6 -0
- package/lib/aws/ec2/nat-gateway.provider.d.ts.map +1 -0
- package/lib/aws/ec2/nat-gateway.provider.js +222 -0
- package/lib/aws/ec2/nat-gateway.provider.js.map +1 -0
- package/lib/aws/ec2/network-acl-association.d.ts +44 -0
- package/lib/aws/ec2/network-acl-association.d.ts.map +1 -0
- package/lib/aws/ec2/network-acl-association.js +4 -0
- package/lib/aws/ec2/network-acl-association.js.map +1 -0
- package/lib/aws/ec2/network-acl-association.provider.d.ts +4 -0
- package/lib/aws/ec2/network-acl-association.provider.d.ts.map +1 -0
- package/lib/aws/ec2/network-acl-association.provider.js +115 -0
- package/lib/aws/ec2/network-acl-association.provider.js.map +1 -0
- package/lib/aws/ec2/network-acl-entry.d.ts +118 -0
- package/lib/aws/ec2/network-acl-entry.d.ts.map +1 -0
- package/lib/aws/ec2/network-acl-entry.js +3 -0
- package/lib/aws/ec2/network-acl-entry.js.map +1 -0
- package/lib/aws/ec2/network-acl-entry.provider.d.ts +4 -0
- package/lib/aws/ec2/network-acl-entry.provider.d.ts.map +1 -0
- package/lib/aws/ec2/network-acl-entry.provider.js +129 -0
- package/lib/aws/ec2/network-acl-entry.provider.js.map +1 -0
- package/lib/aws/ec2/network-acl.d.ts +82 -0
- package/lib/aws/ec2/network-acl.d.ts.map +1 -0
- package/lib/aws/ec2/network-acl.js +4 -0
- package/lib/aws/ec2/network-acl.js.map +1 -0
- package/lib/aws/ec2/network-acl.provider.d.ts +6 -0
- package/lib/aws/ec2/network-acl.provider.d.ts.map +1 -0
- package/lib/aws/ec2/network-acl.provider.js +136 -0
- package/lib/aws/ec2/network-acl.provider.js.map +1 -0
- package/lib/aws/ec2/route-table-association.d.ts.map +1 -1
- package/lib/aws/ec2/route-table-association.provider.d.ts.map +1 -1
- package/lib/aws/ec2/route-table-association.provider.js.map +1 -1
- package/lib/aws/ec2/route-table.d.ts.map +1 -1
- package/lib/aws/ec2/route-table.provider.d.ts.map +1 -1
- package/lib/aws/ec2/route-table.provider.js.map +1 -1
- package/lib/aws/ec2/route.d.ts.map +1 -1
- package/lib/aws/ec2/route.provider.d.ts.map +1 -1
- package/lib/aws/ec2/route.provider.js.map +1 -1
- package/lib/aws/ec2/security-group-rule.d.ts +118 -0
- package/lib/aws/ec2/security-group-rule.d.ts.map +1 -0
- package/lib/aws/ec2/security-group-rule.js +4 -0
- package/lib/aws/ec2/security-group-rule.js.map +1 -0
- package/lib/aws/ec2/security-group-rule.provider.d.ts +4 -0
- package/lib/aws/ec2/security-group-rule.provider.d.ts.map +1 -0
- package/lib/aws/ec2/security-group-rule.provider.js +193 -0
- package/lib/aws/ec2/security-group-rule.provider.js.map +1 -0
- package/lib/aws/ec2/security-group.d.ts +147 -0
- package/lib/aws/ec2/security-group.d.ts.map +1 -0
- package/lib/aws/ec2/security-group.js +4 -0
- package/lib/aws/ec2/security-group.js.map +1 -0
- package/lib/aws/ec2/security-group.provider.d.ts +6 -0
- package/lib/aws/ec2/security-group.provider.d.ts.map +1 -0
- package/lib/aws/ec2/security-group.provider.js +291 -0
- package/lib/aws/ec2/security-group.provider.js.map +1 -0
- package/lib/aws/ec2/subnet.d.ts.map +1 -1
- package/lib/aws/ec2/subnet.provider.d.ts.map +1 -1
- package/lib/aws/ec2/subnet.provider.js +33 -30
- package/lib/aws/ec2/subnet.provider.js.map +1 -1
- package/lib/aws/ec2/vpc-endpoint.d.ts +176 -0
- package/lib/aws/ec2/vpc-endpoint.d.ts.map +1 -0
- package/lib/aws/ec2/vpc-endpoint.js +4 -0
- package/lib/aws/ec2/vpc-endpoint.js.map +1 -0
- package/lib/aws/ec2/vpc-endpoint.provider.d.ts +6 -0
- package/lib/aws/ec2/vpc-endpoint.provider.d.ts.map +1 -0
- package/lib/aws/ec2/vpc-endpoint.provider.js +315 -0
- package/lib/aws/ec2/vpc-endpoint.provider.js.map +1 -0
- package/lib/aws/ec2/vpc.d.ts.map +1 -1
- package/lib/aws/ec2/vpc.provider.d.ts.map +1 -1
- package/lib/aws/ec2/vpc.provider.js +38 -32
- package/lib/aws/ec2/vpc.provider.js.map +1 -1
- package/lib/aws/index.d.ts +2 -2
- package/lib/aws/index.d.ts.map +1 -1
- package/lib/aws/index.js +1 -1
- package/lib/aws/index.js.map +1 -1
- package/lib/aws/lambda/function.d.ts.map +1 -1
- package/lib/aws/lambda/function.invoke.d.ts.map +1 -1
- package/lib/aws/lambda/function.invoke.js.map +1 -1
- package/lib/aws/lambda/function.js.map +1 -1
- package/lib/aws/lambda/function.provider.d.ts.map +1 -1
- package/lib/aws/lambda/function.provider.js +19 -23
- package/lib/aws/lambda/function.provider.js.map +1 -1
- package/lib/aws/sqs/queue.d.ts +1 -2
- package/lib/aws/sqs/queue.d.ts.map +1 -1
- package/lib/aws/sqs/queue.event-source.d.ts.map +1 -1
- package/lib/aws/sqs/queue.event-source.js +2 -2
- package/lib/aws/sqs/queue.event-source.js.map +1 -1
- package/lib/aws/sqs/queue.js.map +1 -1
- package/lib/aws/sqs/queue.provider.d.ts +1 -2
- package/lib/aws/sqs/queue.provider.d.ts.map +1 -1
- package/lib/aws/sqs/queue.provider.js +35 -20
- package/lib/aws/sqs/queue.provider.js.map +1 -1
- package/lib/aws/sqs/queue.send-message.d.ts.map +1 -1
- package/lib/aws/sqs/queue.send-message.js.map +1 -1
- package/lib/binding.d.ts.map +1 -1
- package/lib/cli/components/PlanProgress.d.ts.map +1 -1
- package/lib/cli/components/PlanProgress.js.map +1 -1
- package/lib/cli/index.d.ts +8 -4
- package/lib/cli/index.d.ts.map +1 -1
- package/lib/cli/index.js.map +1 -1
- package/lib/cloudflare/kv/namespace.binding.d.ts.map +1 -1
- package/lib/cloudflare/kv/namespace.binding.js.map +1 -1
- package/lib/cloudflare/kv/namespace.d.ts.map +1 -1
- package/lib/cloudflare/kv/namespace.provider.d.ts +1 -2
- package/lib/cloudflare/kv/namespace.provider.d.ts.map +1 -1
- package/lib/cloudflare/kv/namespace.provider.js +11 -8
- package/lib/cloudflare/kv/namespace.provider.js.map +1 -1
- package/lib/cloudflare/r2/bucket.binding.d.ts.map +1 -1
- package/lib/cloudflare/r2/bucket.binding.js +1 -1
- package/lib/cloudflare/r2/bucket.binding.js.map +1 -1
- package/lib/cloudflare/r2/bucket.d.ts +1 -1
- package/lib/cloudflare/r2/bucket.d.ts.map +1 -1
- package/lib/cloudflare/r2/bucket.provider.d.ts +1 -2
- package/lib/cloudflare/r2/bucket.provider.d.ts.map +1 -1
- package/lib/cloudflare/r2/bucket.provider.js +20 -14
- package/lib/cloudflare/r2/bucket.provider.js.map +1 -1
- package/lib/cloudflare/worker/worker.d.ts +2 -2
- package/lib/cloudflare/worker/worker.d.ts.map +1 -1
- package/lib/cloudflare/worker/worker.provider.d.ts +1 -2
- package/lib/cloudflare/worker/worker.provider.d.ts.map +1 -1
- package/lib/cloudflare/worker/worker.provider.js +40 -13
- package/lib/cloudflare/worker/worker.provider.js.map +1 -1
- package/lib/instance-id.d.ts +5 -1
- package/lib/instance-id.d.ts.map +1 -1
- package/lib/instance-id.js +4 -0
- package/lib/instance-id.js.map +1 -1
- package/lib/output.d.ts.map +1 -1
- package/lib/output.js.map +1 -1
- package/lib/physical-name.d.ts +15 -4
- package/lib/physical-name.d.ts.map +1 -1
- package/lib/physical-name.js +12 -3
- package/lib/physical-name.js.map +1 -1
- package/lib/plan.d.ts +2 -2
- package/lib/plan.d.ts.map +1 -1
- package/lib/plan.js +73 -24
- package/lib/plan.js.map +1 -1
- package/lib/provider.d.ts +1 -2
- package/lib/provider.d.ts.map +1 -1
- package/lib/resource.d.ts +3 -2
- package/lib/resource.d.ts.map +1 -1
- package/lib/resource.js.map +1 -1
- package/lib/runtime.d.ts.map +1 -1
- package/lib/tags.d.ts +12 -0
- package/lib/tags.d.ts.map +1 -1
- package/lib/tags.js +24 -0
- package/lib/tags.js.map +1 -1
- package/lib/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +51 -51
- package/src/apply.ts +316 -297
- package/src/aws/client.ts +22 -1
- package/src/aws/dynamodb/secondary-index.ts +5 -5
- package/src/aws/dynamodb/table.provider.ts +15 -4
- package/src/aws/dynamodb/table.ts +8 -11
- package/src/aws/ec2/egress-only-igw.provider.ts +181 -0
- package/src/aws/ec2/egress-only-igw.ts +77 -0
- package/src/aws/ec2/eip.provider.ts +191 -0
- package/src/aws/ec2/eip.ts +106 -0
- package/src/aws/ec2/index.ts +18 -0
- package/src/aws/ec2/internet-gateway.provider.ts +15 -6
- package/src/aws/ec2/internet-gateway.ts +6 -6
- package/src/aws/ec2/nat-gateway.provider.ts +341 -0
- package/src/aws/ec2/nat-gateway.ts +155 -0
- package/src/aws/ec2/network-acl-association.provider.ts +181 -0
- package/src/aws/ec2/network-acl-association.ts +60 -0
- package/src/aws/ec2/network-acl-entry.provider.ts +218 -0
- package/src/aws/ec2/network-acl-entry.ts +140 -0
- package/src/aws/ec2/network-acl.provider.ts +195 -0
- package/src/aws/ec2/network-acl.ts +102 -0
- package/src/aws/ec2/route-table-association.provider.ts +1 -2
- package/src/aws/ec2/route-table-association.ts +6 -6
- package/src/aws/ec2/route-table.provider.ts +1 -2
- package/src/aws/ec2/route-table.ts +6 -6
- package/src/aws/ec2/route.provider.ts +1 -2
- package/src/aws/ec2/route.ts +6 -6
- package/src/aws/ec2/security-group-rule.provider.ts +264 -0
- package/src/aws/ec2/security-group-rule.ts +151 -0
- package/src/aws/ec2/security-group.provider.ts +392 -0
- package/src/aws/ec2/security-group.ts +182 -0
- package/src/aws/ec2/subnet.provider.ts +57 -56
- package/src/aws/ec2/subnet.ts +6 -6
- package/src/aws/ec2/vpc-endpoint.provider.ts +466 -0
- package/src/aws/ec2/vpc-endpoint.ts +213 -0
- package/src/aws/ec2/vpc.provider.ts +60 -52
- package/src/aws/ec2/vpc.ts +6 -6
- package/src/aws/index.ts +9 -0
- package/src/aws/lambda/function.invoke.ts +4 -2
- package/src/aws/lambda/function.provider.ts +42 -31
- package/src/aws/lambda/function.ts +4 -2
- package/src/aws/sqs/queue.event-source.ts +12 -14
- package/src/aws/sqs/queue.provider.ts +40 -24
- package/src/aws/sqs/queue.send-message.ts +4 -2
- package/src/aws/sqs/queue.ts +1 -8
- package/src/binding.ts +7 -7
- package/src/cli/components/PlanProgress.tsx +3 -2
- package/src/cloudflare/kv/namespace.binding.ts +4 -2
- package/src/cloudflare/kv/namespace.provider.ts +18 -16
- package/src/cloudflare/kv/namespace.ts +6 -6
- package/src/cloudflare/r2/bucket.binding.ts +5 -3
- package/src/cloudflare/r2/bucket.provider.ts +34 -30
- package/src/cloudflare/r2/bucket.ts +7 -7
- package/src/cloudflare/worker/worker.provider.ts +39 -13
- package/src/cloudflare/worker/worker.ts +2 -2
- package/src/instance-id.ts +5 -1
- package/src/output.ts +5 -3
- package/src/physical-name.ts +27 -5
- package/src/plan.ts +108 -41
- package/src/provider.ts +12 -12
- package/src/resource.ts +17 -6
- package/src/runtime.ts +2 -2
- package/src/tags.ts +29 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import * as Data from "effect/Data";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Schedule from "effect/Schedule";
|
|
4
|
+
import { createAlchemyTagFilters, createTagger, createTagsList, diffTags, } from "../../tags.js";
|
|
5
|
+
import { Account } from "../account.js";
|
|
6
|
+
import { Region } from "../region.js";
|
|
7
|
+
import { EC2Client } from "./client.js";
|
|
8
|
+
import { NatGateway, } from "./nat-gateway.js";
|
|
9
|
+
export const natGatewayProvider = () => NatGateway.provider.effect(
|
|
10
|
+
// @ts-expect-error
|
|
11
|
+
Effect.gen(function* () {
|
|
12
|
+
const ec2 = yield* EC2Client;
|
|
13
|
+
const region = yield* Region;
|
|
14
|
+
const accountId = yield* Account;
|
|
15
|
+
const tagged = yield* createTagger();
|
|
16
|
+
const createTags = (id, tags) => ({
|
|
17
|
+
Name: id,
|
|
18
|
+
...tagged(id),
|
|
19
|
+
...tags,
|
|
20
|
+
});
|
|
21
|
+
const describeNatGateway = (natGatewayId) => ec2.describeNatGateways({ NatGatewayIds: [natGatewayId] }).pipe(Effect.map((r) => r.NatGateways?.[0]), Effect.flatMap((gw) => gw
|
|
22
|
+
? Effect.succeed(gw)
|
|
23
|
+
: Effect.fail(new Error(`NAT Gateway ${natGatewayId} not found`))));
|
|
24
|
+
const toAttrs = (gw) => {
|
|
25
|
+
const primaryAddress = gw.NatGatewayAddresses?.find((a) => a.IsPrimary) ??
|
|
26
|
+
gw.NatGatewayAddresses?.[0];
|
|
27
|
+
return {
|
|
28
|
+
natGatewayId: gw.NatGatewayId,
|
|
29
|
+
natGatewayArn: `arn:aws:ec2:${region}:${accountId}:natgateway/${gw.NatGatewayId}`,
|
|
30
|
+
subnetId: gw.SubnetId,
|
|
31
|
+
vpcId: gw.VpcId,
|
|
32
|
+
state: gw.State,
|
|
33
|
+
connectivityType: gw.ConnectivityType,
|
|
34
|
+
publicIp: primaryAddress?.PublicIp,
|
|
35
|
+
privateIp: primaryAddress?.PrivateIp,
|
|
36
|
+
natGatewayAddresses: gw.NatGatewayAddresses?.map((a) => ({
|
|
37
|
+
allocationId: a.AllocationId,
|
|
38
|
+
networkInterfaceId: a.NetworkInterfaceId,
|
|
39
|
+
privateIp: a.PrivateIp,
|
|
40
|
+
publicIp: a.PublicIp,
|
|
41
|
+
associationId: a.AssociationId,
|
|
42
|
+
isPrimary: a.IsPrimary,
|
|
43
|
+
failureMessage: a.FailureMessage,
|
|
44
|
+
status: a.Status,
|
|
45
|
+
})),
|
|
46
|
+
failureCode: gw.FailureCode,
|
|
47
|
+
failureMessage: gw.FailureMessage,
|
|
48
|
+
createTime: gw.CreateTime instanceof Date
|
|
49
|
+
? gw.CreateTime.toISOString()
|
|
50
|
+
: gw.CreateTime,
|
|
51
|
+
deleteTime: gw.DeleteTime instanceof Date
|
|
52
|
+
? gw.DeleteTime.toISOString()
|
|
53
|
+
: gw.DeleteTime,
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
// Find NAT Gateway by alchemy tags when we don't have the ID
|
|
57
|
+
const findNatGatewayByTags = Effect.fn(function* (id) {
|
|
58
|
+
const filters = yield* createAlchemyTagFilters(id);
|
|
59
|
+
const result = yield* ec2.describeNatGateways({ Filter: filters });
|
|
60
|
+
// Find a NAT Gateway that's not deleted and has matching tags
|
|
61
|
+
for (const gw of result.NatGateways ?? []) {
|
|
62
|
+
return gw;
|
|
63
|
+
}
|
|
64
|
+
return undefined;
|
|
65
|
+
});
|
|
66
|
+
return {
|
|
67
|
+
stables: ["natGatewayId", "natGatewayArn", "vpcId"],
|
|
68
|
+
read: Effect.fn(function* ({ id, output }) {
|
|
69
|
+
if (output) {
|
|
70
|
+
// We have the NAT Gateway ID, use it directly
|
|
71
|
+
return toAttrs(yield* describeNatGateway(output.natGatewayId));
|
|
72
|
+
}
|
|
73
|
+
// No output - try to find by tags (recovery from incomplete create)
|
|
74
|
+
const gw = yield* findNatGatewayByTags(id);
|
|
75
|
+
if (gw) {
|
|
76
|
+
return toAttrs(gw);
|
|
77
|
+
}
|
|
78
|
+
// Not found
|
|
79
|
+
return undefined;
|
|
80
|
+
}),
|
|
81
|
+
diff: Effect.fn(function* ({ news, olds }) {
|
|
82
|
+
// NAT Gateway is mostly immutable - any change to core properties requires replacement
|
|
83
|
+
if (news.subnetId !== olds.subnetId ||
|
|
84
|
+
news.connectivityType !== olds.connectivityType ||
|
|
85
|
+
news.allocationId !== olds.allocationId) {
|
|
86
|
+
return { action: "replace" };
|
|
87
|
+
}
|
|
88
|
+
// Tags can be updated in-place
|
|
89
|
+
}),
|
|
90
|
+
create: Effect.fn(function* ({ id, news, session }) {
|
|
91
|
+
yield* session.note("Creating NAT Gateway...");
|
|
92
|
+
const result = yield* ec2.createNatGateway({
|
|
93
|
+
SubnetId: news.subnetId,
|
|
94
|
+
AllocationId: news.allocationId,
|
|
95
|
+
ConnectivityType: news.connectivityType ?? "public",
|
|
96
|
+
PrivateIpAddress: news.privateIpAddress,
|
|
97
|
+
SecondaryAllocationIds: news.secondaryAllocationIds,
|
|
98
|
+
SecondaryPrivateIpAddresses: news.secondaryPrivateIpAddresses,
|
|
99
|
+
SecondaryPrivateIpAddressCount: news.secondaryPrivateIpAddressCount,
|
|
100
|
+
TagSpecifications: [
|
|
101
|
+
{
|
|
102
|
+
ResourceType: "natgateway",
|
|
103
|
+
Tags: createTagsList(createTags(id, news.tags)),
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
DryRun: false,
|
|
107
|
+
});
|
|
108
|
+
const natGatewayId = result.NatGateway.NatGatewayId;
|
|
109
|
+
yield* session.note(`NAT Gateway created: ${natGatewayId}`);
|
|
110
|
+
// Wait for NAT Gateway to be available
|
|
111
|
+
const gw = yield* waitForNatGatewayAvailable(natGatewayId, session);
|
|
112
|
+
return toAttrs(gw);
|
|
113
|
+
}),
|
|
114
|
+
update: Effect.fn(function* ({ id, news, output, session }) {
|
|
115
|
+
const natGatewayId = output.natGatewayId;
|
|
116
|
+
// Handle tag updates
|
|
117
|
+
const newTags = createTags(id, news.tags);
|
|
118
|
+
const oldTags = (yield* ec2
|
|
119
|
+
.describeTags({
|
|
120
|
+
Filters: [
|
|
121
|
+
{ Name: "resource-id", Values: [natGatewayId] },
|
|
122
|
+
{ Name: "resource-type", Values: ["natgateway"] },
|
|
123
|
+
],
|
|
124
|
+
})
|
|
125
|
+
.pipe(Effect.map((r) => Object.fromEntries(r.Tags?.map((t) => [t.Key, t.Value]) ?? [])))) ?? {};
|
|
126
|
+
const { removed, upsert } = diffTags(oldTags, newTags);
|
|
127
|
+
if (removed.length > 0) {
|
|
128
|
+
yield* ec2.deleteTags({
|
|
129
|
+
Resources: [natGatewayId],
|
|
130
|
+
Tags: removed.map((key) => ({ Key: key })),
|
|
131
|
+
DryRun: false,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
if (upsert.length > 0) {
|
|
135
|
+
yield* ec2.createTags({
|
|
136
|
+
Resources: [natGatewayId],
|
|
137
|
+
Tags: upsert,
|
|
138
|
+
DryRun: false,
|
|
139
|
+
});
|
|
140
|
+
yield* session.note("Updated tags");
|
|
141
|
+
}
|
|
142
|
+
// Refresh state
|
|
143
|
+
const gw = yield* describeNatGateway(natGatewayId);
|
|
144
|
+
return toAttrs(gw);
|
|
145
|
+
}),
|
|
146
|
+
delete: Effect.fn(function* ({ output, session }) {
|
|
147
|
+
const natGatewayId = output.natGatewayId;
|
|
148
|
+
yield* session.note(`Deleting NAT Gateway: ${natGatewayId}`);
|
|
149
|
+
yield* ec2
|
|
150
|
+
.deleteNatGateway({
|
|
151
|
+
NatGatewayId: natGatewayId,
|
|
152
|
+
DryRun: false,
|
|
153
|
+
})
|
|
154
|
+
.pipe(Effect.catchTag("NatGatewayNotFound", () => Effect.void));
|
|
155
|
+
// Wait for NAT Gateway to be deleted
|
|
156
|
+
yield* waitForNatGatewayDeleted(natGatewayId, session);
|
|
157
|
+
yield* session.note(`NAT Gateway ${natGatewayId} deleted`);
|
|
158
|
+
}),
|
|
159
|
+
};
|
|
160
|
+
}));
|
|
161
|
+
// Retryable error: NAT Gateway is still pending
|
|
162
|
+
class NatGatewayPending extends Data.TaggedError("NatGatewayPending") {
|
|
163
|
+
}
|
|
164
|
+
// Terminal error: NAT Gateway creation failed
|
|
165
|
+
class NatGatewayFailed extends Data.TaggedError("NatGatewayFailed") {
|
|
166
|
+
}
|
|
167
|
+
// Terminal error: NAT Gateway not found
|
|
168
|
+
class NatGatewayNotFound extends Data.TaggedError("NatGatewayNotFound") {
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Wait for NAT Gateway to be in available state
|
|
172
|
+
*/
|
|
173
|
+
const waitForNatGatewayAvailable = (natGatewayId, session) => Effect.gen(function* () {
|
|
174
|
+
const ec2 = yield* EC2Client;
|
|
175
|
+
const result = yield* ec2.describeNatGateways({
|
|
176
|
+
NatGatewayIds: [natGatewayId],
|
|
177
|
+
});
|
|
178
|
+
const gw = result.NatGateways?.[0];
|
|
179
|
+
if (!gw) {
|
|
180
|
+
return yield* new NatGatewayNotFound({ natGatewayId });
|
|
181
|
+
}
|
|
182
|
+
if (gw.State === "available") {
|
|
183
|
+
return gw;
|
|
184
|
+
}
|
|
185
|
+
if (gw.State === "failed") {
|
|
186
|
+
return yield* new NatGatewayFailed({
|
|
187
|
+
natGatewayId,
|
|
188
|
+
failureCode: gw.FailureCode,
|
|
189
|
+
failureMessage: gw.FailureMessage,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
// Still pending - this is the only retryable case
|
|
193
|
+
return yield* new NatGatewayPending({ natGatewayId, state: gw.State });
|
|
194
|
+
}).pipe(Effect.tapError(Effect.logDebug), Effect.retry({
|
|
195
|
+
while: (e) => e._tag === "NatGatewayPending",
|
|
196
|
+
schedule: Schedule.fixed(5000).pipe(Schedule.intersect(Schedule.recurs(60)), // Max 5 minutes
|
|
197
|
+
Schedule.tapOutput(([, attempt]) => session.note(`Waiting for NAT Gateway to be available... (${(attempt + 1) * 5}s)`))),
|
|
198
|
+
}));
|
|
199
|
+
// Retryable error: NAT Gateway is still deleting
|
|
200
|
+
class NatGatewayDeleting extends Data.TaggedError("NatGatewayDeleting") {
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Wait for NAT Gateway to be deleted
|
|
204
|
+
*/
|
|
205
|
+
const waitForNatGatewayDeleted = (natGatewayId, session) => Effect.gen(function* () {
|
|
206
|
+
const ec2 = yield* EC2Client;
|
|
207
|
+
const result = yield* ec2
|
|
208
|
+
.describeNatGateways({ NatGatewayIds: [natGatewayId] })
|
|
209
|
+
.pipe(Effect.catchTag("NatGatewayNotFound", () => Effect.succeed({ NatGateways: [] })));
|
|
210
|
+
const gw = result.NatGateways?.[0];
|
|
211
|
+
if (!gw || gw.State === "deleted") {
|
|
212
|
+
return; // Successfully deleted
|
|
213
|
+
}
|
|
214
|
+
yield* Effect.logDebug(gw);
|
|
215
|
+
// Still deleting - this is the only retryable case
|
|
216
|
+
return yield* new NatGatewayDeleting({ natGatewayId, state: gw.State });
|
|
217
|
+
}).pipe(Effect.tapError(Effect.logDebug), Effect.retry({
|
|
218
|
+
while: (e) => e._tag === "NatGatewayDeleting",
|
|
219
|
+
schedule: Schedule.fixed(5000).pipe(Schedule.intersect(Schedule.recurs(60)), // Max 5 minutes
|
|
220
|
+
Schedule.tapOutput(([, attempt]) => session.note(`Waiting for NAT Gateway deletion... (${(attempt + 1) * 5}s)`))),
|
|
221
|
+
}));
|
|
222
|
+
//# sourceMappingURL=nat-gateway.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nat-gateway.provider.js","sourceRoot":"","sources":["../../../src/aws/ec2/nat-gateway.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Input } from "../../input.ts";
|
|
2
|
+
import { Resource } from "../../resource.ts";
|
|
3
|
+
import type { NetworkAclId } from "./network-acl.ts";
|
|
4
|
+
import type { SubnetId } from "./subnet.ts";
|
|
5
|
+
export declare const NetworkAclAssociation: (<const ID extends string, const Props extends NetworkAclAssociationProps>(id: ID, props: Props) => NetworkAclAssociation<ID, Props>) & {
|
|
6
|
+
new (): NetworkAclAssociation<string, NetworkAclAssociationProps> & {
|
|
7
|
+
parent: NetworkAclAssociation<string, NetworkAclAssociationProps>;
|
|
8
|
+
};
|
|
9
|
+
type: "AWS.EC2.NetworkAclAssociation";
|
|
10
|
+
parent: NetworkAclAssociation<string, NetworkAclAssociationProps>;
|
|
11
|
+
provider: import("../../resource.ts").ResourceTags<NetworkAclAssociation<string, NetworkAclAssociationProps>>;
|
|
12
|
+
} & {
|
|
13
|
+
type: "AWS.EC2.NetworkAclAssociation";
|
|
14
|
+
provider: import("../../resource.ts").ResourceTags<NetworkAclAssociation<string, NetworkAclAssociationProps>>;
|
|
15
|
+
};
|
|
16
|
+
export interface NetworkAclAssociation<ID extends string = string, Props extends NetworkAclAssociationProps = NetworkAclAssociationProps> extends Resource<"AWS.EC2.NetworkAclAssociation", ID, Props, NetworkAclAssociationAttrs<Input.Resolve<Props>>, NetworkAclAssociation> {
|
|
17
|
+
}
|
|
18
|
+
export type NetworkAclAssociationId<ID extends string = string> = `aclassoc-${ID}`;
|
|
19
|
+
export declare const NetworkAclAssociationId: <ID extends string>(id: ID) => ID & NetworkAclAssociationId<ID>;
|
|
20
|
+
export interface NetworkAclAssociationProps {
|
|
21
|
+
/**
|
|
22
|
+
* The ID of the new network ACL to associate with the subnet.
|
|
23
|
+
*/
|
|
24
|
+
networkAclId: Input<NetworkAclId>;
|
|
25
|
+
/**
|
|
26
|
+
* The ID of the subnet to associate with the network ACL.
|
|
27
|
+
*/
|
|
28
|
+
subnetId: Input<SubnetId>;
|
|
29
|
+
}
|
|
30
|
+
export interface NetworkAclAssociationAttrs<Props extends Input.Resolve<NetworkAclAssociationProps>> {
|
|
31
|
+
/**
|
|
32
|
+
* The ID of the association between the network ACL and subnet.
|
|
33
|
+
*/
|
|
34
|
+
associationId: NetworkAclAssociationId;
|
|
35
|
+
/**
|
|
36
|
+
* The ID of the network ACL.
|
|
37
|
+
*/
|
|
38
|
+
networkAclId: Props["networkAclId"];
|
|
39
|
+
/**
|
|
40
|
+
* The ID of the subnet.
|
|
41
|
+
*/
|
|
42
|
+
subnetId: Props["subnetId"];
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=network-acl-association.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-acl-association.d.ts","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-association.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,eAAO,MAAM,qBAAqB,UACzB,EAAE,SAAS,MAAM,QAAQ,KAAK,SAAS,0BAA0B,MAClE,EAAE,SACC,KAAK,KACX,qBAAqB,CAAC,EAAE,EAAE,KAAK,CAAC;;;;;;;;;;CACF,CAAC;AAEpC,MAAM,WAAW,qBAAqB,CACpC,EAAE,SAAS,MAAM,GAAG,MAAM,EAC1B,KAAK,SAAS,0BAA0B,GAAG,0BAA0B,CACrE,SAAQ,QAAQ,CAChB,+BAA+B,EAC/B,EAAE,EACF,KAAK,EACL,0BAA0B,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAChD,qBAAqB,CACtB;CAAG;AAEJ,MAAM,MAAM,uBAAuB,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,IAC5D,YAAY,EAAE,EAAE,CAAC;AACnB,eAAO,MAAM,uBAAuB,GAAI,EAAE,SAAS,MAAM,EACvD,IAAI,EAAE,KACL,EAAE,GAAG,uBAAuB,CAAC,EAAE,CACoB,CAAC;AAEvD,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAElC;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,0BAA0B,CACzC,KAAK,SAAS,KAAK,CAAC,OAAO,CAAC,0BAA0B,CAAC;IAEvD;;OAEG;IACH,aAAa,EAAE,uBAAuB,CAAC;IAEvC;;OAEG;IACH,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAEpC;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-acl-association.js","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-association.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAI7C,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAK1C,+BAA+B,CAAC,CAAC;AAepC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,EAAM,EAC4B,EAAE,CACpC,YAAY,EAAE,EAAsC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { EC2Client } from "./client.ts";
|
|
2
|
+
import { NetworkAclAssociation } from "./network-acl-association.ts";
|
|
3
|
+
export declare const networkAclAssociationProvider: () => import("effect/Layer").Layer<import("../../provider.ts").Provider<NetworkAclAssociation<string, import("./network-acl-association.ts").NetworkAclAssociationProps>>, never, EC2Client>;
|
|
4
|
+
//# sourceMappingURL=network-acl-association.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-acl-association.provider.d.ts","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-association.provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,qBAAqB,EAEtB,MAAM,8BAA8B,CAAC;AAItC,eAAO,MAAM,6BAA6B,8LAyKvC,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { EC2Client } from "./client.js";
|
|
3
|
+
import { NetworkAclAssociation, } from "./network-acl-association.js";
|
|
4
|
+
export const networkAclAssociationProvider = () => NetworkAclAssociation.provider.effect(Effect.gen(function* () {
|
|
5
|
+
const ec2 = yield* EC2Client;
|
|
6
|
+
const findAssociation = (subnetId) => ec2
|
|
7
|
+
.describeNetworkAcls({
|
|
8
|
+
Filters: [{ Name: "association.subnet-id", Values: [subnetId] }],
|
|
9
|
+
})
|
|
10
|
+
.pipe(Effect.map((r) => {
|
|
11
|
+
const acl = r.NetworkAcls?.[0];
|
|
12
|
+
const assoc = acl?.Associations?.find((a) => a.SubnetId === subnetId);
|
|
13
|
+
return assoc
|
|
14
|
+
? {
|
|
15
|
+
associationId: assoc.NetworkAclAssociationId,
|
|
16
|
+
networkAclId: assoc.NetworkAclId,
|
|
17
|
+
subnetId: assoc.SubnetId,
|
|
18
|
+
}
|
|
19
|
+
: undefined;
|
|
20
|
+
}));
|
|
21
|
+
return {
|
|
22
|
+
stables: ["subnetId"],
|
|
23
|
+
read: Effect.fn(function* ({ olds }) {
|
|
24
|
+
if (!olds)
|
|
25
|
+
return undefined;
|
|
26
|
+
const assoc = yield* findAssociation(olds.subnetId);
|
|
27
|
+
if (!assoc) {
|
|
28
|
+
return yield* Effect.fail(new Error(`Network ACL Association not found for subnet ${olds.subnetId}`));
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
associationId: assoc.associationId,
|
|
32
|
+
networkAclId: assoc.networkAclId,
|
|
33
|
+
subnetId: assoc.subnetId,
|
|
34
|
+
};
|
|
35
|
+
}),
|
|
36
|
+
diff: Effect.fn(function* ({ news, olds }) {
|
|
37
|
+
// Subnet change requires replacement
|
|
38
|
+
if (news.subnetId !== olds.subnetId) {
|
|
39
|
+
return { action: "replace" };
|
|
40
|
+
}
|
|
41
|
+
// Network ACL change can be done via replaceNetworkAclAssociation
|
|
42
|
+
}),
|
|
43
|
+
create: Effect.fn(function* ({ news, session }) {
|
|
44
|
+
yield* session.note(`Creating Network ACL Association for subnet ${news.subnetId}...`);
|
|
45
|
+
// First, find the current association for this subnet (every subnet has one)
|
|
46
|
+
const currentAssoc = yield* findAssociation(news.subnetId);
|
|
47
|
+
if (!currentAssoc) {
|
|
48
|
+
return yield* Effect.fail(new Error(`No existing Network ACL Association found for subnet ${news.subnetId}`));
|
|
49
|
+
}
|
|
50
|
+
// Replace the association with the new network ACL
|
|
51
|
+
const result = yield* ec2.replaceNetworkAclAssociation({
|
|
52
|
+
AssociationId: currentAssoc.associationId,
|
|
53
|
+
NetworkAclId: news.networkAclId,
|
|
54
|
+
DryRun: false,
|
|
55
|
+
});
|
|
56
|
+
const newAssociationId = result.NewAssociationId;
|
|
57
|
+
yield* session.note(`Network ACL Association created: ${newAssociationId}`);
|
|
58
|
+
return {
|
|
59
|
+
associationId: newAssociationId,
|
|
60
|
+
networkAclId: news.networkAclId,
|
|
61
|
+
subnetId: news.subnetId,
|
|
62
|
+
};
|
|
63
|
+
}),
|
|
64
|
+
update: Effect.fn(function* ({ news, output, session }) {
|
|
65
|
+
yield* session.note(`Updating Network ACL Association...`);
|
|
66
|
+
// Replace the association with the new network ACL
|
|
67
|
+
const result = yield* ec2.replaceNetworkAclAssociation({
|
|
68
|
+
AssociationId: output.associationId,
|
|
69
|
+
NetworkAclId: news.networkAclId,
|
|
70
|
+
DryRun: false,
|
|
71
|
+
});
|
|
72
|
+
const newAssociationId = result.NewAssociationId;
|
|
73
|
+
yield* session.note(`Network ACL Association updated: ${newAssociationId}`);
|
|
74
|
+
return {
|
|
75
|
+
associationId: newAssociationId,
|
|
76
|
+
networkAclId: news.networkAclId,
|
|
77
|
+
subnetId: news.subnetId,
|
|
78
|
+
};
|
|
79
|
+
}),
|
|
80
|
+
delete: Effect.fn(function* ({ olds, output, session }) {
|
|
81
|
+
yield* session.note(`Deleting Network ACL Association...`);
|
|
82
|
+
// When deleting, we need to associate the subnet back to the default NACL
|
|
83
|
+
// Find the default NACL for the VPC
|
|
84
|
+
const subnetResult = yield* ec2.describeSubnets({
|
|
85
|
+
SubnetIds: [olds.subnetId],
|
|
86
|
+
});
|
|
87
|
+
const vpcId = subnetResult.Subnets?.[0]?.VpcId;
|
|
88
|
+
if (vpcId) {
|
|
89
|
+
const defaultAclResult = yield* ec2.describeNetworkAcls({
|
|
90
|
+
Filters: [
|
|
91
|
+
{ Name: "vpc-id", Values: [vpcId] },
|
|
92
|
+
{ Name: "default", Values: ["true"] },
|
|
93
|
+
],
|
|
94
|
+
});
|
|
95
|
+
const defaultAclId = defaultAclResult.NetworkAcls?.[0]?.NetworkAclId;
|
|
96
|
+
if (defaultAclId &&
|
|
97
|
+
defaultAclId !== olds.networkAclId) {
|
|
98
|
+
// Replace with default NACL
|
|
99
|
+
yield* ec2
|
|
100
|
+
.replaceNetworkAclAssociation({
|
|
101
|
+
AssociationId: output.associationId,
|
|
102
|
+
NetworkAclId: defaultAclId,
|
|
103
|
+
DryRun: false,
|
|
104
|
+
})
|
|
105
|
+
.pipe(Effect.catchTag("InvalidAssociationID.NotFound", () => Effect.void));
|
|
106
|
+
yield* session.note(`Network ACL Association reverted to default`);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
yield* session.note(`Already using default Network ACL, nothing to do`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}),
|
|
113
|
+
};
|
|
114
|
+
}));
|
|
115
|
+
//# sourceMappingURL=network-acl-association.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-acl-association.provider.js","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-association.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import type * as EC2 from "itty-aws/ec2";
|
|
2
|
+
import type { Input } from "../../input.ts";
|
|
3
|
+
import { Resource } from "../../resource.ts";
|
|
4
|
+
import type { NetworkAclId } from "./network-acl.ts";
|
|
5
|
+
export declare const NetworkAclEntry: (<const ID extends string, const Props extends NetworkAclEntryProps>(id: ID, props: Props) => NetworkAclEntry<ID, Props>) & {
|
|
6
|
+
new (): NetworkAclEntry<string, NetworkAclEntryProps> & {
|
|
7
|
+
parent: NetworkAclEntry<string, NetworkAclEntryProps>;
|
|
8
|
+
};
|
|
9
|
+
type: "AWS.EC2.NetworkAclEntry";
|
|
10
|
+
parent: NetworkAclEntry<string, NetworkAclEntryProps>;
|
|
11
|
+
provider: import("../../resource.ts").ResourceTags<NetworkAclEntry<string, NetworkAclEntryProps>>;
|
|
12
|
+
} & {
|
|
13
|
+
type: "AWS.EC2.NetworkAclEntry";
|
|
14
|
+
provider: import("../../resource.ts").ResourceTags<NetworkAclEntry<string, NetworkAclEntryProps>>;
|
|
15
|
+
};
|
|
16
|
+
export interface NetworkAclEntry<ID extends string = string, Props extends NetworkAclEntryProps = NetworkAclEntryProps> extends Resource<"AWS.EC2.NetworkAclEntry", ID, Props, NetworkAclEntryAttrs<Input.Resolve<Props>>, NetworkAclEntry> {
|
|
17
|
+
}
|
|
18
|
+
export interface NetworkAclEntryProps {
|
|
19
|
+
/**
|
|
20
|
+
* The ID of the network ACL.
|
|
21
|
+
*/
|
|
22
|
+
networkAclId: Input<NetworkAclId>;
|
|
23
|
+
/**
|
|
24
|
+
* The rule number for the entry (1-32766).
|
|
25
|
+
* Rules are evaluated in order from lowest to highest.
|
|
26
|
+
*/
|
|
27
|
+
ruleNumber: number;
|
|
28
|
+
/**
|
|
29
|
+
* The protocol number.
|
|
30
|
+
* A value of "-1" means all protocols.
|
|
31
|
+
* Common values: 6 (TCP), 17 (UDP), 1 (ICMP)
|
|
32
|
+
*/
|
|
33
|
+
protocol: string;
|
|
34
|
+
/**
|
|
35
|
+
* Whether to allow or deny the traffic that matches the rule.
|
|
36
|
+
*/
|
|
37
|
+
ruleAction: EC2.RuleAction;
|
|
38
|
+
/**
|
|
39
|
+
* Whether this is an egress (outbound) rule.
|
|
40
|
+
* @default false (ingress)
|
|
41
|
+
*/
|
|
42
|
+
egress?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* The IPv4 CIDR block.
|
|
45
|
+
* Either cidrBlock or ipv6CidrBlock must be specified.
|
|
46
|
+
*/
|
|
47
|
+
cidrBlock?: string;
|
|
48
|
+
/**
|
|
49
|
+
* The IPv6 CIDR block.
|
|
50
|
+
* Either cidrBlock or ipv6CidrBlock must be specified.
|
|
51
|
+
*/
|
|
52
|
+
ipv6CidrBlock?: string;
|
|
53
|
+
/**
|
|
54
|
+
* ICMP type and code. Required if protocol is 1 (ICMP) or 58 (ICMPv6).
|
|
55
|
+
*/
|
|
56
|
+
icmpTypeCode?: {
|
|
57
|
+
/**
|
|
58
|
+
* The ICMP code. Use -1 to specify all codes.
|
|
59
|
+
*/
|
|
60
|
+
code?: number;
|
|
61
|
+
/**
|
|
62
|
+
* The ICMP type. Use -1 to specify all types.
|
|
63
|
+
*/
|
|
64
|
+
type?: number;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* The port range for TCP/UDP protocols.
|
|
68
|
+
*/
|
|
69
|
+
portRange?: {
|
|
70
|
+
/**
|
|
71
|
+
* The first port in the range.
|
|
72
|
+
*/
|
|
73
|
+
from?: number;
|
|
74
|
+
/**
|
|
75
|
+
* The last port in the range.
|
|
76
|
+
*/
|
|
77
|
+
to?: number;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export interface NetworkAclEntryAttrs<Props extends NetworkAclEntryProps> {
|
|
81
|
+
/**
|
|
82
|
+
* The ID of the network ACL.
|
|
83
|
+
*/
|
|
84
|
+
networkAclId: Props["networkAclId"];
|
|
85
|
+
/**
|
|
86
|
+
* The rule number.
|
|
87
|
+
*/
|
|
88
|
+
ruleNumber: Props["ruleNumber"];
|
|
89
|
+
/**
|
|
90
|
+
* Whether this is an egress rule.
|
|
91
|
+
*/
|
|
92
|
+
egress: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* The protocol.
|
|
95
|
+
*/
|
|
96
|
+
protocol: Props["protocol"];
|
|
97
|
+
/**
|
|
98
|
+
* The rule action (allow or deny).
|
|
99
|
+
*/
|
|
100
|
+
ruleAction: Props["ruleAction"];
|
|
101
|
+
/**
|
|
102
|
+
* The IPv4 CIDR block.
|
|
103
|
+
*/
|
|
104
|
+
cidrBlock?: Props["cidrBlock"];
|
|
105
|
+
/**
|
|
106
|
+
* The IPv6 CIDR block.
|
|
107
|
+
*/
|
|
108
|
+
ipv6CidrBlock?: Props["ipv6CidrBlock"];
|
|
109
|
+
/**
|
|
110
|
+
* The ICMP type and code.
|
|
111
|
+
*/
|
|
112
|
+
icmpTypeCode?: Props["icmpTypeCode"];
|
|
113
|
+
/**
|
|
114
|
+
* The port range.
|
|
115
|
+
*/
|
|
116
|
+
portRange?: Props["portRange"];
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=network-acl-entry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-acl-entry.d.ts","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-entry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,eAAO,MAAM,eAAe,UACnB,EAAE,SAAS,MAAM,QAAQ,KAAK,SAAS,oBAAoB,MAC5D,EAAE,SACC,KAAK,KACX,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC;;;;;;;;;;CACF,CAAC;AAE9B,MAAM,WAAW,eAAe,CAC9B,EAAE,SAAS,MAAM,GAAG,MAAM,EAC1B,KAAK,SAAS,oBAAoB,GAAG,oBAAoB,CACzD,SAAQ,QAAQ,CAChB,yBAAyB,EACzB,EAAE,EACF,KAAK,EACL,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAC1C,eAAe,CAChB;CAAG;AAEJ,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAElC;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;IAE3B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,YAAY,CAAC,EAAE;QACb;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,EAAE;QACV;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,EAAE,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK,SAAS,oBAAoB;IACtE;;OAEG;IACH,YAAY,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAEpC;;OAEG;IACH,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAEhC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAE5B;;OAEG;IACH,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAEhC;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAE/B;;OAEG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IAEvC;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAErC;;OAEG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-acl-entry.js","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-entry.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAKpC,yBAAyB,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { EC2Client } from "./client.ts";
|
|
2
|
+
import { NetworkAclEntry, type NetworkAclEntryProps } from "./network-acl-entry.ts";
|
|
3
|
+
export declare const networkAclEntryProvider: () => import("effect/Layer").Layer<import("../../provider.ts").Provider<NetworkAclEntry<string, NetworkAclEntryProps>>, never, EC2Client>;
|
|
4
|
+
//# sourceMappingURL=network-acl-entry.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network-acl-entry.provider.d.ts","sourceRoot":"","sources":["../../../src/aws/ec2/network-acl-entry.provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,eAAe,EAEf,KAAK,oBAAoB,EAC1B,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,uBAAuB,2IAgNjC,CAAC"}
|