文档

使用ROS CDK和阿里云CLI管理资源栈

更新时间:

本文以TypeScript语言为例,为您介绍如何使用ROS CDK创建资源栈,然后使用阿里云CLI查询资源栈中的资源详情。

前提条件

请确保您已经完成以下操作:

步骤一:初始化工程

每个ROS CDK应用都要求创建在一个独立的工程目录下,且该应用需要使用独立工程目录中模块的依赖项。所以在创建应用之前,需要先创建一个工程目录并进行初始化。

执行以下命令,创建工程目录并初始化工程。

mkdir demo
cd demo
ros-cdk init --language=typescript --generate-only=true

步骤二:配置阿里云凭证信息

  1. 执行以下命令,配置阿里云凭证信息。

    ros-cdk config
  2. 根据界面提示输入配置信息。

    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!

步骤三:安装依赖

  1. 修改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.0.0"
      },
      "dependencies": {
        "@alicloud/ros-cdk-core": "^1.0.5",
        "@alicloud/ros-cdk-ecs": "^1.0.3"
      }
    }
  2. 执行以下命令,安装依赖。

    npm install

步骤四:创建资源栈

  1. 修改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,
            });
        }
    }
  2. 执行以下命令,生成模板文件。

    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"
            ]
          }
        }
      }
    }
  3. 执行以下命令,创建资源栈并生成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****
  4. 执行以下命令,查询资源栈的输出。

    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": ""
}

步骤六(可选):删除资源栈

  1. 执行以下命令,删除资源栈。

    ros-cdk destroy --sync=true
  2. 根据界面提示,确认删除。

    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****
  • 本页导读 (1)