CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-pulumi--aws

A Pulumi package for creating and managing Amazon Web Services (AWS) cloud resources with infrastructure-as-code.

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

ec2.mddocs/compute/

EC2 - Amazon Elastic Compute Cloud

Amazon EC2 provides resizable compute capacity in the cloud. It includes virtual servers (instances), networking (VPCs, subnets, security groups), storage (EBS volumes), and related infrastructure.

Common Tasks

Launch a web server instance

const webServer = new aws.ec2.Instance("web", {
    ami: "ami-0c55b159cbfafe1f0",
    instanceType: "t3.micro",
    subnetId: subnet.id,
    vpcSecurityGroupIds: [sg.id],
    userData: `#!/bin/bash
echo "Hello, World!" > /var/www/html/index.html`,
    tags: { Name: "web-server" },
});

Create a VPC with public subnet

const vpc = new aws.ec2.Vpc("main", {
    cidrBlock: "10.0.0.0/16",
    enableDnsHostnames: true,
    enableDnsSupport: true,
});

const subnet = new aws.ec2.Subnet("public", {
    vpcId: vpc.id,
    cidrBlock: "10.0.1.0/24",
    mapPublicIpOnLaunch: true,
});

Configure security group for HTTP/HTTPS

const webSg = new aws.ec2.SecurityGroup("web", {
    vpcId: vpc.id,
    ingress: [
        { protocol: "tcp", fromPort: 80, toPort: 80, cidrBlocks: ["0.0.0.0/0"] },
        { protocol: "tcp", fromPort: 443, toPort: 443, cidrBlocks: ["0.0.0.0/0"] },
    ],
    egress: [{ protocol: "-1", fromPort: 0, toPort: 0, cidrBlocks: ["0.0.0.0/0"] }],
});

Core Resources

Instance

Launch and manage EC2 virtual machine instances.

class Instance extends pulumi.CustomResource {
    constructor(name: string, args: InstanceArgs, opts?: pulumi.CustomResourceOptions);

    readonly ami: pulumi.Output<string>;
    readonly instanceType: pulumi.Output<string>;
    readonly publicIp: pulumi.Output<string>;
    readonly privateIp: pulumi.Output<string>;
    readonly id: pulumi.Output<string>;
    readonly arn: pulumi.Output<string>;
}

interface InstanceArgs {
    ami: pulumi.Input<string>;
    instanceType: pulumi.Input<string>;
    subnetId?: pulumi.Input<string>;
    vpcSecurityGroupIds?: pulumi.Input<pulumi.Input<string>[]>;
    keyName?: pulumi.Input<string>;
    userData?: pulumi.Input<string>;
    iamInstanceProfile?: pulumi.Input<string>;
    tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
    monitoring?: pulumi.Input<boolean>;
    ebsOptimized?: pulumi.Input<boolean>;
    rootBlockDevice?: pulumi.Input<InstanceRootBlockDevice>;
    ebsBlockDevices?: pulumi.Input<pulumi.Input<InstanceEbsBlockDevice>[]>;
}

interface InstanceRootBlockDevice {
    volumeType?: pulumi.Input<string>;
    volumeSize?: pulumi.Input<number>;
    iops?: pulumi.Input<number>;
    throughput?: pulumi.Input<number>;
    deleteOnTermination?: pulumi.Input<boolean>;
    encrypted?: pulumi.Input<boolean>;
    kmsKeyId?: pulumi.Input<string>;
}

interface InstanceEbsBlockDevice {
    deviceName: pulumi.Input<string>;
    volumeType?: pulumi.Input<string>;
    volumeSize?: pulumi.Input<number>;
    iops?: pulumi.Input<number>;
    throughput?: pulumi.Input<number>;
    deleteOnTermination?: pulumi.Input<boolean>;
    encrypted?: pulumi.Input<boolean>;
    kmsKeyId?: pulumi.Input<string>;
    snapshotId?: pulumi.Input<string>;
}

Usage Example:

// Query latest Amazon Linux AMI
const ami = await aws.ec2.getAmi({
    mostRecent: true,
    owners: ["amazon"],
    filters: [{ name: "name", values: ["amzn2-ami-hvm-*-x86_64-gp2"] }],
});

