使用Pulumi快速创建Linux服务器
本文将介绍使用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.安装pulumi和pulumi-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.也可以单击permalink到Pulumi 官网页面进行查看。
在Pulumi官网的Activity页签中,可以查看到本次更新(Update #3)已成功完成,CHANGES面板中列出了本次创建的全部资源及其状态。
恭喜您,成功使用pulumi创建阿里云的服务器!