ROS CDK命令简介

本文为您介绍ROS CDK相关命令行以及命令行的使用示例。

了解ROS CDK命令

命令

说明

ros-cdk init

初始化ROS CDK⼯程。

ros-cdk config

交互式配置阿里云账号信息。

ros-cdk load-config

从阿里云CLI获取阿里云凭证信息。

ros-cdk list(ls)

列出⼯程中的所有资源栈。

ros-cdk synthesize(synth)

由代码⽣成资源栈模板。

ros-cdk deploy

通过ROS创建资源栈。

ros-cdk list-stacks

通过ROS查询资源栈列表。

ros-cdk event

通过ROS查询资源栈事件。

ros-cdk output

通过ROS查询资源栈的输出信息。

ros-cdk resource

通过ROS查询资源栈资源列表。

ros-cdk diff

对⽐模板的差异。

ros-cdk destroy

通过ROS删除资源栈。

ros-cdk generate-stack-file

同步在工程内生成stack.info.json文件。

ros-cdk config-set

非交互式配置阿里云账号信息。

使用ROS CDK命令

ros-cdk init

初始化CDK工程时,您可以设置--language指定初始化工程使用的编程语言(csharp、java、javascript、python或typescript),并指定--generate-only(true或false)来限制是否只创建工程文件,而不执行其他操作(例如:配置Git仓库、安装依赖、编译项目等)。

ros-cdk init --language=typescript --generate-only=true

ros-cdk config

初始化工程后,您可以使用config命令交互式配置阿里云账号信息。目前主要支持AK、StsToken、RamRoleArn和EcsRamRole四种认证方式,您也可以指定--global参数将认证信息设置为全局配置。

 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!

ros-cdk load-config

ROS CDK支持从阿里云CLI获取阿里云凭证信息。您可以将阿里云CLI的认证配置信息导入CDK,导入时只需选择对应的认证配置模式(mode)和认证配置文件名(profileName)即可(选择列表只会列举已经存在的配置信息)。您也可以指定--file-path参数获取指定路径下认证配置文件的配置信息,指定--global参数将认证信息设置为全局配置。

 ros-cdk load-config
 [1] AK
 [2] StsToken
 [3] RamRoleArn
 [4] EcsRamRole
 [0] CANCEL
 
 Select authenticate mode [1...4 / 0]: 1
 
 [1] default
 [2] akProfile
 [0] CANCEL
 
 Select Authenticate profile name [1, 2, 0]: 2
 
  ✅ Your cdk configuration has been load from Aliyun Cli configuration saved successfully AK akProfile!

ros-cdk list (ls)

初始化工程后,您可以列举当前工程内的资源栈及资源栈在工程内的状态。

 ros-cdk list 
 CdkDemoStack synth
 CdkTestStack deploy

ros-cdk synthesize(synth)

您可以使用synth命令预览工程内的ROS模板,同时可以配置--json参数指定预览JSON格式模板。当工程中存在多个资源栈时,必须指定资源栈名称。

 ros-cdk synth CdkTestStack --json
 {
   "ROSTemplateFormatVersion": "2015-09-01",
   "Resources": {
     "VPC": {
       "Type": "ALIYUN::ECS::VPC",
       "Properties": {
         "CidrBlock": "10.0.0.0/8",
         "Description": "This is ros cdk test",
         "EnableIpv6": false,
         "VpcName": "test-ros-cdk-javascript"
       }
     }
   }
 }

当工程目录中存在多个自定义App工程文件或需要传递自定义参数信息给App所运行的代码时,可以使用--App配置项运行指定的App工程。

 ros-cdk synth NewStack --json --app "npx ts-node bin/new.app.ts"
 {
   "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 new app test",
        "EnableIpv6": false,
        "VpcName": "new-app-test"
       }
     }
   }
 }

ros-cdk deploy

