日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用ROS CDK進行資源編排

ROS CDK(Cloud Development Toolkit)是ROS推出的代碼開發工具,幫助您使用少量代碼實現復雜模板的資源編排效果。

背景信息

  • ROS CDK已經在github上開源。

  • ROS CDK?持阿?云60種服務、276種資源。

  • ROS CDK?持JavaScript、TypeScript和Java三種編程語?。

安裝CLI

CLI?具提供了便捷使?ROS CDK的能力。以下示例將在CentOS 8.2 64位的系統上安裝CLI。

  1. 執行以下命令,安裝CLI。

    # 由于ROS CDK使用TypeScript開發,因此需要安裝相關軟件包。
    # 安裝Node.js、npm、tsc、lerna。
    sudo yum install -y nodejs
    sudo npm install typescript -g
    sudo npm install lerna -g
    # 安裝ros-cdk-cli。
    sudo npm install @alicloud/ros-cdk-cli -g
  2. 執行以下命令,查看ROS CDK功能列表。

    sudo ros-cdk

    執行命令后,輸出以下內容:

    Usage: ros-cdk COMMAND
    
    Commands:
      ros-cdk init [TEMPLATE]         Create a new, empty CDK project from a
                                      template. Invoked without TEMPLATE, the app
                                      template will be used.
      ros-cdk list [STACKS..]         Lists all stacks in the app      [aliases: ls]
      ros-cdk synthesize [STACKS..]   Synthesizes and prints the ROS template for
                                      this stack                    [aliases: synth]
      ros-cdk deploy [STACKS..]       Deploys the stack(s) named STACKS to ROS into
                                      your alicloud account
      ros-cdk diff [STACKS..]         Compares the specified stack with the deployed
                                      stack or a local template file, and returns
                                      with status 1 if any difference is found
      ros-cdk destroy [STACKS..]      Destroy the stack(s) named STACKS
      ros-cdk event [STACK..]         Get resource events within the resource STACK
      ros-cdk resource [STACKS..]     Get resources in the resource STACKS
      ros-cdk list-stacks [STACKS..]  Get resources in the resource STACKS
      ros-cdk load-config             Load Aliyun CLI config to CDK.
      ros-cdk config                  Set your alicloud account configuration.
    
    Options:
      --json, -j       Use JSON output instead of YAML when templates are printed to
                       STDOUT                             [boolean] [default: false]
      --ignore-errors  Ignores synthesis errors, which will likely produce an
                       invalid output                     [boolean] [default: false]
      --trace          Print trace for stack warnings                      [boolean]
      --strict         Do not construct stacks with warnings               [boolean]
      --version        Show version number                                 [boolean]
      -h, --help       Show help                                           [boolean]
    
    If your app has a single stack, there is no need to specify the stack name
    
    If one of cdk.json or ~/.cdk.json exists, options specified there will be used
    as defaults. Settings in cdk.json take precedence.

    命令說明如下表所示:

    命令

    說明

    init

    初始化ROS CDK?程。

    list(ls)

    列出?程中的所有資源棧。

    synthesize(synth)

    由代碼?成資源棧模板。

    deploy

    通過ROS部署資源棧。

    diff

    對?模板的差異。

    destroy

    通過ROS服務刪除資源棧。

    event

    通過ROS服務查詢資源棧事件。

    resource

    通過ROS服務查詢資源棧資源列表。

    list-stacks

    通過ROS服務查詢資源棧列表。

    load-config

    從阿里云CLI獲取阿里云賬號信息。

    config

    配置阿?云賬號信息。

使用示例

