@studion/infra-code-blocks
Version:
Studion common infra components
77 lines (76 loc) • 3.54 kB
TypeScript
import * as pulumi from '@pulumi/pulumi';
import * as aws from '@pulumi/aws';
import * as awsx from '@pulumi/awsx';
import * as upstash from '@upstash/pulumi';
import { Database, DatabaseArgs } from './database';
import { WebServer, WebServerArgs } from './web-server';
import { Mongo, MongoArgs } from './mongo';
import { Redis, RedisArgs } from './redis';
import { StaticSite, StaticSiteArgs } from './static-site';
import { Ec2SSMConnect } from './ec2-ssm-connect';
import { EcsService, EcsServiceArgs } from './ecs-service';
import { NuxtSSR, NuxtSSRArgs } from './nuxt-ssr';
export type Service = Database | Redis | StaticSite | WebServer | NuxtSSR | Mongo | EcsService;
export type Services = Record<string, Service>;
type ServiceArgs = {
/**
* The unique name for the service.
*/
serviceName: string;
};
export type DatabaseServiceOptions = {
type: 'DATABASE';
} & ServiceArgs & Omit<DatabaseArgs, 'vpcId' | 'vpcCidrBlock' | 'isolatedSubnetIds'>;
export type RedisServiceOptions = {
type: 'REDIS';
} & ServiceArgs & RedisArgs;
export type StaticSiteServiceOptions = {
type: 'STATIC_SITE';
} & ServiceArgs & StaticSiteArgs;
export type WebServerServiceOptions = {
type: 'WEB_SERVER';
environment?: aws.ecs.KeyValuePair[] | ((services: Services) => aws.ecs.KeyValuePair[]);
secrets?: aws.ecs.Secret[] | ((services: Services) => aws.ecs.Secret[]);
} & ServiceArgs & Omit<WebServerArgs, 'clusterId' | 'clusterName' | 'vpcId' | 'vpcCidrBlock' | 'publicSubnetIds' | 'environment' | 'secrets'>;
export type NuxtSSRServiceOptions = {
type: 'NUXT_SSR';
environment?: aws.ecs.KeyValuePair[] | ((services: Services) => aws.ecs.KeyValuePair[]);
secrets?: aws.ecs.Secret[] | ((services: Services) => aws.ecs.Secret[]);
} & ServiceArgs & Omit<NuxtSSRArgs, 'clusterId' | 'clusterName' | 'vpcId' | 'vpcCidrBlock' | 'publicSubnetIds' | 'environment' | 'secrets'>;
export type MongoServiceOptions = {
type: 'MONGO';
} & ServiceArgs & Omit<MongoArgs, 'clusterId' | 'clusterName' | 'vpcId' | 'vpcCidrBlock' | 'privateSubnetIds' | 'environment' | 'secrets'>;
export type EcsServiceOptions = {
type: 'ECS_SERVICE';
environment?: aws.ecs.KeyValuePair[] | ((services: Services) => aws.ecs.KeyValuePair[]);
secrets?: aws.ecs.Secret[] | ((services: Services) => aws.ecs.Secret[]);
} & ServiceArgs & Omit<EcsServiceArgs, 'clusterId' | 'clusterName' | 'vpcId' | 'vpcCidrBlock' | 'subnetIds' | 'environment' | 'secrets'>;
export type ProjectArgs = {
services: (DatabaseServiceOptions | RedisServiceOptions | StaticSiteServiceOptions | WebServerServiceOptions | NuxtSSRServiceOptions | MongoServiceOptions | EcsServiceOptions)[];
enableSSMConnect?: pulumi.Input<boolean>;
numberOfAvailabilityZones?: number;
};
export declare class MissingEcsCluster extends Error {
constructor();
}
export declare class Project extends pulumi.ComponentResource {
name: string;
vpc: awsx.ec2.Vpc;
cluster?: aws.ecs.Cluster;
upstashProvider?: upstash.Provider;
ec2SSMConnect?: Ec2SSMConnect;
services: Services;
constructor(name: string, args: ProjectArgs, opts?: pulumi.ComponentResourceOptions);
private createVpc;
private createServices;
private createRedisPrerequisites;
private createEcsCluster;
private createDatabaseService;
private createRedisService;
private createStaticSiteService;
private createWebServerService;
private createNuxtSSRService;
private createMongoService;
private createEcsService;
}
export {};