创建资源栈时,如果工程中存在多个资源栈,需要指定对应资源栈名称。您也可以根据需求指定以下命令:

  • --timeoutMinutes:创建资源栈的超时时间。

  • --parameters:模板中已定义的参数信息。

  • --region:资源栈创建的地域。

  • --app:运行指定的App创建资源栈。

  • --sync:使用同步方式创建资源栈。

  • --outputs-file:输出模板的Outputs信息到stack.outputs.json文件中。

  • --skip-if-no-changes:在资源栈模板内容未变更时,再次执行deploy命令不做资源创建变更检查。

  • --resource-group-id:创建资源栈指定资源组ID,如果不指定该参数,资源栈将加入默认资源组。

  • --json, -j:当模板打印到STDOUT时,使用JSON输出而不是YAML 。

  • --ignore-errors:忽略合成错误,这可能会产生无效的输出 。

  • --detail-log:当资源栈部署错误时,设置此参数以显示更多错误信息。

  • --disable-rollback:创建资源栈失败时禁用回滚。

 ros-cdk deploy        # 当工程内只存在一个资源栈时直接部署资源栈。
 ros-cdk deploy NewStack  --app "npx ts-node bin/new.app.ts"  # 特殊指定工程运行的App。
 ros-cdk deploy --sync=true NewStack # 使用同步方式部署资源栈并输出资源详情。
 ros-cdk deploy --sync=true --outputs-file=true NewStack # 使用同步方式部署资源栈并输出模板的Outputs信息到stack.outputs.json文件。
 ros-cdk deploy CdkTestStack --timeoutMinutes 60 --region cn-beijing  
 ros-cdk deploy CdkTestStack CdkDemoStack 
 ros-cdk deploy CdkTestStack CdkDemoStack --disable-rollback=true # 当资源栈创建失败后,禁用回滚。
 ros-cdk deploy CdkDemoStack --parameters uploadBucketName=UploadBucket
 ros-cdk deploy CdkDemoStack CdkTestStack --parameters CdkDemoStack:uploadBucketName=UploadBucket --parameters CdkTestStack:uploadBucketName=UpBuckett

ros-cdk list-stacks

创建资源栈后,您可以通过list-stacks查询工程内所有资源栈的状态及详细信息。

  • --all:查询当前地域下全部资源栈详情。

  • --resource-group-id:查询指定资源组内的资源栈详情。

  • --page-number:资源栈列表的页码,起始值:1,默认值:1。

  • --page-size:分页查询时设置的每页行数,最大值:50,默认值:10。

  • --app:查询指定的App内的资源栈详情。

  • --ignore-errors:忽略合成错误,这可能会产生无效的输出。

  • --json, -j:当模板打印到STDOUT时,使用JSON输出而不是YAML 。

 ros-cdk list-stacks --all
  ✅ The Stacks list is:
  [
         {
                 "Status": "CREATE_COMPLETE",
                 "StackType": "ROS",
                 "StatusReason": "Stack CREATE completed successfully",
                 "CreateTime": "2021-01-14T09:28:09",
                 "RegionId": "cn-beijing",
                 "DisableRollback": false,
                 "StackName": "CdkTestStack",
                 "StackId": "ceb59a66-b2e8-4b30-9da6-59a66****",
                 "TimeoutInMinutes": 20
         },
         {
                 "Status": "CREATE_COMPLETE",
                 "StackType": "ROS",
                 "StatusReason": "Stack CREATE completed successfully",
                 "CreateTime": "2021-01-13T03:10:42",
                 "RegionId": "cn-beijing",
                 "DisableRollback": false,
                 "StackName": "stack_2021-01-13",
                 "StackId": "37e697cc-3ea6-4a79-9dcd-59a66****",
                 "TimeoutInMinutes": 60
         }
 ]

ros-cdk event

创建资源栈后,您可以使用event命令获取创建资源栈的事件详情。在获取时必须指定资源栈名称。您可以指定--logical-resource-id参数获取对应资源的事件,在资源栈事件较多时可以指定--page-number和--page-size限制获取的资源栈事件数量。

 ros-cdk event CdkTestStack -l ros-cdk-test-sg 
  ✅ The Stack CdkTestStack 
  Events is: 
  [
         {
                 "Status": "CREATE_COMPLETE",
                 "LogicalResourceId": "ros-cdk-test-sg",
                 "PhysicalResourceId": "sg-2ze7i61on1gb48zi****",
                 "StatusReason": "state changed",
                 "CreateTime": "2021-01-14T09:28:10",
                 "EventId": "fc10f59e-7dcc-492d-af5e-0f59e****",
                 "ResourceType": "ALIYUN::ECS::SecurityGroup",
                 "StackName": "CdkTestStack",
                 "StackId": "ceb59a66-b2e8-4b30-9da6-0f59e****"
         },
         {
                 "Status": "CREATE_IN_PROGRESS",
                 "LogicalResourceId": "ros-cdk-test-sg",
                 "StatusReason": "state changed",
                 "CreateTime": "2021-01-14T09:28:09",
                 "EventId": "4d7a4b33-9d5e-49e8-a2b4-0f59e****",
                 "ResourceType": "ALIYUN::ECS::SecurityGroup",
                 "StackName": "CdkTestStack",
                 "StackId": "ceb59a66-b2e8-4b30-9da6-0f59e****"
         }
 ]

ros-cdk output

创建资源栈后,您可以使用output命令获取创建资源栈的输出信息。

 ros-cdk output cdk-demo
   ✅ The Stack cdk-demo 
  Output is: 
  [
         {
                 "Description": "No description given",
                 "OutputKey": "BucketDomainName",
                 "OutputValue": "bestros.oss-cn-beijing.aliyuncs.com"
         }
 ]