本文以TypeScript語言為例,為您介紹如何使用ROS CDK為資源棧添加VPC。

  1. 初始化工程。

    1. 執行以下命令,創建工程目錄并初始化工程。

      # 創建工程目錄,目錄名為工程名。
      sudo mkdir demo
      sudo cd demo
      # 初始化工程,使用TypeScript語言。
      sudo ros-cdk init --language=typescript --generate-only=true
    2. 執行以下命令,為工程安裝依賴。

      # 安裝工程所需依賴包。
      sudo npm install
    3. 執行以下命令,查看工程結構。

      sudo tree -I "node_modules"

      執行命令后,輸出以下內容:

      .
      ├── bin
      │   └── demo.ts
      ├── cdk.json
      ├── jest.config.js
      ├── lib
      │   └── demo-stack.ts
      ├── package.json
      ├── package-lock.json
      ├── README.md
      ├── test
      │   └── demo.test.ts
      └── tsconfig.json
      
      3 directories, 9 files

      工程結構說明如下:

      • bin/demo.ts:入口。

        示例中創建了一個應用(類型為ros.App)和一個資源棧(類型為DemoStack,名稱為DemoStack),并將資源棧添加到應用中。demo.ts文件內容如下:

        說明

        一個工程有且僅有一個應用。

        #!/usr/bin/env node
        import * as ros from '@alicloud/ros-cdk-core';
        import { DemoStack } from '../lib/demo-stack';
        const app = new ros.App({outdir: './cdk.out'});
        new DemoStack(app, 'DemoStack');
      • ib/demo-stack.ts:DemoStack的定義。

        您可以將資源添加到資源棧中,動態構建資源棧。初始化生成的代碼中,只為資源棧添加了描述信息。demo-stack.ts文件內容如下:

        import * as ros from '@alicloud/ros-cdk-core';
        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
          }
        }
      • test/demo.test.ts:單元測試。

        用于驗證構建資源棧的邏輯是否符合預期。demo.test.ts文件內容如下:

        import { expect as expectCDK, matchTemplate, MatchStyle } from '@alicloud/ros-cdk-assert';
        import * as ros from '@alicloud/ros-cdk-core';
        import * as Demo from '../lib/demo-stack';
        test('Stack with version.', () => {
          const app = new ros.App();
          // WHEN
          const stack = new Demo.DemoStack(app, 'MyTestStack');
          // THEN
          expectCDK(stack).to(
            matchTemplate(
              {
                ROSTemplateFormatVersion: '2015-09-01',
                Description: "This is the simple ros cdk app example."
              },
              MatchStyle.EXACT,
            ),
          );
        });
  2. 為資源棧添加一個VPC。

    1. 修改package.json文件,在dependencies中增加@alicloud/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.0",
          "@alicloud/ros-cdk-ecs": "^1.0.0"
        }
      }
    2. 執行以下命令,為工程安裝新依賴。

      # 安裝工程所需依賴包。
      sudo npm install
    3. 修改lib/demo-stack.ts文件,增加一個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
          new ecs.Vpc(this, 'vpc-from-ros-cdk', {
            vpcName: 'test-ros-cdk',
            cidrBlock: '10.0.0.0/8',
            description: 'This is ros cdk test'
         });
        }
      }
    4. 執行以下命令,查看模板。

      sudo ros-cdk synth --json

      執行命令后,輸出以下內容:

      {
        "Description": "This is the simple ros cdk app example.",
        "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"
            }
          }
        }
      }
    5. 修改test/demo.test.ts文件,確保單元測試與代碼一致。

      import { expect as expectCDK, matchTemplate, MatchStyle } from '@alicloud/ros-cdk-assert';
      import * as ros from '@alicloud/ros-cdk-core';
      import * as Demo from '../lib/demo-stack';
      test('Stack with version.', () => {
        const app = new ros.App();
        // WHEN
        const stack = new Demo.DemoStack(app, 'MyTestStack');
        // THEN
        expectCDK(stack).to(
          matchTemplate(
            {
              "Description": "This is the simple ros cdk app example.",
              "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"
                  }
                }
              } 
            },
            MatchStyle.EXACT,
          ),
        );
      });
    6. 執行以下命令,進行單元測試。

      sudo npm test

      執行命令后,輸出以下內容:

      > demo@0.1.0 test /root/demo
      > jest
       PASS  test/demo.test.ts
        ? Stack with version. (136ms)
      Test Suites: 1 passed, 1 total
      Tests:       1 passed, 1 total
      Snapshots:   0 total
      Time:        2.988s, estimated 3s
      Ran all test suites.
  3. 通過ROS服務部署資源棧。

    1. 配置ROS阿里云賬號信息。

      1. 執行ros-cdk config命令。

        sudo ros-cdk config
      2. 根據界面提示輸入配置信息。

        endpoint(optional, default:https://ros.aliyuncs.com):
        defaultRegionId(optional, default:cn-hangzhou):
        
        [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!

        配置內容說明如下:

        • endpoint:ROS服務地址。默認值為https://ros.aliyuncs.com。

        • defaultRegionId:ROS資源棧部署的地域。默認值為cn-hangzhou。

        • Authenticate mode:鑒權方式。本示例的鑒權方式為AccessKey,您需要輸入accessKeyId和accessKeySecret。

    2. 執行以下命令,通過ROS部署資源棧。

      sudo ros-cdk deploy

      執行命令后,輸出以下內容:

       ? The deployment(create stack) has completed!
      RequestedId: BC963C80-054D-41A0-87E7-001E0AB7B1BA
      StackId: 0714be3a-0713-4b7d-b7aa-************
    3. 登錄資源編排控制臺,在左側導航欄單擊資源棧,查看資源棧狀態。

      資源棧狀態列顯示創建成功,表示名為DemoStack的資源棧已經創建成功。

  4. (可選)更改VPC名稱并在VPC中創建vSwitch。

    通過ROS CDK可以實現更為復雜的功能,本示例中計劃實現以下功能:

    • 更改VPC名稱:將VPC名稱從test-ros-cdk更改為test-ros-cdk-vpc

    • 在VPC中創建3個vSwitch:3個vSwitch有不同的名稱,屬于不同的可用區和網段。

    1. 修改lib/demo-stack.ts文件。

      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-vpc',
            cidrBlock: '10.0.0.0/8',
            description: 'This is ros cdk test'
          });
          for (let i = 0; i < 3; i++) {
            new ecs.VSwitch(this, `vsw-from-ros-cdk-${i}`, {
              vpcId: vpc.attrVpcId,
              zoneId: ros.Fn.select(`${i}`, ros.Fn.getAzs(ros.RosPseudo.region)),
              vSwitchName: `test-ros-cdk-vsw-${i}`,
              cidrBlock: `10.0.${i}.0/24`,
            });
          }
        }
      }

      修改說明如下:

      • 通過修改vpcName的取值,為VPC更改名稱。

      • 通過for循環創建vSwitch,極大地減少了代碼量。

      • 通過使用vpc.attrVpcId獲取VPC的ID。

      • 通過Fn.getAzs函數配合偽參數RosPseudo.region獲取可用區列表。

    2. 修改test/demo.test.ts文件,讓單元測試與代碼一致,并執行npm test命令進行單元測試。

      具體操作,請參見步驟2。

    3. 執行ros-cdk diff命令,查看變更情況。

      sudo ros-cdk diff

      執行命令后,輸出以下內容:

      Stack DemoStack
      Resources
      [+] ALIYUN::ECS::VSwitch vsw-from-ros-cdk-0/vsw-from-ros-cdk-0 vsw-from-ros-cdk-0 
      [+] ALIYUN::ECS::VSwitch vsw-from-ros-cdk-1/vsw-from-ros-cdk-1 vsw-from-ros-cdk-1 
      [+] ALIYUN::ECS::VSwitch vsw-from-ros-cdk-2/vsw-from-ros-cdk-2 vsw-from-ros-cdk-2 
      [~] ALIYUN::ECS::VPC vpc-from-ros-cdk/vpc-from-ros-cdk vpc-from-ros-cdk 
       └─ [~] VpcName
           ├─ [-] test-ros-cdk
           └─ [+] test-ros-cdk-vpc
    4. 執行以下命令,通過ROS部署資源棧。

      sudo ros-cdk deploy

      執行命令后,輸出以下內容:

       ? The deployment(update stack) has completed!
      RequestedId: 15E99FD6-968E-47AA-9CD2-82FA6E87C08E
      StackId: 0714be3a-0713-4b7d-b7aa-************
    5. 登錄資源編排控制臺,在左側導航欄單擊資源棧,查看資源棧狀態。

      資源棧狀態列顯示更新完成,表示名為DemoStack的資源棧已經更新完成。

      單擊資源頁簽,查看資源列表。本示例中有1個VPC資源和3個VSwith資源。

  5. (可選)刪除資源棧。

    1. 執行以下命令,列出工程中所有資源棧。

      sudo ros-cdk list

      執行命令后,輸出以下內容:

      DemoStack deploy
    2. 執行以下命令,刪除資源棧。

      sudo ros-cdk destroy

      執行命令后,輸出以下內容:

      The following stack(s) will be destroyed(Only deployed stacks will be displayed).
      DemoStack
      Please confirm.(Y/N)
      Y
       ? Deleted
      RequestedId: 1BF864E1-7965-4148-A302-E6ABFF806641