// Launch instance with custom root volume
const instance = new aws.ec2.Instance("web-server", {
    ami: ami.id,
    instanceType: "t3.micro",
    subnetId: subnet.id,
    vpcSecurityGroupIds: [sg.id],
    rootBlockDevice: {
        volumeType: "gp3",
        volumeSize: 20,
        encrypted: true,
    },
    userData: `#!/bin/bash
echo "Hello, World!" > /var/www/html/index.html
yum install -y httpd
systemctl start httpd
`,
    tags: { Name: "web-server" },
});

export const instanceIp = instance.publicIp;

Vpc

Create Virtual Private Clouds for network isolation.

class Vpc extends pulumi.CustomResource {
    constructor(name: string, args: VpcArgs, opts?: pulumi.CustomResourceOptions);

    readonly id: pulumi.Output<string>;
    readonly cidrBlock: pulumi.Output<string>;
    readonly arn: pulumi.Output<string>;
}

interface VpcArgs {
    cidrBlock: pulumi.Input<string>;
    enableDnsHostnames?: pulumi.Input<boolean>;
    enableDnsSupport?: pulumi.Input<boolean>;
    tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}

Usage Example:

const vpc = new aws.ec2.Vpc("my-vpc", {
    cidrBlock: "10.0.0.0/16",
    enableDnsHostnames: true,
    enableDnsSupport: true,
    tags: { Name: "main-vpc" },
});

Subnet

Create subnets within VPCs.

class Subnet extends pulumi.CustomResource {
    constructor(name: string, args: SubnetArgs, opts?: pulumi.CustomResourceOptions);

    readonly id: pulumi.Output<string>;
    readonly vpcId: pulumi.Output<string>;
    readonly cidrBlock: pulumi.Output<string>;
    readonly availabilityZone: pulumi.Output<string>;
}

interface SubnetArgs {
    vpcId: pulumi.Input<string>;
    cidrBlock: pulumi.Input<string>;
    availabilityZone?: pulumi.Input<string>;
    mapPublicIpOnLaunch?: pulumi.Input<boolean>;
    tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}

Usage Example:

const subnet = new aws.ec2.Subnet("my-subnet", {
    vpcId: vpc.id,
    cidrBlock: "10.0.1.0/24",
    availabilityZone: "us-west-2a",
    mapPublicIpOnLaunch: true,
    tags: { Name: "public-subnet" },
});

SecurityGroup

Manage firewall rules for instances.

class SecurityGroup extends pulumi.CustomResource {
    constructor(name: string, args: SecurityGroupArgs, opts?: pulumi.CustomResourceOptions);

    readonly id: pulumi.Output<string>;
    readonly vpcId: pulumi.Output<string>;
}

interface SecurityGroupArgs {
    vpcId?: pulumi.Input<string>;
    description?: pulumi.Input<string>;
    ingress?: pulumi.Input<pulumi.Input<SecurityGroupRule>[]>;
    egress?: pulumi.Input<pulumi.Input<SecurityGroupRule>[]>;
    tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}

interface SecurityGroupRule {
    fromPort: pulumi.Input<number>;
    toPort: pulumi.Input<number>;
    protocol: pulumi.Input<string>;
    cidrBlocks?: pulumi.Input<pulumi.Input<string>[]>;
    securityGroups?: pulumi.Input<pulumi.Input<string>[]>;
    description?: pulumi.Input<string>;
}

Usage Example:

const sg = new aws.ec2.SecurityGroup("web-sg", {
    vpcId: vpc.id,
    description: "Allow HTTP/HTTPS traffic",
    ingress: [
        {
            protocol: "tcp",
            fromPort: 80,
            toPort: 80,
            cidrBlocks: ["0.0.0.0/0"],
            description: "HTTP"
        },
        {
            protocol: "tcp",
            fromPort: 443,
            toPort: 443,
            cidrBlocks: ["0.0.0.0/0"],
            description: "HTTPS"
        },
    ],
    egress: [
        { protocol: "-1", fromPort: 0, toPort: 0, cidrBlocks: ["0.0.0.0/0"] },
    ],
    tags: { Name: "web-security-group" },
});

