Create a Linux ECS instance with Pulumi

更新时间:
复制 MD 格式

Use Python and Pulumi to provision a Linux Elastic Compute Service (ECS) instance on Alibaba Cloud, including the required Virtual Private Cloud (VPC) and networking resources.

Overview

  • Create a Pulumi project.

  • Deploy a Linux ECS instance.

    • The ECS instance is deployed to a specified region and zone, uses a VPC, and is configured with security group rules.

Prerequisites

Before you begin, make sure you have:

  • Python 3 or later

  • virtualenv installed

  • Pulumi installed, as described in Install Pulumi

Create a Pulumi project

  1. Run pulumi new --dir to create a local working directory.

    root@xxx:~# pulumi new --dir /root/project-demo
    Logging in using access token from PULUMI_ACCESS_TOKEN
    Please choose a template:
        aws-javascript        A minimal AWS JavaScript Pulumi program
        aws-python            A minimal AWS Python Pulumi program
        aws-typescript        A minimal AWS TypeScript Pulumi program
        azure-javascript      A minimal Azure JavaScript Pulumi program
        azure-python          A minimal Azure Python Pulumi program
        azure-typescript      A minimal Azure TypeScript Pulumi program
        gcp-javascript        A minimal Google Cloud JavaScript Pulumi program
        gcp-python            A minimal Google Cloud Python Pulumi program
        gcp-typescript        A minimal Google Cloud TypeScript Pulumi program
        kubernetes-javascript A minimal Kubernetes JavaScript Pulumi program
        kubernetes-python     A minimal Kubernetes Python Pulumi program
        kubernetes-typescript A minimal Kubernetes TypeScript Pulumi program
      > Show additional templates
  2. Scroll down and select the alicloud-python template.

        alicloud-csharp      A minimal AliCloud C# Pulumi program
        alicloud-fsharp      A minimal AliCloud F# Pulumi program
        alicloud-go          A minimal AliCloud Go Pulumi program
        alicloud-javascript  A minimal AliCloud JavaScript Pulumi program
      > alicloud-python      A minimal AliCloud Python Pulumi program
        alicloud-typescript  A minimal AliCloud TypeScript Pulumi program
        alicloud-visualbasic A minimal AliCloud VB.NET Pulumi program
        aws-csharp           A minimal AWS C# Pulumi program
        aws-fsharp           A minimal AWS F# Pulumi program
  3. Enter the project name, description, stack name, and Alibaba Cloud region (default: cn-beijing).

    Please choose a template: alicloud-python        A minimal AliCloud Python Pulumi program
    This command will walk you through creating a new Pulumi project.
    
    Enter a value or leave blank to accept the (default), and press <ENTER>.
    Press ^C at any time to quit.
    
    project name: (project-demo) project-demo
    project description: (A minimal AliCloud Python Pulumi program) test
    Created project 'project-demo'
    
    Please enter your desired stack name.
    To create a stack in an organization, use the format <org-name>/<stack-name> (e.g. `acmecorp/dev`).
    
    stack name: (dev) xxx/demo-dev
    Created stack 'demo-dev'
    
    alicloud:region: The AliCloud region to deploy into: (cn-beijing) cn-hangzhou
    Saved config
    
    Your new project is ready to go!
    
    To perform an initial deployment, run the following commands:
    
        1. cd project-demo
        2. virtualenv -p python3 venv
        3. source venv/bin/activate
        4. pip3 install -r requirements.txt
    
    Then, run 'pulumi up'
  4. Verify the project files.

    root@xxx:~# cd project-demo/
    root@xxx:~/project-demo# ls
    __main__.py  Pulumi.demo-dev.yaml  Pulumi.yaml  requirements.txt

The project directory contains four files:

File

Purpose

__main__.py

Defines your infrastructure — write your deployment code here

Pulumi.demo-dev.yaml

Stores stack-specific configuration, such as the target region

Pulumi.yaml

Stores project metadata: name, description, and runtime language