資源相關的npm包

資源相關的npm包如下,例如@alicloud/ros-cdk-ecs代表ECS服務。每個npm包含這個服務在ROS上所支持的所有資源類型。

您可以登錄資源編排控制臺,在左側導航欄單擊資源類型,查看不同服務支持的資源。

@alicloud/ros-cdk-acm
@alicloud/ros-cdk-actiontrail
@alicloud/ros-cdk-apigateway
@alicloud/ros-cdk-arms
@alicloud/ros-cdk-bss
@alicloud/ros-cdk-cas
@alicloud/ros-cdk-cdn
@alicloud/ros-cdk-cen
@alicloud/ros-cdk-cloudfw
@alicloud/ros-cdk-cms
@alicloud/ros-cdk-cr
@alicloud/ros-cdk-cs
@alicloud/ros-cdk-datahub
@alicloud/ros-cdk-dbs
@alicloud/ros-cdk-dms
@alicloud/ros-cdk-dns
@alicloud/ros-cdk-drds
@alicloud/ros-cdk-dts
@alicloud/ros-cdk-eci
@alicloud/ros-cdk-ecs
@alicloud/ros-cdk-edas
@alicloud/ros-cdk-ehpc
@alicloud/ros-cdk-elasticsearch
@alicloud/ros-cdk-emr
@alicloud/ros-cdk-ens
@alicloud/ros-cdk-ess
@alicloud/ros-cdk-fc
@alicloud/ros-cdk-fnf
@alicloud/ros-cdk-foas
@alicloud/ros-cdk-ga
@alicloud/ros-cdk-gws
@alicloud/ros-cdk-hbr
@alicloud/ros-cdk-iot
@alicloud/ros-cdk-kafka
@alicloud/ros-cdk-kms
@alicloud/ros-cdk-marketplace
@alicloud/ros-cdk-memcache
@alicloud/ros-cdk-mns
@alicloud/ros-cdk-mongodb
@alicloud/ros-cdk-mse
@alicloud/ros-cdk-nas
@alicloud/ros-cdk-oos
@alicloud/ros-cdk-oss
@alicloud/ros-cdk-ots
@alicloud/ros-cdk-polardb
@alicloud/ros-cdk-pvtz
@alicloud/ros-cdk-ram
@alicloud/ros-cdk-rds
@alicloud/ros-cdk-redis
@alicloud/ros-cdk-resourcemanager
@alicloud/ros-cdk-rocketmq
@alicloud/ros-cdk-ros
@alicloud/ros-cdk-sae
@alicloud/ros-cdk-sag
@alicloud/ros-cdk-slb
@alicloud/ros-cdk-sls
@alicloud/ros-cdk-uis
@alicloud/ros-cdk-vpc
@alicloud/ros-cdk-vs
@alicloud/ros-cdk-waf