本文以TypeScript语言为例,为您介绍如何使用ROS CDK创建资源栈,然后使用阿里云CLI查询资源栈中的资源详情。
前提条件
请确保您已经完成以下操作:
步骤一:初始化工程
每个ROS CDK应用都要求创建在一个独立的工程目录下,且该应用需要使用独立工程目录中模块的依赖项。所以在创建应用之前,需要先创建一个工程目录并进行初始化。
执行以下命令,创建工程目录并初始化工程。
mkdir demo
cd demo
ros-cdk init --language=typescript --generate-only=true
步骤二:配置阿里云凭证信息
执行以下命令,配置阿里云凭证信息。
ros-cdk config
根据界面提示输入配置信息。
ros-cdk config endpoint(optional, default:https://ros.aliyuncs.com): defaultRegionId(optional, default:cn-hangzhou):cn-beijing [1] AK [2] StsToken [3] RamRoleArn [4] EcsRamRole [0] CANCEL Authenticate mode [1...4 / 0]: 1 accessKeyId:************************ accessKeySecret:****************************** ✅ Your cdk configuration has been saved successfully!
步骤三:安装依赖
修改
package.json
文件,添加ECS依赖包(ros-cdk-ecs)。{ "name": "demo", "version": "0.1.0", "bin": { "demo": "bin/demo.js" }, "scripts": { "build": "tsc", "test": "jest" }, "devDependencies": { "@types/jest": "^25.2.1", "@types/node": "10.17.5", "typescript": "^3.9.7", "jest": "^25.5.0", "ts-jest": "^25.3.1", "ts-node": "^8.1.0", "babel-jest": "^26.6.3", "@babel/core": "^7.12.9", "@babel/preset-env": "7.12.7", "@babel/preset-typescript": "^7.12.7", "@alicloud/ros-cdk-assert": "^1.4.0" }, "dependencies": { "@alicloud/ros-cdk-core": "^1.4.0", "@alicloud/ros-cdk-ecs": "^1.4.0" } }
执行以下命令,安装依赖。
npm install
步骤四:创建资源栈
修改
lib/demo-stack.ts
文件,创建资源栈。您可以在代码中定义VPC参数信息,从而创建VPC资源。import * as ros from '@alicloud/ros-cdk-core'; import * as ecs from '@alicloud/ros-cdk-ecs'; export class DemoStack extends ros.Stack { constructor(scope: ros.Construct, id: string, props?: ros.StackProps) { super(scope, id, props); new ros.RosInfo(this, ros.RosInfo.description, "This is the simple ros cdk app example."); // The code that defines your stack goes here const vpc = new ecs.Vpc(this, 'vpc-from-ros-cdk', { vpcName: 'test-ros-cdk', cidrBlock: '10.0.0.0/8', description: 'This is ros cdk test' }); const vpcId = new ros.RosOutput(this, 'vpcId', { value: vpc.attrVpcId, }); } }
执行以下命令,生成模板文件。
ros-cdk synth --json
执行命令后,输出以下内容:
{ "Description": "This is the simple ros cdk app example.", "Metadata": { "ALIYUN::ROS::Interface": { "TemplateTags": [ "Create by ROS CDK" ] } }, "ROSTemplateFormatVersion": "2015-09-01", "Resources": { "vpc-from-ros-cdk": { "Type": "ALIYUN::ECS::VPC", "Properties": { "CidrBlock": "10.0.0.0/8", "Description": "This is ros cdk test", "EnableIpv6": false, "VpcName": "test-ros-cdk" } } }, "Outputs": { "vpcId": { "Value": { "Fn::GetAtt": [ "vpc-from-ros-cdk", "VpcId" ] } } } }
执行以下命令,创建资源栈并生成
stack.outputs.json
文件。ros-cdk deploy --sync=true --outputs-file=true
执行命令后,输出以下内容:
DemoStack: deploying... |DemoStack |2021-12-28T10:57:20 | CREATE_COMPLETE | ALIYUN::ECS::VPC | vpc-2zefn3x56bka624k6**** | vpc-from-ros-cdk Outputs: Key: vpcId Value: vpc-2zefn3x56bka624k6**** Description: No description given ✅ The deployment(sync deploy stack) has finished! status: CREATE_COMPLETE StatusReason: Stack CREATE completed successfully StackId: 9dbd63f5-db09-4c16-b018-d3a3a7be****
执行以下命令,查询资源栈的输出。
cat stack.outputs.json
执行命令后,输出以下内容:
{ "DemoStack": [ { "Description": "No description given", "OutputKey": "vpcId", "OutputValue": "vpc-2zefn3x56bka624ef****" } ] }
步骤五:查询资源栈中的资源详情
使用阿里云CLI调用DescribeVpcAttribute接口,查询VPC实例详情。
vpcId=`cat stack.outputs.json |jq '.DemoStack[0].OutputValue'| sed 's/\"//g'`
aliyun vpc DescribeVpcAttribute --VpcId $vpcId
执行命令后,输出以下内容:
{
"Description": "This is ros cdk test",
"ClassicLinkEnabled": false,
"ResourceGroupId": "rg-acfm2xwmef****",
"SecondaryCidrBlocks": {
"SecondaryCidrBlock": []
},
"CidrBlock": "10.0.0.0/8",
"UserCidrs": {
"UserCidr": []
},
"NetworkAclNum": 0,
"VRouterId": "vrt-2zej8djrl78424efa****",
"OwnerId": 1754580XXXXXX,
"CloudResources": {
"CloudResourceSetType": [
{
"ResourceCount": 1,
"ResourceType": "VRouter"
},
{
"ResourceCount": 1,
"ResourceType": "RouteTable"
}
]
},
"Status": "Available",
"IsDefault": false,
"RequestId": "3A742895-A93F-5F67-BA81-CCEE88EGAD324",
"SupportIpv4Gateway": false,
"Ipv4GatewayId": "",
"VSwitchIds": {
"VSwitchId": []
},
"VpcId": "vpc-2zefn3x56bka624ef****",
"CreationTime": "2021-12-28T10:57:21Z",
"VpcName": "test-ros-cdk",
"RegionId": "cn-beijing",
"Ipv6CidrBlock": ""
}
步骤六(可选):删除资源栈
执行以下命令,删除资源栈。
ros-cdk destroy --sync=true
根据界面提示,确认删除。
The following stack(s) will be destroyed(Only deployed stacks will be displayed). DemoStack Please confirm.(Y/N) y
执行命令后,输出以下内容:
DemoStack: destroying... |DemoStack | DELETE_COMPLETE | ALIYUN::ECS::VPC | | vpc-from-ros-cdk ✅ The task(sync destroy stack) has finished! status: DELETE_COMPLETE StatusReason: Stack DELETE completed successfully StackId: 9dbd63f5-db09-4c16-b018-d3a3a7be****
更多参考
API参考页面
CDK构造库提供了一系列API,用于构建您的CDK应用程序。想要了解如何使用这些API及其特性,请参阅ROS CDK API参考。
命令简介
想要了解如何使用CDK命令行及其使用示例,请参阅ROS CDK命令简介。
功能简介
想要了解如何使用CDK输出、伪参数等功能及其使用示例,请参阅ROS CDK功能简介。
GitHub仓库
有关ROS CDK的官方GitHub存储库,请参阅Resource-Orchestration-Service-Cloud-Development-Kit。在这里,您可以提交问题,查看我们的许可证、发布记录等。