@relkit/cloud-aws 0.0.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/LICENSE +21 -0
- package/README.md +5 -0
- package/dist/components/RelkitApplicationService/container.d.ts +4 -0
- package/dist/components/RelkitApplicationService/container.d.ts.map +1 -0
- package/dist/components/RelkitApplicationService/container.js +64 -0
- package/dist/components/RelkitApplicationService/container.js.map +1 -0
- package/dist/components/RelkitApplicationService/foundation.d.ts +11 -0
- package/dist/components/RelkitApplicationService/foundation.d.ts.map +1 -0
- package/dist/components/RelkitApplicationService/foundation.js +44 -0
- package/dist/components/RelkitApplicationService/foundation.js.map +1 -0
- package/dist/components/RelkitApplicationService/index.d.ts +22 -0
- package/dist/components/RelkitApplicationService/index.d.ts.map +1 -0
- package/dist/components/RelkitApplicationService/index.js +147 -0
- package/dist/components/RelkitApplicationService/index.js.map +1 -0
- package/dist/components/RelkitApplicationService/types.d.ts +30 -0
- package/dist/components/RelkitApplicationService/types.d.ts.map +1 -0
- package/dist/components/RelkitApplicationService/types.js +2 -0
- package/dist/components/RelkitApplicationService/types.js.map +1 -0
- package/dist/components/RelkitBuckets/index.d.ts +11 -0
- package/dist/components/RelkitBuckets/index.d.ts.map +1 -0
- package/dist/components/RelkitBuckets/index.js +48 -0
- package/dist/components/RelkitBuckets/index.js.map +1 -0
- package/dist/components/RelkitBuckets/types.d.ts +23 -0
- package/dist/components/RelkitBuckets/types.d.ts.map +1 -0
- package/dist/components/RelkitBuckets/types.js +2 -0
- package/dist/components/RelkitBuckets/types.js.map +1 -0
- package/dist/components/RelkitBuckets/validation.d.ts +10 -0
- package/dist/components/RelkitBuckets/validation.d.ts.map +1 -0
- package/dist/components/RelkitBuckets/validation.js +22 -0
- package/dist/components/RelkitBuckets/validation.js.map +1 -0
- package/dist/components/RelkitCaches/client.d.ts +20 -0
- package/dist/components/RelkitCaches/client.d.ts.map +1 -0
- package/dist/components/RelkitCaches/client.js +42 -0
- package/dist/components/RelkitCaches/client.js.map +1 -0
- package/dist/components/RelkitCaches/index.d.ts +12 -0
- package/dist/components/RelkitCaches/index.d.ts.map +1 -0
- package/dist/components/RelkitCaches/index.js +71 -0
- package/dist/components/RelkitCaches/index.js.map +1 -0
- package/dist/components/RelkitCaches/types.d.ts +31 -0
- package/dist/components/RelkitCaches/types.d.ts.map +1 -0
- package/dist/components/RelkitCaches/types.js +2 -0
- package/dist/components/RelkitCaches/types.js.map +1 -0
- package/dist/components/RelkitCaches/validation.d.ts +11 -0
- package/dist/components/RelkitCaches/validation.d.ts.map +1 -0
- package/dist/components/RelkitCaches/validation.js +34 -0
- package/dist/components/RelkitCaches/validation.js.map +1 -0
- package/dist/components/RelkitContainerRegistry/index.d.ts +19 -0
- package/dist/components/RelkitContainerRegistry/index.d.ts.map +1 -0
- package/dist/components/RelkitContainerRegistry/index.js +29 -0
- package/dist/components/RelkitContainerRegistry/index.js.map +1 -0
- package/dist/components/RelkitEventBus/index.d.ts +24 -0
- package/dist/components/RelkitEventBus/index.d.ts.map +1 -0
- package/dist/components/RelkitEventBus/index.js +71 -0
- package/dist/components/RelkitEventBus/index.js.map +1 -0
- package/dist/components/RelkitEventBus/names.d.ts +2 -0
- package/dist/components/RelkitEventBus/names.d.ts.map +1 -0
- package/dist/components/RelkitEventBus/names.js +9 -0
- package/dist/components/RelkitEventBus/names.js.map +1 -0
- package/dist/components/RelkitEventBus/policies.d.ts +7 -0
- package/dist/components/RelkitEventBus/policies.d.ts.map +1 -0
- package/dist/components/RelkitEventBus/policies.js +59 -0
- package/dist/components/RelkitEventBus/policies.js.map +1 -0
- package/dist/components/RelkitEventBus/resources.d.ts +5 -0
- package/dist/components/RelkitEventBus/resources.d.ts.map +1 -0
- package/dist/components/RelkitEventBus/resources.js +120 -0
- package/dist/components/RelkitEventBus/resources.js.map +1 -0
- package/dist/components/RelkitEventBus/types.d.ts +76 -0
- package/dist/components/RelkitEventBus/types.d.ts.map +1 -0
- package/dist/components/RelkitEventBus/types.js +2 -0
- package/dist/components/RelkitEventBus/types.js.map +1 -0
- package/dist/components/RelkitEventBus/validation.d.ts +30 -0
- package/dist/components/RelkitEventBus/validation.d.ts.map +1 -0
- package/dist/components/RelkitEventBus/validation.js +145 -0
- package/dist/components/RelkitEventBus/validation.js.map +1 -0
- package/dist/components/RelkitJobQueues/index.d.ts +21 -0
- package/dist/components/RelkitJobQueues/index.d.ts.map +1 -0
- package/dist/components/RelkitJobQueues/index.js +139 -0
- package/dist/components/RelkitJobQueues/index.js.map +1 -0
- package/dist/components/RelkitJobQueues/policies.d.ts +8 -0
- package/dist/components/RelkitJobQueues/policies.d.ts.map +1 -0
- package/dist/components/RelkitJobQueues/policies.js +73 -0
- package/dist/components/RelkitJobQueues/policies.js.map +1 -0
- package/dist/components/RelkitJobQueues/resources.d.ts +11 -0
- package/dist/components/RelkitJobQueues/resources.d.ts.map +1 -0
- package/dist/components/RelkitJobQueues/resources.js +64 -0
- package/dist/components/RelkitJobQueues/resources.js.map +1 -0
- package/dist/components/RelkitJobQueues/types.d.ts +77 -0
- package/dist/components/RelkitJobQueues/types.d.ts.map +1 -0
- package/dist/components/RelkitJobQueues/types.js +2 -0
- package/dist/components/RelkitJobQueues/types.js.map +1 -0
- package/dist/components/RelkitJobQueues/validation.d.ts +32 -0
- package/dist/components/RelkitJobQueues/validation.d.ts.map +1 -0
- package/dist/components/RelkitJobQueues/validation.js +142 -0
- package/dist/components/RelkitJobQueues/validation.js.map +1 -0
- package/dist/components/RelkitNetwork/index.d.ts +25 -0
- package/dist/components/RelkitNetwork/index.d.ts.map +1 -0
- package/dist/components/RelkitNetwork/index.js +70 -0
- package/dist/components/RelkitNetwork/index.js.map +1 -0
- package/dist/components/RelkitObservability/index.d.ts +15 -0
- package/dist/components/RelkitObservability/index.d.ts.map +1 -0
- package/dist/components/RelkitObservability/index.js +62 -0
- package/dist/components/RelkitObservability/index.js.map +1 -0
- package/dist/components/RelkitObservability/types.d.ts +25 -0
- package/dist/components/RelkitObservability/types.d.ts.map +1 -0
- package/dist/components/RelkitObservability/types.js +2 -0
- package/dist/components/RelkitObservability/types.js.map +1 -0
- package/dist/components/common.d.ts +34 -0
- package/dist/components/common.d.ts.map +1 -0
- package/dist/components/common.js +109 -0
- package/dist/components/common.js.map +1 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +9 -0
- package/dist/components/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/buckets.d.ts +3 -0
- package/dist/runtime/buckets.d.ts.map +1 -0
- package/dist/runtime/buckets.js +2 -0
- package/dist/runtime/buckets.js.map +1 -0
- package/dist/runtime/cache.d.ts +3 -0
- package/dist/runtime/cache.d.ts.map +1 -0
- package/dist/runtime/cache.js +2 -0
- package/dist/runtime/cache.js.map +1 -0
- package/dist/runtime/config.d.ts +7 -0
- package/dist/runtime/config.d.ts.map +1 -0
- package/dist/runtime/config.js +10 -0
- package/dist/runtime/config.js.map +1 -0
- package/dist/runtime/events.d.ts +16 -0
- package/dist/runtime/events.d.ts.map +1 -0
- package/dist/runtime/events.js +69 -0
- package/dist/runtime/events.js.map +1 -0
- package/dist/runtime/factory.d.ts +3 -0
- package/dist/runtime/factory.d.ts.map +1 -0
- package/dist/runtime/factory.js +78 -0
- package/dist/runtime/factory.js.map +1 -0
- package/dist/runtime/http.d.ts +14 -0
- package/dist/runtime/http.d.ts.map +1 -0
- package/dist/runtime/http.js +98 -0
- package/dist/runtime/http.js.map +1 -0
- package/dist/runtime/index.d.ts +8 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +8 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/jobs.d.ts +15 -0
- package/dist/runtime/jobs.d.ts.map +1 -0
- package/dist/runtime/jobs.js +133 -0
- package/dist/runtime/jobs.js.map +1 -0
- package/dist/runtime/observability.d.ts +13 -0
- package/dist/runtime/observability.d.ts.map +1 -0
- package/dist/runtime/observability.js +16 -0
- package/dist/runtime/observability.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as aws from "@pulumi/aws";
|
|
2
|
+
import * as pulumi from "@pulumi/pulumi";
|
|
3
|
+
const WORKER_ACTIONS = ["sqs:ReceiveMessage", "sqs:DeleteMessage", "sqs:ChangeMessageVisibility"];
|
|
4
|
+
export function createWorkerPolicy(name, role, queueArns, parent) {
|
|
5
|
+
return new aws.iam.RolePolicy(`${name}-worker-policy`, {
|
|
6
|
+
name: `${name}-worker-policy`,
|
|
7
|
+
role: role.name,
|
|
8
|
+
policy: pulumi.all([...queueArns]).apply((resources) => JSON.stringify({
|
|
9
|
+
Version: "2012-10-17",
|
|
10
|
+
Statement: [{ Effect: "Allow", Action: WORKER_ACTIONS, Resource: resources }],
|
|
11
|
+
})),
|
|
12
|
+
}, { parent });
|
|
13
|
+
}
|
|
14
|
+
export function createSchedulerPolicy(name, role, queueArns, deadLetterQueueArns, parent) {
|
|
15
|
+
return new aws.iam.RolePolicy(`${name}-scheduler-policy`, {
|
|
16
|
+
name: `${name}-scheduler-policy`,
|
|
17
|
+
role: role.name,
|
|
18
|
+
policy: pulumi.all([...queueArns, ...deadLetterQueueArns]).apply((resources) => JSON.stringify({
|
|
19
|
+
Version: "2012-10-17",
|
|
20
|
+
Statement: [{ Effect: "Allow", Action: ["sqs:SendMessage"], Resource: resources }],
|
|
21
|
+
})),
|
|
22
|
+
}, { parent });
|
|
23
|
+
}
|
|
24
|
+
export function queuePolicyJson(queueArn, workerRoleArn, schedulerRoleArn) {
|
|
25
|
+
return pulumi
|
|
26
|
+
.all({ queueArn, workerRoleArn, schedulerRoleArn: schedulerRoleArn ?? "" })
|
|
27
|
+
.apply(({ queueArn: resource, workerRoleArn: worker, schedulerRoleArn: scheduler }) => JSON.stringify({
|
|
28
|
+
Version: "2012-10-17",
|
|
29
|
+
Statement: [
|
|
30
|
+
{
|
|
31
|
+
Sid: "WorkerConsume",
|
|
32
|
+
Effect: "Allow",
|
|
33
|
+
Principal: { AWS: worker },
|
|
34
|
+
Action: WORKER_ACTIONS,
|
|
35
|
+
Resource: resource,
|
|
36
|
+
},
|
|
37
|
+
...(scheduler === ""
|
|
38
|
+
? []
|
|
39
|
+
: [
|
|
40
|
+
{
|
|
41
|
+
Sid: "SchedulerSend",
|
|
42
|
+
Effect: "Allow",
|
|
43
|
+
Principal: { AWS: scheduler },
|
|
44
|
+
Action: "sqs:SendMessage",
|
|
45
|
+
Resource: resource,
|
|
46
|
+
},
|
|
47
|
+
]),
|
|
48
|
+
],
|
|
49
|
+
}));
|
|
50
|
+
}
|
|
51
|
+
export function sendPolicyJson(queueArn, schedulerRoleArn) {
|
|
52
|
+
return pulumi
|
|
53
|
+
.all({ queueArn, schedulerRoleArn })
|
|
54
|
+
.apply(({ queueArn: resource, schedulerRoleArn: scheduler }) => JSON.stringify({
|
|
55
|
+
Version: "2012-10-17",
|
|
56
|
+
Statement: [
|
|
57
|
+
{
|
|
58
|
+
Sid: "SchedulerSend",
|
|
59
|
+
Effect: "Allow",
|
|
60
|
+
Principal: { AWS: scheduler },
|
|
61
|
+
Action: "sqs:SendMessage",
|
|
62
|
+
Resource: resource,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
export function trustPolicy(service) {
|
|
68
|
+
return pulumi.output(JSON.stringify({
|
|
69
|
+
Version: "2012-10-17",
|
|
70
|
+
Statement: [{ Effect: "Allow", Principal: { Service: service }, Action: "sts:AssumeRole" }],
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=policies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policies.js","sourceRoot":"","sources":["../../../src/components/RelkitJobQueues/policies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as aws from "@pulumi/aws";
|
|
2
|
+
import * as pulumi from "@pulumi/pulumi";
|
|
3
|
+
import type { NormalizedJobQueue } from "./validation.js";
|
|
4
|
+
import type { RelkitJobQueueResource } from "./types.js";
|
|
5
|
+
type QueueResourceBase = Omit<RelkitJobQueueResource, "worker" | "retry">;
|
|
6
|
+
export declare function createWorkerRole(name: string, tags: pulumi.Input<Record<string, pulumi.Input<string>>>, parent: pulumi.Resource): aws.iam.Role;
|
|
7
|
+
export declare function createSchedulerRole(name: string, tags: pulumi.Input<Record<string, pulumi.Input<string>>>, parent: pulumi.Resource): aws.iam.Role;
|
|
8
|
+
export declare function createQueueResources(componentName: string, job: NormalizedJobQueue, tags: pulumi.Input<Record<string, pulumi.Input<string>>>, workerRoleArn: pulumi.Input<string>, schedulerRoleArn: pulumi.Input<string> | undefined, parent: pulumi.Resource): QueueResourceBase;
|
|
9
|
+
export declare function childName(componentName: string, id: string, kind: string, maxLength?: number): string;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/components/RelkitJobQueues/resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAEzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGzD,KAAK,iBAAiB,GAAG,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;AAE1E,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EACxD,MAAM,EAAE,MAAM,CAAC,QAAQ,GACtB,GAAG,CAAC,GAAG,CAAC,IAAI,CAOd;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EACxD,MAAM,EAAE,MAAM,CAAC,QAAQ,GACtB,GAAG,CAAC,GAAG,CAAC,IAAI,CAOd;AAED,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EACxD,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EACnC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,EAClD,MAAM,EAAE,MAAM,CAAC,QAAQ,GACtB,iBAAiB,CAgEnB;AAED,wBAAgB,SAAS,CACvB,aAAa,EAAE,MAAM,EACrB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,SAAS,SAAM,GACd,MAAM,CAMR"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import * as aws from "@pulumi/aws";
|
|
2
|
+
import * as pulumi from "@pulumi/pulumi";
|
|
3
|
+
import { iamRoleName } from "../common.js";
|
|
4
|
+
import { queuePolicyJson, sendPolicyJson, trustPolicy } from "./policies.js";
|
|
5
|
+
export function createWorkerRole(name, tags, parent) {
|
|
6
|
+
const roleName = iamRoleName(name, "worker-role");
|
|
7
|
+
return new aws.iam.Role(roleName, { name: roleName, assumeRolePolicy: trustPolicy("ecs-tasks.amazonaws.com"), tags }, { parent });
|
|
8
|
+
}
|
|
9
|
+
export function createSchedulerRole(name, tags, parent) {
|
|
10
|
+
const roleName = iamRoleName(name, "scheduler-role");
|
|
11
|
+
return new aws.iam.Role(roleName, { name: roleName, assumeRolePolicy: trustPolicy("scheduler.amazonaws.com"), tags }, { parent });
|
|
12
|
+
}
|
|
13
|
+
export function createQueueResources(componentName, job, tags, workerRoleArn, schedulerRoleArn, parent) {
|
|
14
|
+
const queueName = childName(componentName, job.id, "queue", 76);
|
|
15
|
+
const deadLetterQueue = new aws.sqs.Queue(`${queueName}-dlq`, {
|
|
16
|
+
name: `${queueName}-dlq`.slice(0, 80),
|
|
17
|
+
messageRetentionSeconds: job.deadLetterRetentionSeconds,
|
|
18
|
+
sqsManagedSseEnabled: true,
|
|
19
|
+
tags,
|
|
20
|
+
}, { parent });
|
|
21
|
+
const queue = new aws.sqs.Queue(queueName, {
|
|
22
|
+
name: queueName,
|
|
23
|
+
messageRetentionSeconds: job.messageRetentionSeconds,
|
|
24
|
+
receiveWaitTimeSeconds: job.workerWaitTimeSeconds,
|
|
25
|
+
visibilityTimeoutSeconds: job.visibilityTimeoutSeconds,
|
|
26
|
+
redrivePolicy: pulumi.jsonStringify({
|
|
27
|
+
deadLetterTargetArn: deadLetterQueue.arn,
|
|
28
|
+
maxReceiveCount: job.maxReceiveCount,
|
|
29
|
+
}),
|
|
30
|
+
sqsManagedSseEnabled: true,
|
|
31
|
+
tags,
|
|
32
|
+
}, { parent });
|
|
33
|
+
const redriveAllowPolicy = new aws.sqs.RedriveAllowPolicy(`${queueName}-redrive-allow`, {
|
|
34
|
+
queueUrl: deadLetterQueue.url,
|
|
35
|
+
redriveAllowPolicy: pulumi.jsonStringify({
|
|
36
|
+
redrivePermission: "byQueue",
|
|
37
|
+
sourceQueueArns: [queue.arn],
|
|
38
|
+
}),
|
|
39
|
+
}, { parent, dependsOn: [queue] });
|
|
40
|
+
const queuePolicy = new aws.sqs.QueuePolicy(`${queueName}-policy`, { queueUrl: queue.url, policy: queuePolicyJson(queue.arn, workerRoleArn, schedulerRoleArn) }, { parent, dependsOn: [queue, deadLetterQueue] });
|
|
41
|
+
const deadLetterQueuePolicy = schedulerRoleArn === undefined
|
|
42
|
+
? undefined
|
|
43
|
+
: new aws.sqs.QueuePolicy(`${queueName}-dlq-policy`, {
|
|
44
|
+
queueUrl: deadLetterQueue.url,
|
|
45
|
+
policy: sendPolicyJson(deadLetterQueue.arn, schedulerRoleArn),
|
|
46
|
+
}, { parent, dependsOn: [deadLetterQueue] });
|
|
47
|
+
return {
|
|
48
|
+
id: job.id,
|
|
49
|
+
queue,
|
|
50
|
+
deadLetterQueue,
|
|
51
|
+
queuePolicy,
|
|
52
|
+
...(deadLetterQueuePolicy === undefined ? {} : { deadLetterQueuePolicy }),
|
|
53
|
+
redriveAllowPolicy,
|
|
54
|
+
maxReceiveCount: job.maxReceiveCount,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export function childName(componentName, id, kind, maxLength = 255) {
|
|
58
|
+
const normalized = `${componentName}-${id}-${kind}`
|
|
59
|
+
.toLowerCase()
|
|
60
|
+
.replace(/[^a-z0-9-]+/g, "-")
|
|
61
|
+
.replace(/^-+|-+$/g, "");
|
|
62
|
+
return normalized.slice(0, maxLength).replace(/-+$/, "") || "relkit";
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../src/components/RelkitJobQueues/resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { JsonValue } from "@relkit/contracts";
|
|
2
|
+
import type * as aws from "@pulumi/aws";
|
|
3
|
+
import type * as pulumi from "@pulumi/pulumi";
|
|
4
|
+
import type { RelkitComponentArgs } from "../common.js";
|
|
5
|
+
export type RelkitRetryJitter = "none" | "full" | "equal";
|
|
6
|
+
export interface RelkitJobRetryPolicy {
|
|
7
|
+
readonly maxAttempts: number;
|
|
8
|
+
readonly initialDelayMs: number;
|
|
9
|
+
readonly maxDelayMs: number;
|
|
10
|
+
readonly multiplier: number;
|
|
11
|
+
readonly jitter: RelkitRetryJitter;
|
|
12
|
+
}
|
|
13
|
+
export interface RelkitJobQueueDefinition {
|
|
14
|
+
readonly id: string;
|
|
15
|
+
readonly retry: RelkitJobRetryPolicy;
|
|
16
|
+
readonly timeoutMs?: number;
|
|
17
|
+
readonly concurrency?: number;
|
|
18
|
+
readonly visibilityTimeoutSeconds?: number;
|
|
19
|
+
readonly messageRetentionSeconds?: number;
|
|
20
|
+
readonly deadLetterRetentionSeconds?: number;
|
|
21
|
+
readonly maxReceiveCount?: number;
|
|
22
|
+
readonly workerBatchSize?: number;
|
|
23
|
+
readonly workerWaitTimeSeconds?: number;
|
|
24
|
+
}
|
|
25
|
+
export interface RelkitScheduleDefinition {
|
|
26
|
+
readonly id: string;
|
|
27
|
+
readonly jobId: string;
|
|
28
|
+
readonly cron: string;
|
|
29
|
+
readonly timezone: string;
|
|
30
|
+
readonly input: JsonValue;
|
|
31
|
+
readonly overlap: "skip" | "allow";
|
|
32
|
+
}
|
|
33
|
+
export interface RelkitSchedulerRetryPolicy {
|
|
34
|
+
readonly maximumRetryAttempts?: number;
|
|
35
|
+
readonly maximumEventAgeInSeconds?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface RelkitJobQueuesArgs extends RelkitComponentArgs {
|
|
38
|
+
readonly jobs: readonly RelkitJobQueueDefinition[];
|
|
39
|
+
readonly schedules?: readonly RelkitScheduleDefinition[];
|
|
40
|
+
readonly workerRoleArn?: pulumi.Input<string>;
|
|
41
|
+
readonly schedulerRoleArn?: pulumi.Input<string>;
|
|
42
|
+
readonly workerBatchSize?: number;
|
|
43
|
+
readonly workerWaitTimeSeconds?: number;
|
|
44
|
+
readonly schedulerRetryPolicy?: RelkitSchedulerRetryPolicy;
|
|
45
|
+
}
|
|
46
|
+
export interface RelkitWorkerConsumptionConfiguration {
|
|
47
|
+
readonly jobId: string;
|
|
48
|
+
readonly queueArn: pulumi.Output<string>;
|
|
49
|
+
readonly queueUrl: pulumi.Output<string>;
|
|
50
|
+
readonly deadLetterQueueArn: pulumi.Output<string>;
|
|
51
|
+
readonly batchSize: number;
|
|
52
|
+
readonly concurrency: number;
|
|
53
|
+
readonly waitTimeSeconds: number;
|
|
54
|
+
readonly visibilityTimeoutSeconds: number;
|
|
55
|
+
readonly deliverySemantics: "at-least-once";
|
|
56
|
+
readonly environment: pulumi.Output<Record<string, string>>;
|
|
57
|
+
}
|
|
58
|
+
export interface RelkitJobQueueResource {
|
|
59
|
+
readonly id: string;
|
|
60
|
+
readonly queue: aws.sqs.Queue;
|
|
61
|
+
readonly deadLetterQueue: aws.sqs.Queue;
|
|
62
|
+
readonly queuePolicy: aws.sqs.QueuePolicy;
|
|
63
|
+
readonly deadLetterQueuePolicy?: aws.sqs.QueuePolicy;
|
|
64
|
+
readonly redriveAllowPolicy: aws.sqs.RedriveAllowPolicy;
|
|
65
|
+
readonly maxReceiveCount: number;
|
|
66
|
+
readonly retry: RelkitJobRetryPolicy;
|
|
67
|
+
readonly worker: RelkitWorkerConsumptionConfiguration;
|
|
68
|
+
}
|
|
69
|
+
export interface RelkitScheduleResource {
|
|
70
|
+
readonly id: string;
|
|
71
|
+
readonly jobId: string;
|
|
72
|
+
readonly expression: string;
|
|
73
|
+
readonly inputJson: string;
|
|
74
|
+
readonly overlap: "skip" | "allow";
|
|
75
|
+
readonly schedule: aws.scheduler.Schedule;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/RelkitJobQueues/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/RelkitJobQueues/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type JsonValue } from "@relkit/contracts";
|
|
2
|
+
import type { RelkitJobQueuesArgs, RelkitJobQueueDefinition, RelkitScheduleDefinition } from "./types.js";
|
|
3
|
+
export interface NormalizedJobQueue {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly retry: RelkitJobQueueDefinition["retry"];
|
|
6
|
+
readonly timeoutMs: number;
|
|
7
|
+
readonly concurrency: number;
|
|
8
|
+
readonly visibilityTimeoutSeconds: number;
|
|
9
|
+
readonly messageRetentionSeconds: number;
|
|
10
|
+
readonly deadLetterRetentionSeconds: number;
|
|
11
|
+
readonly maxReceiveCount: number;
|
|
12
|
+
readonly workerBatchSize: number;
|
|
13
|
+
readonly workerWaitTimeSeconds: number;
|
|
14
|
+
}
|
|
15
|
+
export interface NormalizedSchedule {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly jobId: string;
|
|
18
|
+
readonly cron: string;
|
|
19
|
+
readonly timezone: string;
|
|
20
|
+
readonly input: JsonValue;
|
|
21
|
+
readonly inputJson: string;
|
|
22
|
+
readonly overlap: "skip" | "allow";
|
|
23
|
+
}
|
|
24
|
+
export interface NormalizedSchedulerRetryPolicy {
|
|
25
|
+
readonly maximumRetryAttempts: number;
|
|
26
|
+
readonly maximumEventAgeInSeconds: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function normalizeJobs(args: RelkitJobQueuesArgs): NormalizedJobQueue[];
|
|
29
|
+
export declare function normalizeSchedules(schedules: readonly RelkitScheduleDefinition[] | undefined, jobs: readonly NormalizedJobQueue[]): NormalizedSchedule[];
|
|
30
|
+
export declare function normalizeSchedulerRetry(policy: RelkitJobQueuesArgs["schedulerRetryPolicy"]): NormalizedSchedulerRetryPolicy;
|
|
31
|
+
export declare function toAwsScheduleExpression(cron: string): string;
|
|
32
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/components/RelkitJobQueues/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;IACzC,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC;CAC3C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG,kBAAkB,EAAE,CAgD7E;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,SAAS,wBAAwB,EAAE,GAAG,SAAS,EAC1D,IAAI,EAAE,SAAS,kBAAkB,EAAE,GAClC,kBAAkB,EAAE,CAmCtB;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,mBAAmB,CAAC,sBAAsB,CAAC,GAClD,8BAA8B,CAMhC;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAW5D"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { assertJsonValue, canonicalJson, normalizeId } from "@relkit/contracts";
|
|
2
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
3
|
+
const DEFAULT_VISIBILITY_SECONDS = 60;
|
|
4
|
+
const DEFAULT_RETENTION_SECONDS = 345_600;
|
|
5
|
+
const DEFAULT_DLQ_RETENTION_SECONDS = 1_209_600;
|
|
6
|
+
const DEFAULT_BATCH_SIZE = 10;
|
|
7
|
+
const DEFAULT_WAIT_SECONDS = 20;
|
|
8
|
+
const DEFAULT_SCHEDULER_RETRIES = 3;
|
|
9
|
+
const DEFAULT_SCHEDULER_EVENT_AGE = 86_400;
|
|
10
|
+
export function normalizeJobs(args) {
|
|
11
|
+
if (args.jobs.length === 0)
|
|
12
|
+
throw new TypeError("At least one AWS job queue is required.");
|
|
13
|
+
const ids = new Set();
|
|
14
|
+
return args.jobs.map((job) => {
|
|
15
|
+
const id = normalizeId(job.id);
|
|
16
|
+
if (ids.has(id))
|
|
17
|
+
throw new TypeError(`Duplicate AWS job queue \"${id}\".`);
|
|
18
|
+
ids.add(id);
|
|
19
|
+
validateRetry(job.retry, id);
|
|
20
|
+
if (job.retry.maxAttempts > 1000)
|
|
21
|
+
throw new RangeError(`Job \"${id}\" retry.maxAttempts cannot exceed 1000 on SQS.`);
|
|
22
|
+
const timeoutMs = job.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
23
|
+
positive(timeoutMs, `Job \"${id}\" timeoutMs`);
|
|
24
|
+
const requiredVisibility = Math.ceil(timeoutMs / 1000);
|
|
25
|
+
const visibility = job.visibilityTimeoutSeconds ?? Math.max(DEFAULT_VISIBILITY_SECONDS, requiredVisibility);
|
|
26
|
+
range(visibility, 0, 43_200, `Job \"${id}\" visibilityTimeoutSeconds`);
|
|
27
|
+
if (visibility < requiredVisibility)
|
|
28
|
+
throw new RangeError(`Job \"${id}\" visibilityTimeoutSeconds must cover timeoutMs.`);
|
|
29
|
+
const retention = job.messageRetentionSeconds ?? DEFAULT_RETENTION_SECONDS;
|
|
30
|
+
const dlqRetention = job.deadLetterRetentionSeconds ?? DEFAULT_DLQ_RETENTION_SECONDS;
|
|
31
|
+
range(retention, 60, 1_209_600, `Job \"${id}\" messageRetentionSeconds`);
|
|
32
|
+
range(dlqRetention, 60, 1_209_600, `Job \"${id}\" deadLetterRetentionSeconds`);
|
|
33
|
+
if (dlqRetention < retention)
|
|
34
|
+
throw new RangeError(`Job \"${id}\" dead-letter retention must cover source retention.`);
|
|
35
|
+
const maxReceiveCount = job.maxReceiveCount ?? job.retry.maxAttempts;
|
|
36
|
+
range(maxReceiveCount, 1, 1000, `Job \"${id}\" maxReceiveCount`);
|
|
37
|
+
if (maxReceiveCount !== job.retry.maxAttempts)
|
|
38
|
+
throw new RangeError(`Job \"${id}\" maxReceiveCount must equal retry.maxAttempts.`);
|
|
39
|
+
const batchSize = job.workerBatchSize ?? args.workerBatchSize ?? DEFAULT_BATCH_SIZE;
|
|
40
|
+
range(batchSize, 1, 10, `Job \"${id}\" workerBatchSize`);
|
|
41
|
+
const waitSeconds = job.workerWaitTimeSeconds ?? args.workerWaitTimeSeconds ?? DEFAULT_WAIT_SECONDS;
|
|
42
|
+
range(waitSeconds, 0, 20, `Job \"${id}\" workerWaitTimeSeconds`);
|
|
43
|
+
const concurrency = job.concurrency ?? 1;
|
|
44
|
+
positive(concurrency, `Job \"${id}\" concurrency`);
|
|
45
|
+
return {
|
|
46
|
+
id,
|
|
47
|
+
retry: job.retry,
|
|
48
|
+
timeoutMs,
|
|
49
|
+
concurrency,
|
|
50
|
+
visibilityTimeoutSeconds: visibility,
|
|
51
|
+
messageRetentionSeconds: retention,
|
|
52
|
+
deadLetterRetentionSeconds: dlqRetention,
|
|
53
|
+
maxReceiveCount,
|
|
54
|
+
workerBatchSize: batchSize,
|
|
55
|
+
workerWaitTimeSeconds: waitSeconds,
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
export function normalizeSchedules(schedules, jobs) {
|
|
60
|
+
if (schedules === undefined)
|
|
61
|
+
return [];
|
|
62
|
+
const jobIds = new Set(jobs.map((job) => job.id));
|
|
63
|
+
const scheduleIds = new Set();
|
|
64
|
+
return schedules.map((schedule) => {
|
|
65
|
+
const id = normalizeId(schedule.id);
|
|
66
|
+
if (scheduleIds.has(id))
|
|
67
|
+
throw new TypeError(`Duplicate AWS schedule \"${id}\".`);
|
|
68
|
+
scheduleIds.add(id);
|
|
69
|
+
const jobId = normalizeId(schedule.jobId);
|
|
70
|
+
if (!jobIds.has(jobId))
|
|
71
|
+
throw new TypeError(`AWS schedule \"${id}\" references unknown job \"${jobId}\".`);
|
|
72
|
+
const cron = schedule.cron.trim();
|
|
73
|
+
if (cron.split(/\s+/).length !== 5)
|
|
74
|
+
throw new TypeError(`AWS schedule \"${id}\" must use five-field cron.`);
|
|
75
|
+
toAwsScheduleExpression(cron);
|
|
76
|
+
const timezone = schedule.timezone.trim();
|
|
77
|
+
if (timezone === "")
|
|
78
|
+
throw new TypeError(`AWS schedule \"${id}\" timezone is required.`);
|
|
79
|
+
try {
|
|
80
|
+
new Intl.DateTimeFormat("en-US", { timeZone: timezone }).format();
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
throw new TypeError(`AWS schedule \"${id}\" has an invalid timezone.`);
|
|
84
|
+
}
|
|
85
|
+
if (schedule.overlap !== "skip" && schedule.overlap !== "allow")
|
|
86
|
+
throw new TypeError(`AWS schedule \"${id}\" overlap must be skip or allow.`);
|
|
87
|
+
assertJsonValue(schedule.input);
|
|
88
|
+
return {
|
|
89
|
+
id,
|
|
90
|
+
jobId,
|
|
91
|
+
cron,
|
|
92
|
+
timezone,
|
|
93
|
+
input: schedule.input,
|
|
94
|
+
inputJson: canonicalJson(schedule.input),
|
|
95
|
+
overlap: schedule.overlap,
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
export function normalizeSchedulerRetry(policy) {
|
|
100
|
+
const maximumRetryAttempts = policy?.maximumRetryAttempts ?? DEFAULT_SCHEDULER_RETRIES;
|
|
101
|
+
const maximumEventAgeInSeconds = policy?.maximumEventAgeInSeconds ?? DEFAULT_SCHEDULER_EVENT_AGE;
|
|
102
|
+
range(maximumRetryAttempts, 0, 185, "schedulerRetryPolicy.maximumRetryAttempts");
|
|
103
|
+
range(maximumEventAgeInSeconds, 60, 86_400, "schedulerRetryPolicy.maximumEventAgeInSeconds");
|
|
104
|
+
return { maximumRetryAttempts, maximumEventAgeInSeconds };
|
|
105
|
+
}
|
|
106
|
+
export function toAwsScheduleExpression(cron) {
|
|
107
|
+
const fields = cron.trim().split(/\s+/);
|
|
108
|
+
if (fields.length !== 5)
|
|
109
|
+
throw new TypeError("AWS schedules require five-field cron.");
|
|
110
|
+
const [minute, hour, dayOfMonth, month, dayOfWeek] = fields;
|
|
111
|
+
if (dayOfMonth === undefined || dayOfWeek === undefined)
|
|
112
|
+
throw new TypeError("AWS schedules require five-field cron.");
|
|
113
|
+
if (dayOfMonth !== "*" && dayOfWeek !== "*")
|
|
114
|
+
throw new TypeError("AWS cron cannot constrain both day-of-month and day-of-week.");
|
|
115
|
+
const awsDayOfMonth = dayOfMonth === "*" && dayOfWeek !== "*" ? "?" : dayOfMonth;
|
|
116
|
+
const awsDayOfWeek = dayOfWeek === "*" ? "?" : dayOfWeek;
|
|
117
|
+
return `cron(${minute} ${hour} ${awsDayOfMonth} ${month} ${awsDayOfWeek} *)`;
|
|
118
|
+
}
|
|
119
|
+
function validateRetry(policy, id) {
|
|
120
|
+
positive(policy.maxAttempts, `Job \"${id}\" retry.maxAttempts`);
|
|
121
|
+
nonNegative(policy.initialDelayMs, `Job \"${id}\" retry.initialDelayMs`);
|
|
122
|
+
nonNegative(policy.maxDelayMs, `Job \"${id}\" retry.maxDelayMs`);
|
|
123
|
+
if (policy.maxDelayMs < policy.initialDelayMs)
|
|
124
|
+
throw new RangeError(`Job \"${id}\" retry.maxDelayMs must cover initialDelayMs.`);
|
|
125
|
+
if (!Number.isFinite(policy.multiplier) || policy.multiplier < 1)
|
|
126
|
+
throw new RangeError(`Job \"${id}\" retry.multiplier must be finite and at least 1.`);
|
|
127
|
+
if (policy.jitter !== "none" && policy.jitter !== "full" && policy.jitter !== "equal")
|
|
128
|
+
throw new TypeError(`Job \"${id}\" retry.jitter is invalid.`);
|
|
129
|
+
}
|
|
130
|
+
function positive(value, name) {
|
|
131
|
+
if (!Number.isSafeInteger(value) || value < 1)
|
|
132
|
+
throw new RangeError(`${name} must be positive.`);
|
|
133
|
+
}
|
|
134
|
+
function nonNegative(value, name) {
|
|
135
|
+
if (!Number.isSafeInteger(value) || value < 0)
|
|
136
|
+
throw new RangeError(`${name} must be non-negative.`);
|
|
137
|
+
}
|
|
138
|
+
function range(value, min, max, name) {
|
|
139
|
+
if (!Number.isSafeInteger(value) || value < min || value > max)
|
|
140
|
+
throw new RangeError(`${name} must be an integer between ${min} and ${max}.`);
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/components/RelkitJobQueues/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as aws from "@pulumi/aws";
|
|
2
|
+
import * as awsx from "@pulumi/awsx";
|
|
3
|
+
import * as pulumi from "@pulumi/pulumi";
|
|
4
|
+
import { type RelkitComponentArgs } from "../common.js";
|
|
5
|
+
export interface RelkitNetworkArgs extends RelkitComponentArgs {
|
|
6
|
+
readonly cidrBlock?: string;
|
|
7
|
+
readonly numberOfAvailabilityZones?: number;
|
|
8
|
+
readonly availabilityZoneNames?: string[];
|
|
9
|
+
readonly natGatewayStrategy?: "None" | "Single" | "OnePerAz";
|
|
10
|
+
readonly servicePort?: number;
|
|
11
|
+
}
|
|
12
|
+
/** Shared VPC, subnet, and security-group boundary for AWS application resources. */
|
|
13
|
+
export declare class RelkitNetwork extends pulumi.ComponentResource {
|
|
14
|
+
readonly vpc: awsx.ec2.Vpc;
|
|
15
|
+
readonly vpcId: pulumi.Output<string>;
|
|
16
|
+
readonly publicSubnetIds: pulumi.Output<string[]>;
|
|
17
|
+
readonly privateSubnetIds: pulumi.Output<string[]>;
|
|
18
|
+
readonly loadBalancerSecurityGroup: aws.ec2.SecurityGroup;
|
|
19
|
+
readonly serviceSecurityGroup: aws.ec2.SecurityGroup;
|
|
20
|
+
readonly loadBalancerSecurityGroupId: pulumi.Output<string>;
|
|
21
|
+
readonly serviceSecurityGroupId: pulumi.Output<string>;
|
|
22
|
+
readonly tags: pulumi.Output<Record<string, string>>;
|
|
23
|
+
constructor(name: string, args?: RelkitNetworkArgs, opts?: pulumi.ComponentResourceOptions);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/RelkitNetwork/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC7D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,qFAAqF;AACrF,qBAAa,aAAc,SAAQ,MAAM,CAAC,iBAAiB;IACzD,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACnD,QAAQ,CAAC,yBAAyB,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC;IAC1D,QAAQ,CAAC,oBAAoB,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC;IACrD,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5D,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;gBAGnD,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,iBAAsB,EAC5B,IAAI,GAAE,MAAM,CAAC,wBAA6B;CAoE7C"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import * as aws from "@pulumi/aws";
|
|
2
|
+
import * as awsx from "@pulumi/awsx";
|
|
3
|
+
import * as pulumi from "@pulumi/pulumi";
|
|
4
|
+
import { DEFAULT_SERVICE_PORT, resourceName, tagsFor, validatePort, } from "../common.js";
|
|
5
|
+
/** Shared VPC, subnet, and security-group boundary for AWS application resources. */
|
|
6
|
+
export class RelkitNetwork extends pulumi.ComponentResource {
|
|
7
|
+
vpc;
|
|
8
|
+
vpcId;
|
|
9
|
+
publicSubnetIds;
|
|
10
|
+
privateSubnetIds;
|
|
11
|
+
loadBalancerSecurityGroup;
|
|
12
|
+
serviceSecurityGroup;
|
|
13
|
+
loadBalancerSecurityGroupId;
|
|
14
|
+
serviceSecurityGroupId;
|
|
15
|
+
tags;
|
|
16
|
+
constructor(name, args = {}, opts = {}) {
|
|
17
|
+
const componentName = resourceName(name, "network", args);
|
|
18
|
+
super("relkit:cloud-aws:RelkitNetwork", componentName, {}, opts);
|
|
19
|
+
const tags = tagsFor(name, args);
|
|
20
|
+
const servicePort = args.servicePort ?? DEFAULT_SERVICE_PORT;
|
|
21
|
+
validatePort(servicePort, "servicePort");
|
|
22
|
+
this.tags = tags;
|
|
23
|
+
this.vpc = new awsx.ec2.Vpc(`${componentName}-vpc`, {
|
|
24
|
+
cidrBlock: args.cidrBlock ?? "10.0.0.0/16",
|
|
25
|
+
numberOfAvailabilityZones: args.numberOfAvailabilityZones ?? 2,
|
|
26
|
+
...(args.availabilityZoneNames === undefined
|
|
27
|
+
? {}
|
|
28
|
+
: { availabilityZoneNames: args.availabilityZoneNames }),
|
|
29
|
+
natGateways: { strategy: args.natGatewayStrategy ?? "Single" },
|
|
30
|
+
subnetNameTagStrategy: "AvailabilityZone",
|
|
31
|
+
tags,
|
|
32
|
+
}, { parent: this });
|
|
33
|
+
this.vpcId = this.vpc.vpcId;
|
|
34
|
+
this.publicSubnetIds = this.vpc.publicSubnetIds;
|
|
35
|
+
this.privateSubnetIds = this.vpc.privateSubnetIds;
|
|
36
|
+
this.loadBalancerSecurityGroup = new aws.ec2.SecurityGroup(`${componentName}-alb-sg`, {
|
|
37
|
+
name: `${componentName}-alb-sg`,
|
|
38
|
+
description: "RelKit public application load balancer",
|
|
39
|
+
vpcId: this.vpcId,
|
|
40
|
+
ingress: [{ fromPort: 80, toPort: 80, protocol: "tcp", cidrBlocks: ["0.0.0.0/0"] }],
|
|
41
|
+
egress: [{ fromPort: 0, toPort: 0, protocol: "-1", cidrBlocks: ["0.0.0.0/0"] }],
|
|
42
|
+
tags,
|
|
43
|
+
}, { parent: this });
|
|
44
|
+
this.serviceSecurityGroup = new aws.ec2.SecurityGroup(`${componentName}-service-sg`, {
|
|
45
|
+
name: `${componentName}-service-sg`,
|
|
46
|
+
description: "RelKit private application service",
|
|
47
|
+
vpcId: this.vpcId,
|
|
48
|
+
ingress: [
|
|
49
|
+
{
|
|
50
|
+
fromPort: servicePort,
|
|
51
|
+
toPort: servicePort,
|
|
52
|
+
protocol: "tcp",
|
|
53
|
+
securityGroups: [this.loadBalancerSecurityGroup.id],
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
egress: [{ fromPort: 0, toPort: 0, protocol: "-1", cidrBlocks: ["0.0.0.0/0"] }],
|
|
57
|
+
tags,
|
|
58
|
+
}, { parent: this });
|
|
59
|
+
this.loadBalancerSecurityGroupId = this.loadBalancerSecurityGroup.id;
|
|
60
|
+
this.serviceSecurityGroupId = this.serviceSecurityGroup.id;
|
|
61
|
+
this.registerOutputs({
|
|
62
|
+
vpcId: this.vpcId,
|
|
63
|
+
publicSubnetIds: this.publicSubnetIds,
|
|
64
|
+
privateSubnetIds: this.privateSubnetIds,
|
|
65
|
+
loadBalancerSecurityGroupId: this.loadBalancerSecurityGroupId,
|
|
66
|
+
serviceSecurityGroupId: this.serviceSecurityGroupId,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/RelkitNetwork/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as aws from "@pulumi/aws";
|
|
2
|
+
import * as pulumi from "@pulumi/pulumi";
|
|
3
|
+
import type { RelkitObservabilityArgs, RelkitObservabilityResources } from "./types.js";
|
|
4
|
+
export * from "./types.js";
|
|
5
|
+
/** Maps runtime logs to CloudWatch and optional traces to OTLP injection. */
|
|
6
|
+
export declare class RelkitObservability extends pulumi.ComponentResource implements RelkitObservabilityResources {
|
|
7
|
+
readonly logGroup: aws.cloudwatch.LogGroup | undefined;
|
|
8
|
+
readonly logGroupName: pulumi.Output<string> | undefined;
|
|
9
|
+
readonly logGroupArn: pulumi.Output<string> | undefined;
|
|
10
|
+
readonly environment: RelkitObservabilityResources["environment"];
|
|
11
|
+
readonly secrets: RelkitObservabilityResources["secrets"];
|
|
12
|
+
readonly tags: pulumi.Output<Record<string, string>>;
|
|
13
|
+
constructor(name: string, args?: RelkitObservabilityArgs, opts?: pulumi.ComponentResourceOptions);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/RelkitObservability/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AASzC,OAAO,KAAK,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAExF,cAAc,YAAY,CAAC;AAE3B,6EAA6E;AAC7E,qBAAa,mBACX,SAAQ,MAAM,CAAC,iBACf,YAAW,4BAA4B;IAEvC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,QAAQ,GAAG,SAAS,CAAC;IACvD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE,4BAA4B,CAAC,aAAa,CAAC,CAAC;IAClE,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC,SAAS,CAAC,CAAC;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;gBAGnD,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,uBAA4B,EAClC,IAAI,GAAE,MAAM,CAAC,wBAA6B;CA0D7C"}
|