requirements.txt

Lists the Python packages required at runtime

  1. Change to the project directory.

    cd project-demo
  2. Set up an isolated Python environment. Skip this step if your server has only one Python version.

    virtualenv -p python3 venv
    source venv/bin/activate
  3. Install the Pulumi and pulumi-alicloud packages.

    pip3 install -r requirements.txt

Deploy a Linux ECS instance

  1. Replace the contents of __main__.py with the following code.

    import pulumi
    import pulumi_alicloud as alicloud
    
    vpc = alicloud.vpc.Network("my-vpc", cidr_block="172.16.0.0/12")
    az = "cn-hangzhou-i"
    sg = alicloud.ecs.SecurityGroup("pulumi_sg", description="pulumi security_groups", vpc_id=vpc.id)
    vswitch = alicloud.vpc.Switch("pulumi_vswitch", availability_zone=az, cidr_block="172.16.0.0/21", vpc_id=vpc.id)
    sg_ids = [sg.id]
    sg_rule = alicloud.ecs.SecurityGroupRule("sg_rule", security_group_id=sg.id, ip_protocol="tcp", type="ingress", nic_type="intranet", port_range="22/22", cidr_ip="0.0.0.0/0")
    instance = alicloud.ecs.Instance("ecs-instance2", availability_zone=az, instance_type="ecs.t6-c1m1.large", security_groups=sg_ids, image_id="ubuntu_18_04_64_20G_alibase_20190624.vhd", instance_name="ecsCreatedByPulumi2", vswitch_id=vswitch.id, internet_max_bandwidth_out=10)

This script provisions five resources:

Resource

Name

Details

VPC

my-vpc

CIDR block 172.16.0.0/12

Security group

pulumi_sg

Attached to the VPC

vSwitch

pulumi_vswitch

Subnet in zone cn-hangzhou-i, CIDR block 172.16.0.0/21

Security group rule

sg_rule

Inbound TCP rule allowing SSH (port 22) from any IP

ECS instance

ecs-instance2

ecs.t6-c1m1.large, Ubuntu 18.04, 10 Mbps outbound bandwidth

  1. Run pulumi up to preview and deploy the changes.

pulumi up runs in two phases. First, it generates an execution plan listing every resource to create — without making any changes. Review the plan, then select yes to apply it. This lets you catch configuration errors before any infrastructure is provisioned.

(venv) root@xxx:~/project-demo# pulumi up
Previewing update (demo-dev):

     Type                              Name                    Plan
     pulumi:pulumi:Stack               project-demo-demo-dev
 +   ├─ alicloud:vpc:Network           my-vpc                  create
 +   ├─ alicloud:ecs:SecurityGroup     pulumi_sg               create
 +   ├─ alicloud:vpc:Switch            pulumi_vswitch          create
 +   ├─ alicloud:ecs:SecurityGroupRule sg_rule                  create
 +   └─ alicloud:ecs:Instance          ecs-instance2           create

Resources:
    + 5 to create
    1 unchanged

Do you want to perform this update?
  yes
> no
  details

Select details to view the full resource configuration before committing.