ros-cdk resource

创建资源栈后,您可以使用resource命令获取资源栈中资源的详细信息。您可以同时指定获取多个资源栈。

 ros-cdk resource CdkTestStack
 
 ✅ The Stack CdkTestStack 
  Resource is: 
  [
         {
                 "Status": "CREATE_COMPLETE",
                 "LogicalResourceId": "ros-cdk-test-sg-ingres****",
                 "PhysicalResourceId": "sg-2ze7i61on1gb48zi****",
                 "StatusReason": "state changed",
                 "CreateTime": "2021-01-14T09:28:09",
                 "UpdateTime": "2021-01-14T09:28:14",
                 "ResourceType": "ALIYUN::ECS::SecurityGroupIngress",
                 "StackName": "CdkTestStack",
                 "StackId": "ceb59a66-b2e8-4b30-9da6-59a66****"
         },
         {
                 "Status": "CREATE_COMPLETE",
                 "LogicalResourceId": "ros-cdk-tes****",
                 "PhysicalResourceId": "sg-2ze7i61on1gb48zi****",
                 "StatusReason": "state changed",
                 "CreateTime": "2021-01-14T09:28:09",
                 "UpdateTime": "2021-01-14T09:28:10",
                 "ResourceType": "ALIYUN::ECS::SecurityGroup",
                 "StackName": "CdkTestStack",
                 "StackId": "ceb59a66-b2e8-4b30-9da6-59a66****"
         },
         {
                 "Status": "CREATE_COMPLETE",
                 "LogicalResourceId": "ros-cdk-test-sg-ingres****",
                 "PhysicalResourceId": "sg-2ze7i61on1gb48zi****",
                 "StatusReason": "state changed",
                 "CreateTime": "2021-01-14T09:28:09",
                 "UpdateTime": "2021-01-14T09:28:14",
                 "ResourceType": "ALIYUN::ECS::SecurityGroupIngress",
                 "StackName": "CdkTestStack",
                 "StackId": "ceb59a66-b2e8-4b30-9da6-59a66****"
         }
 ]

ros-cdk diff

如果您修改了工程中已创建的资源栈代码,可以使用diff命令对比已创建资源栈和修改后资源栈的差异信息,确认修改信息无误之后再进行创建。

 ros-cdk diff CdkDemoStack
 Stack CdkDemoStack
 Resources
 [~] ALIYUN::ECS::VPC vpc-from-ros-cdk/vpc-from-ros-cdk vpc-from-ros-cdk 
  └─ [~] VpcName
      ├─ [-] test-ros-cdk-vpc
      └─ [+] test-ros-cdk-vpc-modify
 [~] ALIYUN::ECS::VSwitch vsw-from-ros-cdk/vsw-from-ros-cdk vsw-from-ros-cdk 
  └─ [~] VSwitchName
      ├─ [-] test-ros-cdk-vsw
      └─ [+] test-ros-cdk-vsw-modify

ros-cdk destroy

您可以使用destroy命令删除已创建的资源栈。您也可以根据需求指定以下命令:

  • --all:删除全部资源栈。

  • --quiet:静默删除资源栈(删除操作则无需再次确认)。

  • --sync:  使用同步方式删除资源栈。

ros-cdk destroy CdkDemoStack
ros-cdk destroy --all
ros-cdk destroy --quiet=true
ros-cdk destroy --sync=true

ros-cdk generate-stack-file

当工程的stack.info.json文件被删除或丢失时,您可以使用此方式在工程内同步生成stack.info.json文件。

--resource-group-id:查询指定资源组内的资源栈信息并同步生成stack.info.json文件。

 ros-cdk generate-stack-file   ✅ The generate stack info has completed!

ros-cdk config-set

在初始化工程之后,您可以使用config-set命令,非交互式地配置阿里云账号信息。常见的配置选项如下:

 [1] region(必选):指定资源栈所属的地域ID。
 [2] mode(必选):指定配置的凭证类型。目前主要支持AK、StsToken、RamRoleArn和EcsRamRole四种认证方式。
 [3] ak:指定您的AccessKey ID。
 [4] sk:指定您的AccessKey Secret。
 [5] sts-token:指定StsToken鉴权所需要的信息。
 [6] ram-role-arn:指定RamRoleArn鉴权所需要的信息。
 [7] role-session-name:指定您的RoleSessionName。
 [8] ram-role-name:指定绑定到您ECS实例上的角色。
 
 ros-cdk config-set --region cn-beijing --mode AK --ak LTAI5t884amF1U********** --sk hmwX2uq7kZ5mBw*************
 
  ✅ Your cdk configuration has been saved successfully!
说明

您可以使用ros-cdk CAMMAND --help查看更多命令参数。