You can use ROS Cloud Development Toolkit (CDK) to create a stack and then use Alibaba Cloud CLI to query resource details of the stack. This topic uses TypeScript as an example.
Prerequisites
The following requirements are met:
-
Alibaba Cloud CLI is installed and configured. For more information, see What is Alibaba Cloud CLI
-
ROS CDK is installed. For more information, see Install ROS CDK.
-
The JSON parsing toolkit
jqis installed. For more information, see jq.
Step 1: Initialize a project
Each ROS CDK application requires its own project directory, which manages module dependencies. Create a project directory and initialize the project before you begin.
Run the following commands to create and initialize the project:
mkdir demo
cd demo
ros-cdk init --language=typescript --generate-only=true
Step 2: Configure an Alibaba Cloud credential
-
Run the following command to configure an Alibaba Cloud credential:
ros-cdk config -
Follow on-screen instructions to configure the credential parameters.
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!
Step 3: Install dependencies
-
Modify the
package.jsonfile and add the ros-cdk-ecs dependency package of Elastic Compute Service (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" } } -
Run the following command to install the dependencies:
npm install
Step 4: Create a stack
-
Modify the
lib/demo-stack.tsfile to create a stack. You can define virtual private cloud (VPC) parameters in the code to create VPC resources.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, }); } } -
Run the following command to generate a template file:
ros-cdk synth --jsonCommand output:
{ "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" ] } } } } -
Run the following command to create a stack and generate the
stack.outputs.jsonfile:ros-cdk deploy --sync=true --outputs-file=trueCommand output:
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**** -
Run the following command to query the stack output:
cat stack.outputs.jsonCommand output:
{ "DemoStack": [ { "Description": "No description given", "OutputKey": "vpcId", "OutputValue": "vpc-2zefn3x56bka624ef****" } ] }
Step 5: Query resource details of the stack
Run the following command to call the DescribeVpcAttribute operation and query VPC details in the stack.
vpcId=`cat stack.outputs.json |jq '.DemoStack[0].OutputValue'| sed 's/\"//g'`
aliyun vpc DescribeVpcAttribute --VpcId $vpcId
Command output:
{
"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": ""
}
Step 6: (Optional) Delete the stack
-
Run the following command to delete the stack:
ros-cdk destroy --sync=true -
Follow the on-screen instructions to confirm the deletion.
The following stack(s) will be destroyed(Only deployed stacks will be displayed). DemoStack Please confirm.(Y/N) yCommand output:
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****
References
API reference: Browse the full construct library API at ROS CDK references.
CDK commands: For CDK CLI usage and examples, see ROS CDK commands.
CDK features: For CDK features such as outputs and pseudo parameters, see ROS CDK features.
GitHub repository: Visit Resource-Orchestration-Service-Cloud-Development-Kit to access the source code, submit issues, and review the license and release notes.