Do you want to perform this update? details
  pulumi:pulumi:Stack: (same)
    [urn=urn:pulumi:demo-dev::project-demo::pulumi:pulumi:Stack::project-demo-demo-dev]
    + alicloud:vpc/network:Network: (create)
        [urn=urn:pulumi:demo-dev::project-demo::alicloud:vpc/network:Network::my-vpc]
        [provider=urn:pulumi:demo-dev::project-demo::pulumi:providers:alicloud::default_1_2_1::04da6b54-80e4-46f7-96ec-b56ff0331ba9]
        cidrBlock : "172.16.0.0/12"
        name      : "my-vpc-b884659"
    + alicloud:ecs/securityGroup:SecurityGroup: (create)
        [urn=urn:pulumi:demo-dev::project-demo::alicloud:ecs/securityGroup:SecurityGroup::pulumi_sg]
        [provider=urn:pulumi:demo-dev::project-demo::pulumi:providers:alicloud::default_1_2_1::04da6b54-80e4-46f7-96ec-b56ff0331ba9]
        description       : "pulumi security_groups"
        name              : "pulumi_sg-9544de5"
        securityGroupType : "normal"
        vpcId             : output<string>
    + alicloud:vpc/switch:Switch: (create)
        [urn=urn:pulumi:demo-dev::project-demo::alicloud:vpc/switch:Switch::pulumi_vswitch]
        [provider=urn:pulumi:demo-dev::project-demo::pulumi:providers:alicloud::default_1_2_1::04da6b54-80e4-46f7-96ec-b56ff0331ba9]
        availabilityZone : "cn-hangzhou-i"
        cidrBlock        : "172.16.0.0/21"
        name             : "pulumi_vswitch-402081f"
        vpcId            : output<string>
    + alicloud:ecs/securityGroupRule:SecurityGroupRule: (create)
        [urn=urn:pulumi:demo-dev::project-demo::alicloud:ecs/securityGroupRule:SecurityGroupRule::sg_rule]
        [provider=urn:pulumi:demo-dev::project-demo::pulumi:providers:alicloud::default_1_2_1::04da6b54-80e4-46f7-96ec-b56ff0331ba9]
        cidrIp          : "0.0.0.0/0"
        ipProtocol      : "tcp"
        nicType         : "intranet"
        policy          : "accept"
        portRange       : "22/22"
        priority        : 1
        securityGroupId : output<string>
        type            : "ingress"
    + alicloud:ecs/instance:Instance: (create)
        [urn=urn:pulumi:demo-dev::project-demo::alicloud:ecs/instance:Instance::ecs-instance2]
        [provider=urn:pulumi:demo-dev::project-demo::pulumi:providers:alicloud::default_1_2_1::04da6b54-80e4-46f7-96ec-b56ff0331ba9]
        autoRenewPeriod         : 1
        availabilityZone        : "cn-hangzhou-i"
        deletionProtection      : false
        dryRun                  : false
        forceDelete             : false
        imageId                 : "ubuntu_18_04_64_20G_alibase_20190624.vhd"
        includeDataDisks        : true
        instanceChargeType      : "PostPaid"
        instanceName            : "ecsCreatedByPulumi2"
        instanceType            : "ecs.t6-c1m1.large"
        internetChargeType      : "PayByTraffic"
        internetMaxBandwidthOut : 10
        period                  : 1
        periodUnit              : "Month"
        renewalStatus           : "Normal"
        securityGroups          : [
            [0]: output<string>
        ]
        spotStrategy            : "NoSpot"
        systemDiskCategory      : "cloud_efficiency"
        systemDiskSize          : 40
        vswitchId               : output<string>

Select yes to apply the plan. The output confirms all five resources were created.

Do you want to perform this update? yes
Updating (demo-dev):

     Type                              Name                    Status
     pulumi:pulumi:Stack               project-demo-demo-dev
 +   ├─ alicloud:vpc:Network           my-vpc                  created
 +   ├─ alicloud:ecs:SecurityGroup     pulumi_sg               created
 +   ├─ alicloud:vpc:Switch            pulumi_vswitch          created
 +   ├─ alicloud:ecs:SecurityGroupRule sg_rule                  created
 +   └─ alicloud:ecs:Instance          ecs-instance2           created

Resources:
    + 5 created
    1 unchanged

Duration: 42s

Permalink: https://app.pulumi.com/xxx/project-demo/demo-dev/updates/3
  1. Click the permalink in the output to view the deployment in the Pulumi Service web console.

The Activity tab shows the successful update (Update #3). The CHANGES panel lists all created resources and their status.

Congratulations! You have successfully created a Linux ECS instance on Alibaba Cloud using Pulumi.

To avoid ongoing charges, run pulumi destroy to remove all resources created in this tutorial.