UNPKG

@studion/infra-code-blocks

Version:
77 lines (76 loc) 3.54 kB
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 {};