Ami

Manage Amazon Machine Images.

class Ami extends pulumi.CustomResource {
    constructor(name: string, args: AmiArgs, opts?: pulumi.CustomResourceOptions);
}

interface AmiArgs {
    name: pulumi.Input<string>;
    description?: pulumi.Input<string>;
    architecture?: pulumi.Input<string>;
    rootDeviceName?: pulumi.Input<string>;
    virtualizationType?: pulumi.Input<string>;
}

KeyPair

Manage SSH key pairs for instance access.

class KeyPair extends pulumi.CustomResource {
    constructor(name: string, args?: KeyPairArgs, opts?: pulumi.CustomResourceOptions);
}

interface KeyPairArgs {
    keyName?: pulumi.Input<string>;
    publicKey?: pulumi.Input<string>;
    tags?: pulumi.Input<{[key: string]: pulumi.Input<string>}>;
}

Networking Resources

The ec2 module includes 50+ networking resources. Key ones include:

  • InternetGateway - Internet connectivity for VPC
  • NatGateway - NAT for private subnets
  • Eip - Elastic IP addresses
  • RouteTable - Routing tables
  • NetworkInterface - Network interfaces
  • VpcEndpoint - Private AWS service access

Data Sources

Query existing EC2 resources.

function getAmi(args: GetAmiArgs): Promise<GetAmiResult>;
function getInstance(args: GetInstanceArgs): Promise<GetInstanceResult>;
function getVpc(args: GetVpcArgs): Promise<GetVpcResult>;
function getSubnet(args: GetSubnetArgs): Promise<GetSubnetResult>;
function getSecurityGroup(args: GetSecurityGroupArgs): Promise<GetSecurityGroupResult>;

Usage Example:

import * as aws from "@pulumi/aws";

// Query AMI
const ami = await aws.ec2.getAmi({
    mostRecent: true,
    owners: ["amazon"],
    filters: [{ name: "name", values: ["amzn2-ami-hvm-*-x86_64-gp2"] }],
});

// Create VPC and subnet
const vpc = new aws.ec2.Vpc("my-vpc", {
    cidrBlock: "10.0.0.0/16",
    enableDnsHostnames: true,
    enableDnsSupport: true,
});

const subnet = new aws.ec2.Subnet("my-subnet", {
    vpcId: vpc.id,
    cidrBlock: "10.0.1.0/24",
    mapPublicIpOnLaunch: true,
});

// Create security group
const sg = new aws.ec2.SecurityGroup("web-sg", {
    vpcId: vpc.id,
    ingress: [
        { protocol: "tcp", fromPort: 80, toPort: 80, cidrBlocks: ["0.0.0.0/0"] },
        { protocol: "tcp", fromPort: 443, toPort: 443, cidrBlocks: ["0.0.0.0/0"] },
    ],
    egress: [
        { protocol: "-1", fromPort: 0, toPort: 0, cidrBlocks: ["0.0.0.0/0"] },
    ],
});

// Launch instance
const instance = new aws.ec2.Instance("web-server", {
    ami: ami.id,
    instanceType: "t3.micro",
    subnetId: subnet.id,
    vpcSecurityGroupIds: [sg.id],
    userData: `#!/bin/bash
echo "Hello, World!" > /var/www/html/index.html
yum install -y httpd
systemctl start httpd
`,
    tags: { Name: "web-server" },
});

export const instanceIp = instance.publicIp;

For complete resource list (105 resources, 64 data sources), see the All Services Index.

Related Services

  • Auto Scaling - Automatically scale EC2 instances based on demand
  • ECS - Run containers on EC2 instances
  • EKS - Run Kubernetes workloads on EC2 nodes
  • ELB - Load balance traffic across EC2 instances
  • VPC - Network isolation and connectivity for EC2 instances
  • EBS - Block storage volumes for EC2 instances
  • IAM - Manage instance roles and permissions

Install with Tessl CLI

npx tessl i tessl/npm-pulumi--aws@7.16.0

docs

index.md

quickstart.md

README.md

tile.json