Fork me on GitHub

Pulumi Cloud Framework

The Cloud framework for Pulumi lets you program infrastructure and application logic, side by side, using simple, high-level cloud building blocks. This package has three key defining attributes:

  • Easy Cloud Development: Build robust and scalable cloud applications with just a few lines of code.
  • Cloud Agnostic: Not specific to any one particular cloud (AWS, Azure, Google Cloud, Kubernetes, and various on-premises clouds). Applications built using the high-level Cloud components like [Service], [Table], [Topic] and [API] can be deployed to a variety of cloud platforms. Although Pulumi only support AWS today in this framework, our plan is to offer an implementation of this on all major clouds.
  • Serverless: The Cloud framework makes it easy to build applications with minimal fixed infrastructure, event-driven application logic, and using resources that are charged based on actual consumption.

The Cloud framework must be configured with credentials to deploy and update resources in the target cloud platform.

See the full API documentation for complete details of the available Cloud framework APIs.

Example

const cloud = require("@pulumi/cloud");

const api = new cloud.API("my-api");
api.get("/hello", (req, res) => {
    res.
});

exports.url = api.publish().url;

You can find additional examples of using the Cloud framework in the Pulumi examples repo.

Libraries

The following packages are available in package managers:

  • JavaScript/TypeScript: https://www.npmjs.com/package/@pulumi/cloud

The provider-specific implementations of this library are also available for use directly when writing code that does not need to be portable:

  • JavaScript/TypeScript: https://www.npmjs.com/package/@pulumi/cloud-aws

The Cloud framework is open source and available in the pulumi/pulumi-cloud repo.

Authentication

Authentication options must be set for the target cloud provider. See the AWS setup page for details (more providers for the Cloud framework coming soon).

Configuration

The Cloud framework accepts the following configuration settings. These can be provided via pulumi config set cloud:<option>.

  • provider: (Required) The provider to deploy cloud resources into. Currently only aws is supported.

The AWS implementation of the Cloud framework accepts the following configuration settings. These can be provded via pulumi config set cloud-aws:<option>.

  • functionMemorySize: (Optional) Override the Lambda function memory size for all functions.
  • functionIncludePaths: (Optional) Comma-seperated list of additional paths (relative to the project root) to include in Lambda zip uploads for JavaScript callbacks. E.g ./img.png,app/.
  • functionIncludePackages: (Optional) Comma-seperated list of additional packages (relative to the project root) to include in Lambda zip uploads for JavaScript callbacks. E.g body-parser,typescript.
  • computeIAMRolePolicyARNs: (Optional) Set the IAM role policies to apply to compute (both Lambda and ECS) within this Pulumi program. The default is: arn:aws:iam::aws:policy/AWSLambdaFullAccess,arn:aws:iam::aws:policy/AmazonEC2ContainerServiceFullAccess.
  • acmCertificateARN: (Optional) ACM certificate ARN to support services HTTPS traffic.
  • ecsClusterARN: (Optional) ECS cluster ARN. One of useFargate, ecsClusterARN, or ecsAutoCluster must be provided to use container-based resources like cloud.Service and cloud.Task.
  • ecsClusterSecurityGroup: (Optional) ECS cluster security group that all ALBs for services within the cluster will use.
  • ecsClusterEfsMountPath: (Optional) EFS mount path on the cluster hosts. If not provided, Volumes cannot be used in cloud.Service and cloud.Task.
  • usePrivateNetwork: (Optional) Put all compute in a private network.
  • externalVpcId: (Optional) Use an existing VPC. If both usePrivateNetwork and externalVpcId are provided, the VPC must be configured to run all compute in private subnets with Internet egress enabled via NAT Gateways.
  • externalSubnets: (Optional) Provide subnets ids for the VPC as a comma-seperated string. Required if using an existing VPC.
  • externalPublicSubnets: (Optional) Provide public subnets ids for the VPC as a comma-seperated string. Required if using an existing VPC.
  • externalSecurityGroups: (Optional) Provide securityGroup ids for the VPC as a comma-seperated string. Required if using an existing VPC.
  • useFargate: (Optional) Wse Fargate-based container compute. All tasks must be Fargate-compatible. One of useFargate, ecsClusterARN, or ecsAutoCluster must be provided to use container-based resources like cloud.Service and `cloud.Task.
  • ecsAutoCluster: (Optional) Auto-provision an ECS Cluster. If set to true, parameters for the cluster can be provided via the other “ecsAutoCluster*” configuration variables. One of useFargate, ecsClusterARN, or ecsAutoCluster must be provided to use container-based resources like cloud.Service and `cloud.Task.
  • ecsAutoClusterNumberOfAZs: (Optional) The number of AZs to create subnets in as part of the cluster. Defaults to 2.
  • ecsAutoClusterInstanceType: (Optional) The EC2 instance type to use for the cluster. Defaults to t2.micro.
  • ecsAutoClusterInstanceRolePolicyARNs: (Optional) The EC2 instance role policy ARN to use for the cluster. Defaults to arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role,arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess.
  • ecsAutoClusterInstanceRootVolumeSize: (Optional) The size (in GiB) of the EBS volume to attach to each instance as the root volume. Defaults to 8 GiB.
  • ecsAutoClusterInstanceDockerImageVolumeSize: (Optional) The size (in GiB) of the EBS volume to attach to each instance as Docker Image volume. Defaults to 50 GiB.
  • ecsAutoClusterInstanceSwapVolumeSize: (Optional) The size (in GiB) of the EBS volume to attach to each instance as the swap volume. Defaults to 5 GiB.
  • ecsAutoClusterMinSize: (Optional) The minimum size of the cluster. Defaults to 2.
  • ecsAutoClusterMaxSize: (Optional) The maximum size of the cluster. Defaults to 100.
  • ecsAutoClusterPublicKey: (Optional) Public key material for SSH access to the cluster. See allowed formats. If not provided, no SSH access is enabled on VMs.
  • ecsAutoClusterECSOptimizedAMIName: (Optional) The name of the ECS-optimzed AMI to use for the Container Instances in this cluster, e.g. amzn-ami-2017.09.l-amazon-ecs-optimized. See valid values.
  • ecsAutoClusterUseEFS: (Optional) Optionally auto-provision an Elastic File System for the Cluster. Defaults to false.