使用Pulumi快速创建Linux服务器

更新时间:
复制为 MD 格式

本文将介绍使用Python语言和Pulumi在阿里云指定区域和可用域中快速创建一台Linux云服务器。

任务描述

  • 新建一个Pulumi项目

  • 部署一台Linux服务器 

    • Linux服务器位于指定的区域和可用区,使用专用网络并配置好安全组规则。

前置要求

  • Python 版本为3以上

  • 安装virtualenv

  • 已经根据文档完成Pulumi安装

新建一个Pulumi项目

1.使用`pulumi new --dir ` 在本地建一个工作目录。根据提示选择合适的模板。 

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. 往下翻页,选择`alicloud-python`模板。

    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.在界面提示下输入:项目名称、项目描述、堆栈名称、阿里云区域(默认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.确认项目创建后,本地目录下生成的文件。

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

其中, 

__main__.py 文件用于定义部署配置的。

Pulumi.demo-dev.yaml记录了该堆栈的公共配置,如:区域。

Pulumi.yaml记录项目元信息:项目名称、描述、语言。

requirements.txt 文件定义了运行依赖的python模块。

5.根据提示进入工作目录 

cd project-demo

6.开启独立python环境(如果服务器只有一个python版本可跳过此步骤) 

virtualenv -p python3 venv
source venv/bin/activate

7.安装pulumipulumi-alicloud模块 

pip3 install -r requirements.txt

部署一台Linux服务器

1. 定义部署文件

__main__.py内容如下:

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)

代码导入pulumi_alicloud模块,并定义了专用网络、vswitch、安全组规则,最后定义了ECS实例。

2. 使用Pulumi命令行来使配置生效。

运行`pulumi up`。

(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

在应用我们的配置前,先查看执行计划,选择details。

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>

确认无误后,选择“yes”执行我们的配置,5个资源创建成功,输出如下。

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

3.也可以单击permalinkPulumi 官网页面进行查看。

Pulumi官网的Activity页签中,可以查看到本次更新(Update #3)已成功完成,CHANGES面板中列出了本次创建的全部资源及其状态。

恭喜您,成功使用pulumi创建阿里云的服务器!