全部产品
Search
文档中心

Resource Orchestration Service:Gunakan ROS CDK untuk Membuat Aplikasi Tingkat Pemula

更新时间:Jul 06, 2025

Topik ini menjelaskan cara menggunakan Cloud Development Toolkit (CDK) dari Resource Orchestration Service (ROS) dalam berbagai bahasa pemrograman. Topik ini mencakup pembuatan dan penghubungan virtual private cloud (VPC) serta vSwitch dari Alibaba Cloud.

Skenario

Jika Anda ingin membuat dan mengonfigurasi sumber daya menggunakan bahasa pemrograman yang sudah dikenal, Anda dapat menggunakan ROS CDK. ROS CDK membebaskan Anda dari sintaks kompleks template JSON dan YAML serta mengotomatiskan penyebaran dan pemeliharaan sumber daya. Untuk informasi lebih lanjut, lihat Ikhtisar.

Bahasa pemrograman yang didukung

  • TypeScript

  • JavaScript

  • Java

  • Python

  • C#

  • Go

Prasyarat

  • Java: Java Development Kit (JDK) dan Maven dengan versi berikut digunakan:

    • JDK: JDK 8 atau lebih baru

    • Maven: Maven 3.6 atau lebih baru

  • Python: Python 3.7 atau lebih baru digunakan.

  • C#: .NET Core 3.1 terinstal di lingkungan lokal Anda. .NET SDK 5.0 atau lebih baru digunakan.

Langkah 1: Inisialisasi proyek

Setiap aplikasi ROS CDK harus dibuat dalam direktori proyek terpisah. Aplikasi tersebut menggunakan dependensi modul dalam direktori. Sebelum membuat aplikasi, Anda harus membuat direktori proyek dan menginisialisasinya.

Jalankan perintah berikut untuk membuat direktori proyek dan menginisialisasi proyek:

TypeScript

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

JavaScript

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

Java

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

Python

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

Jalankan perintah berikut untuk membuat lingkungan virtual yang dimiliki oleh proyek saat ini.

Anda harus menjalankan perintah karena lingkungan virtual diperlukan untuk menjalankan proyek Python.

python3 -m venv .venv

Jalankan perintah berikut untuk masuk ke lingkungan virtual:

source .venv/bin/activate

C#

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

Go

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

Langkah 2: Konfigurasikan kredensial Alibaba Cloud

  1. Jalankan perintah berikut untuk mengonfigurasi kredensial Alibaba Cloud:

    ros-cdk config
  2. Ikuti petunjuk di layar untuk mengonfigurasi parameter kredensial.

    endpoint(opsional, default:https://ros.aliyuncs.com):
    defaultRegionId(opsional, default:cn-hangzhou):cn-beijing
    
    [1] AK
    [2] StsToken
    [3] RamRoleArn
    [4] EcsRamRole
    [0] BATAL
    
    Mode otentikasi [1...4 / 0]: 1
    accessKeyId:************************
    accessKeySecret:******************************
    
     ✅ Konfigurasi cdk Anda telah berhasil disimpan!

    Deskripsi parameter:

    • endpoint: titik akhir ROS. Nilai default: https://ros.aliyuncs.com.

    • defaultRegionId: ID wilayah tempat Anda ingin menyebarkan tumpukan ROS. Nilai default: cn-hangzhou.

    • Mode otentikasi: metode otentikasi. Dalam contoh ini, sepasang AccessKey digunakan untuk otentikasi. Dalam hal ini, Anda harus menentukan ID AccessKey dan rahasia AccessKey. Untuk informasi lebih lanjut tentang cara mendapatkan sepasang AccessKey, lihat Konfigurasikan Kredensial dalam Mode Interaktif (Cepat).

Langkah 3: (Opsional) Pratinjau struktur proyek

Jalankan perintah berikut untuk melihat pratinjau struktur proyek:

tree .

Keluaran perintah:

TypeScript

.
├── README.md
├── bin
│   └── demo.ts
├── cdk.json
├── jest.config.js
├── lib
│   └── demo-stack.ts
├── package.json
├── test
│   └── demo.test.ts
└── tsconfig.json

4 direktori, 8 file

Berikut adalah deskripsi struktur proyek:

  • bin/demo.ts: file peluncuran proyek.

    Catatan

    Sebuah proyek hanya dapat berisi satu aplikasi.

    Dalam contoh ini, aplikasi bertipe ros.App dan tumpukan bernama DemoStack bertipe DemoStack dibuat. Tumpukan ditambahkan ke aplikasi. File demo.ts berisi konten berikut:

    #!/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');
    app.synth();
  • lib/demo-stack.ts: file definisi tumpukan.

    Anda dapat menambahkan sumber daya ke tumpukan untuk secara dinamis membuat tumpukan. Dalam kode yang dihasilkan saat proyek diinisialisasi, file ini hanya memberikan deskripsi tumpukan. File demo-stack.ts berisi konten berikut:

    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, "Ini adalah contoh aplikasi ros cdk sederhana.");
        // Kode yang mendefinisikan tumpukan Anda ada di sini
      }
    }
    
  • test/demo.test.ts: file pengujian unit.

    File ini digunakan untuk memeriksa apakah tumpukan dibuat berdasarkan logika yang diharapkan. File demo.test.ts berisi konten berikut:

    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('Tumpukan dengan versi.', () => {
      const app = new ros.App();
      // WHEN
      const stack = new Demo.DemoStack(app, 'MyTestStack');
      // THEN
      expectCDK(stack).to(
        matchTemplate(
          {
            ROSTemplateFormatVersion: '2015-09-01',
            Description: "Ini adalah contoh aplikasi ros cdk sederhana.",
            Metadata: {
                "ALIYUN::ROS::Interface": {
                    "TemplateTags" : [
                        "Dibuat oleh ROS CDK"
                    ]
                }
            }
          },
          MatchStyle.EXACT,
        ),
      );
    });
    

JavaScript

.
├── README.md
├── bin
│   └── demo.js
├── cdk.json
├── jest.config.js
├── lib
│   └── demo-stack.js
├── package.json
└── test
    └── demo.test.js

4 direktori, 7 file

Berikut adalah deskripsi struktur proyek:

  • bin/demo.js: file peluncuran proyek.

    Catatan

    Sebuah proyek hanya dapat berisi satu aplikasi.

    Dalam contoh ini, aplikasi bertipe ros.App dan tumpukan bernama DemoStack bertipe DemoStack dibuat. Tumpukan ditambahkan ke aplikasi. File demo.js berisi konten berikut:

    #!/usr/bin/env node
    
    const ros = require('@alicloud/ros-cdk-core');
    const { DemoStack } = require('../lib/demo-stack');
    
    const app = new ros.App();
    new DemoStack(app, 'DemoStack');
    app.synth();
    
  • lib/demo-stack.js: file definisi tumpukan.

    Anda dapat menambahkan sumber daya ke tumpukan untuk secara dinamis membuat tumpukan. Dalam kode yang dihasilkan saat proyek diinisialisasi, file ini hanya memberikan deskripsi tumpukan. File demo-stack.js berisi konten berikut:

    const ros = require('@alicloud/ros-cdk-core');
    
    class DemoStack extends ros.Stack {
      /**
       *
       * @param {ros.Construct} scope
       * @param {string} id
       * @param {ros.StackProps} props
       */
      constructor(scope, id, props) {
        super(scope, id, props);
        new ros.RosInfo(this, ros.RosInfo.description, "Ini adalah contoh aplikasi ros cdk sederhana.");
        // Kode yang mendefinisikan tumpukan Anda ada di sini
      }
    }
    
    module.exports = { DemoStack }
    
  • test/demo.test.js: file pengujian unit.

    File ini digunakan untuk memeriksa apakah tumpukan dibuat berdasarkan logika yang diharapkan. File demo.test.js berisi konten berikut:

    const { expect, matchTemplate, MatchStyle } = require('@alicloud/ros-cdk-assert');
    const ros = require('@alicloud/ros-cdk-core');
    const Demo = require('../lib/demo-stack');
    
    test('Tumpukan dengan versi.', () => {
        const app = new ros.App();
        // WHEN
        const stack = new Demo.DemoStack(app, 'MyTestStack');
        // THEN
        expect(stack).to(matchTemplate({
            ROSTemplateFormatVersion: '2015-09-01',
            Description: "Ini adalah contoh aplikasi ros cdk sederhana.",
            Metadata: {
                "ALIYUN::ROS::Interface": {
                    "TemplateTags" : [
                        "Dibuat oleh ROS CDK"
                    ]
                }
            }
        }, MatchStyle.EXACT))
    });
    

Java

.
├── README.md
├── cdk.json
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── myorg
    │               ├── DemoApp.java
    │               └── DemoStack.java
    └── test
        └── java
            └── com
                └── myorg
                    └── DemoTest.java

10 direktori, 6 file

Berikut adalah deskripsi struktur proyek:

  • src/main/java/com/myorg/DemoApp.java: file peluncuran proyek.

    Catatan

    Sebuah proyek hanya dapat berisi satu aplikasi.

    Dalam contoh ini, aplikasi bertipe App dan tumpukan bernama DemoStack bertipe DemoStack dibuat. Tumpukan ditambahkan ke aplikasi. File DemoApp.java berisi konten berikut:

    package com.myorg;
    
    import com.aliyun.ros.cdk.core.*;
    
    import java.util.Arrays;
    
    public class DemoApp {
        public static void main(final String[] args) {
            App app = new App();
    
            new DemoStack(app, "DemoStack");
    
            app.synth();
        }
    }
    
  • src/main/java/com/myorg/DemoStack.java: file definisi tumpukan.

    Anda dapat menambahkan sumber daya ke tumpukan untuk secara dinamis membuat tumpukan. Dalam kode yang dihasilkan saat proyek diinisialisasi, file ini hanya memberikan deskripsi tumpukan. File DemoStack.java berisi konten berikut:

    package com.myorg;
    
    import com.aliyun.ros.cdk.core.*;
    
    public class DemoStack extends Stack {
        public DemoStack(final Construct scope, final String id) {
            this(scope, id, null);
        }
    
        public DemoStack(final Construct scope, final String id, final StackProps props) {
            super(scope, id, props);
    
            // Kode yang mendefinisikan tumpukan Anda ada di sini
        }
    }
    
  • src/test/java/com/myorg/DemoTest.java: file pengujian unit.

    File ini digunakan untuk memeriksa apakah tumpukan dibuat berdasarkan logika yang diharapkan. File DemoTest.java berisi konten berikut:

    package com.myorg;
    
    import com.aliyun.ros.cdk.core.*;
    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializationFeature;
    import com.fasterxml.jackson.databind.node.ObjectNode;
    import org.junit.Test;
    import com.fasterxml.jackson.databind.node.ArrayNode;
    
    import java.io.IOException;
    
    import static org.junit.Assert.assertEquals;
    
    public class DemoTest {
        private final static ObjectMapper JSON =
            new ObjectMapper().configure(SerializationFeature.INDENT_OUTPUT, true);
    
        @Test
        public void testStack() throws IOException {
            App app = new App();
            DemoStack stack = new DemoStack(app, "test");
    
            // Sintesis tumpukan ke template ROS dan bandingkan dengan
            // file JSON yang dicheck-in.
            JsonNode actual = JSON.valueToTree(app.synth().getStackArtifact(stack.getArtifactId()).getTemplate());
            ObjectNode expected = new ObjectMapper().createObjectNode();
            expected.put("ROSTemplateFormatVersion", "2015-09-01");
            ObjectNode metadata = expected.putObject("Metadata");
            ObjectNode rosInterface = metadata.putObject("ALIYUN::ROS::Interface");
            ArrayNode templateTags = rosInterface.putArray("TemplateTags");
            templateTags.add("Dibuat oleh ROS CDK");
            assertEquals(expected, actual);
        }
    }
    

Python

.
├── README.md
├── app.py
├── cdk.json
├── demo
│   ├── __init__.py
│   └── demo_stack.py
├── requirements.txt
├── setup.py
├── source.bat
└── test
    ├── __init__.py
    └── test_demo.py

3 direktori, 10 file

Berikut adalah deskripsi struktur proyek:

  • app.py: file peluncuran proyek.

    Catatan

    Sebuah proyek hanya dapat berisi satu aplikasi.

    Dalam contoh ini, aplikasi bertipe core.App dan tumpukan bernama demo bertipe DemoStack dibuat. Tumpukan ditambahkan ke aplikasi. File app.py berisi konten berikut:

    #!/usr/bin/env python3
    
    import ros_cdk_core as core
    
    from demo.demo_stack import DemoStack
    
    
    app = core.App()
    
    DemoStack(app, "demo")
    
    app.synth()
    
  • demo/demo_stack.py: file definisi tumpukan.

    Anda dapat menambahkan sumber daya ke tumpukan untuk secara dinamis membuat tumpukan. Dalam kode yang dihasilkan saat proyek diinisialisasi, file ini hanya memberikan deskripsi tumpukan. File demo_stack.py berisi konten berikut:

    import ros_cdk_core as core
    
    
    class DemoStack(core.Stack):
    
        def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None:
            super().__init__(scope, construct_id, **kwargs)
    
            # Kode yang mendefinisikan tumpukan Anda ada di sini
    
  • test/test_demo.py: file pengujian unit.

    File ini digunakan untuk memeriksa apakah tumpukan dibuat berdasarkan logika yang diharapkan. File test_demo.py berisi konten berikut:

    #!/usr/bin/env python3
    import unittest
    import ros_cdk_core as core
    from demo.demo_stack import DemoStack
    
    
    class TestStack(unittest.TestCase):
        def setUp(self):
            pass
    
        def test_stack(self):
            app = core.App()
            stack = DemoStack(app, "testdemo")
            artifact = app.synth().get_stack_artifact(stack.artifact_id).template
            expect = {
                       "Metadata": {
                         "ALIYUN::ROS::Interface": {
                           "TemplateTags": [
                             "Dibuat oleh ROS CDK"
                           ]
                         }
                       },
                       "ROSTemplateFormatVersion": "2015-09-01"
                     }
            self.assertDictContainsSubset(artifact, expect)
    
        def tearDown(self):
            pass
    
    
    if __name__ == '__main__':
        unittest.main()

C#

.
├── README.md
├── cdk.json
├── global.sln
└── src
    ├── Demo
    │   ├── Demo.csproj
    │   ├── DemoStack.cs
    │   ├── GlobalSuppressions.cs
    │   └── Program.cs
    └── DemoTest
        ├── DemoTest.cs
        └── DemoTest.csproj

4 direktori, 9 file

Setelah proyek diinisialisasi, file aplikasi bernama Program.cs dan file tumpukan bernama DemoStack.cs secara otomatis dibuat. Anda dapat secara dinamis membuat tumpukan menggunakan kode kustom di file DemoStack.cs. Tumpukan secara otomatis ditambahkan ke aplikasi. Sebuah proyek hanya dapat berisi satu aplikasi. Berikut adalah deskripsi struktur proyek:

  • src/Demo/DemoStack.cs: file tumpukan.

    Dalam kode yang dihasilkan saat proyek diinisialisasi, file ini hanya memberikan deskripsi tumpukan. File DemoStack.cs berisi konten berikut:

    using AlibabaCloud.SDK.ROS.CDK.Core;
    
    namespace Demo
    {
        public class DemoStack : Stack
        {
            public DemoStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
            {
                // Kode yang mendefinisikan tumpukan Anda ada di sini
            }
        }
    }
    
  • src/Demo/Program.cs: file aplikasi.

    Anda dapat menambahkan tumpukan ke aplikasi. File Program.cs berisi konten berikut:

    using AlibabaCloud.SDK.ROS.CDK.Core;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace Demo
    {
        sealed class Program
        {
            public static void Main(string[] args)
            {
                var app = new App();
                new DemoStack(app, "DemoStack");
                app.Synth();
            }
        }
    }
    
  • src/DemoTest/DemoTest.cs: file untuk pengujian unit.

    File ini digunakan untuk memeriksa apakah tumpukan dibuat berdasarkan logika yang diharapkan. File DemoTest.cs berisi konten berikut:

    using AlibabaCloud.SDK.ROS.CDK.Core;
    using NUnit.Framework;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using Demo;
    
    namespace Stack.UnitTests.Services
    {
        [TestFixture]
        public class Stack_IsStackShould
        {
            [Test]
            public void DemoStack_IsStackShould()
            {
                var app = new App();
                var testStack = new DemoStack(app, "TestStack");
                var result = app.Synth().GetStackArtifact(testStack.ArtifactId).Template;
                var actualJson = JsonConvert.SerializeObject(result);
                JObject obj = new JObject();
                JObject metadata = new JObject();
                JObject rosInterface = new JObject();
                JArray templateTags = new JArray();
                metadata.Add("ALIYUN::ROS::Interface", rosInterface);
                rosInterface.Add("TemplateTags", templateTags);
                templateTags.Add("Dibuat oleh ROS CDK");
                obj.Add("Metadata", metadata);
                obj.Add("ROSTemplateFormatVersion", "2015-09-01");
                var expected = JsonConvert.SerializeObject(obj);
                Assert.AreEqual(actualJson, expected);
            }
        }
    }
    

Go

.
├── README.md
├── cdk.json
├── demo.go
├── demo_test.go
└── go.mod

1 direktori, 5 file

Berikut adalah deskripsi struktur proyek:

  • demo.go: file peluncuran proyek, juga merupakan file definisi tumpukan.

    Catatan

    Sebuah proyek hanya dapat berisi satu aplikasi.

    Dalam contoh ini, aplikasi bertipe ros.App dan tumpukan bernama NewDemoStack dibuat. Tumpukan ditambahkan ke aplikasi.

    package main
    
    import (
    	"github.com/alibabacloud-go/ros-cdk/alicloudroscdkcore"
    )
    
    type demoStackProps struct {
    	alicloudroscdkcore.StackProps
    }
    
    func NewdemoStack(scope alicloudroscdkcore.Construct, id string, props *demoStackProps) alicloudroscdkcore.Stack {
    	var sprops alicloudroscdkcore.StackProps
    	if props != nil {
    		sprops = props.StackProps
    	}
    	stack := alicloudroscdkcore.NewStack(scope, &id, &sprops)
    
    	// Kode yang mendefinisikan tumpukan Anda ada di sini
    
    	return stack
    }
    
    func main() {
    	app := alicloudroscdkcore.NewApp(nil)
    	props := &demoStackProps{}
    
    	NewdemoStack(app, "demoStack", props)
    
    	app.Synth(nil)
    }
    
  • demo_test.go: file pengujian unit.

    File ini digunakan untuk memeriksa apakah tumpukan dibuat sesuai logika yang diharapkan. File demo_test.go berisi konten berikut:

    package main
    
    import (
    	"github.com/alibabacloud-go/ros-cdk/alicloudroscdkcore"
    	"github.com/stretchr/testify/assert"
    	"testing"
    )
    
    func TestNewdemoStack(t *testing.T) {
    	app := alicloudroscdkcore.NewApp(nil)
    	props := &demoStackProps{}
    	stack := NewdemoStack(app, "myTestStack", props)
    
    	artifact := app.Synth(nil).GetStackArtifact(stack.ArtifactId()).Template()
    	expect := map[string]interface{}{
    		"Metadata": map[string]interface{}{
    			"ALIYUN::ROS::Interface": map[string]interface{}{
    				"TemplateTags": []interface{}{"Dibuat oleh ROS CDK"},
    			},
    		},
    		"ROSTemplateFormatVersion": "2015-09-01",
    	}
    	assert.Equal(t, expect, artifact)
    }
    

Langkah 4: Instal dependensi

  1. Tambahkan paket dependensi Elastic Compute Service (ECS).

    TypeScript

    Modifikasi file package.json.

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

    JavaScript

    Modifikasi file package.json.

    {
      "name": "demo",
      "version": "0.1.0",
      "bin": {
        "demo": "bin/demo.js"
      },
      "scripts": {
        "build": "echo \"Langkah build tidak diperlukan saat menggunakan JavaScript!\" && exit 0",
        "cdk": "cdk",
        "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"
      }
    }

    Java

    Modifikasi file pom.xml.

    <?xml version="1.0" encoding="UTF-8"?>
    <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
             xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.myorg</groupId>
        <artifactId>demo</artifactId>
        <version>0.1</version>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <cdk.version>1.4.0</cdk.version>
        </properties>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
    
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.6.0</version>
                    <configuration>
                        <mainClass>com.myorg.DemoApp</mainClass>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
        <dependencies>
            <!-- AliCloud ROS Cloud Development Kit (ROS CDK) -->
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>ros-cdk-core</artifactId>
                <version>1.4.0</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>ros-cdk-ecs</artifactId>
                <version>1.4.0</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/junit/junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
    

    Python

    Modifikasi file requirements.txt.

    ros-cdk-core==1.4.0
    ros-cdk-ecs==1.4.0

    C#

    Modifikasi file src/Demo/Demo.csproj.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <!-- Roll forward to future major versions of the netcoreapp as needed -->
        <RollForward>Major</RollForward>
      </PropertyGroup>
    
      <ItemGroup>
        <!-- CDK Construct Library dependencies -->
        <PackageReference Include="AlibabaCloud.SDK.ROS.CDK.Core" Version="1.4.0" />
        <PackageReference Include="AlibabaCloud.SDK.ROS.CDK.Ecs" Version="1.4.0" />
    
    
        <!-- jsii Roslyn analyzers (un-comment to obtain compile-time checks for missing required props
        <PackageReference Include="Amazon.Jsii.Analyzers" Version="*" PrivateAssets="all" />
        -->
    
      </ItemGroup>
    
    </Project>
    

    Go

    Modifikasi file go.mod.

    module demo
    
    go 1.18
    
    require (
        github.com/alibabacloud-go/ros-cdk/alicloudroscdkcore v1.4.0
        github.com/alibabacloud-go/ros-cdk/alicloudroscdkecs v1.4.0
        github.com/stretchr/testify v1.8.4
    )
  2. Instal dependensi.

    TypeScript

    npm install

    JavaScript

    npm install

    Java

    mvn compile

    Python

    • Metode 1:

      pip install -r requirements.txt
    • Metode 2:

      pip install ros-cdk-core ros-cdk-ecs

    C#

    Catatan

    Untuk bahasa pemrograman C#, tidak diperlukan instalasi dependensi melalui perintah.

    Go

    go get

Langkah 5: Tambahkan sumber daya

  1. Tambahkan VPC dan vSwitch.

    TypeScript

    Modifikasi file 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, "Ini adalah contoh aplikasi ros cdk sederhana.");
        // Kode yang mendefinisikan tumpukan Anda ada di sini
    
        const vpc = new ecs.Vpc(this, 'vpc-from-ros-cdk', {
          vpcName: 'test-ros-cdk',
          cidrBlock: '10.0.0.0/8',
          description: 'Ini adalah tes ros cdk'
        });
    
        new ecs.VSwitch(this, 'vsw-from-ros-cdk', {
          vSwitchName: 'test-ros-cdk',
          cidrBlock: '10.0.0.0/16',
          zoneId: 'cn-hangzhou-i',
          vpcId: vpc.ref
        });
      }
    }
    

    JavaScript

    Modifikasi file lib/demo-stack.js.

    const ros = require('@alicloud/ros-cdk-core');
    const ecs = require('@alicloud/ros-cdk-ecs');
    
    class DemoStack extends ros.Stack {
      /**
       *
       * @param {ros.Construct} scope
       * @param {string} id
       * @param {ros.StackProps} props
       */
      constructor(scope, id, props) {
        super(scope, id, props);
        new ros.RosInfo(this, ros.RosInfo.description, "Ini adalah contoh aplikasi ros cdk sederhana.");
        // Kode yang mendefinisikan tumpukan Anda ada di sini
        const vpc = new ecs.Vpc(this, 'vpc-from-ros-cdk', {
          vpcName: 'test-ros-cdk-javascript',
          cidrBlock: '10.0.0.0/8',
          description: 'Ini adalah tes ros cdk',
        });
    
        new ecs.VSwitch(this, 'vsw-from-ros-cdk', {
          vSwitchName: 'test-ros-cdk-javascript',
          cidrBlock: '10.0.0.0/16',
          zoneId: 'cn-hangzhou-i',
          vpcId: vpc.ref,
        });
      }
    }
    
    module.exports = { DemoStack }
    

    Java

    Modifikasi file DemoStack.java.

    package com.myorg;
    
    import com.aliyun.ros.cdk.core.*;
    import com.aliyun.ros.cdk.ecs.*;
    
    public class DemoStack extends Stack {
        public DemoStack(final Construct scope, final String id) {
            this(scope, id, null);
        }
    
        public DemoStack(final Construct scope, final String id, final StackProps props) {
            super(scope, id, props);
    
            // Kode yang mendefinisikan tumpukan Anda ada di sini
    
            Vpc vpc = Vpc.Builder.create(this, "vpc-from-ros-cdk").vpcName("TestJavaCDK").description("Ini adalah tes ros java cdk.").
                    cidrBlock("10.0.0.0/8").build();
    
            VSwitch vsw = VSwitch.Builder.create(this, "vsw-from-ros-cdk").vSwitchName("TestJavaCDK").zoneId("cn-hangzhou-i").
                    cidrBlock("10.0.0.0/16").vpcId(vpc.getRef()).build();
        }
    }

    Python

    Modifikasi file demo_stack.py.

    import ros_cdk_core as core
    import ros_cdk_ecs as ecs
    
    
    class DemoStack(core.Stack):
    
        def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None:
            super().__init__(scope, construct_id, **kwargs)
    
            # Kode yang mendefinisikan tumpukan Anda ada di sini
            vpc = ecs.Vpc(self, "MyVPC", ecs.VPCProps(
                cidr_block='10.0.0.0/8',
                vpc_name='test-ros-cdk-python',
                description='Ini adalah tes ros python cdk'
            ))
    
            ecs.VSwitch(self, "MyVSwitch", ecs.VSwitchProps(
                cidr_block='10.0.0.0/16',
                v_switch_name='test-ros-cdk-python',
                zone_id='cn-hangzhou-i',
                vpc_id=vpc.ref
            ))

    C#

    Modifikasi file DemoStack.cs.

    using AlibabaCloud.SDK.ROS.CDK.Core;
    using AlibabaCloud.SDK.ROS.CDK.Ecs;
    
    namespace Demo
    {
        public class DemoStack : Stack
        {
            public DemoStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
            {
                var vpc = new Vpc(this, "vpc-from-ros-cdk", new VPCProps
                {
                    VpcName = "test-ros-cdk-csharp",
                    CidrBlock = "10.0.0.0/8",
                    Description = "Ini adalah tes ros cdk"
                });
    
                new VSwitch(this, "vsw-from-ros-cdk", new VSwitchProps
                {
                    VSwitchName = "test-ros-cdk-csharp",
                    CidrBlock = "10.0.0.0/16",
                    ZoneId="cn-hangzhou-i",
                    VpcId=vpc.Ref,
                });
            }
        }
    }

    Go

    Ganti isi file demo.go dengan kode berikut:

    package main
    
    import (
    	"github.com/alibabacloud-go/ros-cdk/alicloudroscdkcore"
    	"github.com/alibabacloud-go/ros-cdk/alicloudroscdkecs"
    )
    
    type demoStackProps struct {
    	alicloudroscdkcore.StackProps
    }
    
    func NewdemoStack(scope alicloudroscdkcore.Construct, id string, props *demoStackProps) alicloudroscdkcore.Stack {
    	var sprops alicloudroscdkcore.StackProps
    	if props != nil {
    		sprops = props.StackProps
    	}
    	stack := alicloudroscdkcore.NewStack(scope, &id, &sprops)
    
    	// Kode yang mendefinisikan tumpukan Anda ada di sini
    	vpcKey := "Vpc"
    	vpcProps := alicloudroscdkecs.VPCProps{CidrBlock: "10.0.0.0/8"}
    	vpc := alicloudroscdkecs.NewVpc(stack, &vpcKey, &vpcProps, nil)
    
    	vswKey := "VSwitch"
    	vswProps := alicloudroscdkecs.VSwitchProps{
    		CidrBlock: "10.0.0.0/16",
    		ZoneId:    "cn-hangzhou-i",
    		VpcId:     vpc.Ref(),
    	}
    	alicloudroscdkecs.NewVSwitch(stack, &vswKey, &vswProps, nil)
    
    	return stack
    }
    
    func main() {
    	app := alicloudroscdkcore.NewApp(nil)
    	props := &demoStackProps{}
    
    	NewdemoStack(app, "demoStack", props)
    
    	app.Synth(nil)
    }
    
  2. (Opsional) Hasilkan file template.

    TypeScript

    ros-cdk synth --json

    JavaScript

    ros-cdk synth --json

    Java

    mvn compile
    ros-cdk synth --json

    Python

    ros-cdk synth --json

    C#

    ros-cdk synth --json

    Go

    go get
    ros-cdk synth --json

    Keluaran perintah:

    TypeScript

    {
      "Description": "Ini adalah contoh aplikasi ros cdk sederhana.",
      "Metadata": {
        "ALIYUN::ROS::Interface": {
          "TemplateTags": [
            "Dibuat oleh ROS CDK"
          ]
        }
      },
      "ROSTemplateFormatVersion": "2015-09-01",
      "Resources": {
        "vpc-from-ros-cdk": {
          "Type": "ALIYUN::ECS::VPC",
          "Properties": {
            "CidrBlock": "10.0.0.0/8",
            "Description": "Ini adalah tes ros cdk",
            "EnableIpv6": false,
            "VpcName": "test-ros-cdk"
          }
        },
        "vsw-from-ros-cdk": {
          "Type": "ALIYUN::ECS::VSwitch",
          "Properties": {
            "CidrBlock": "10.0.0.0/16",
            "VpcId": {
              "Ref": "vpc-from-ros-cdk"
            },
            "ZoneId": "cn-hangzhou-i",
            "VSwitchName": "test-ros-cdk"
          }
        }
      }
    }

    JavaScript

    {
      "Description": "Ini adalah contoh aplikasi ros cdk sederhana.",
      "Metadata": {
        "ALIYUN::ROS::Interface": {
          "TemplateTags": [
            "Dibuat oleh ROS CDK"
          ]
        }
      },
      "ROSTemplateFormatVersion": "2015-09-01",
      "Resources": {
        "vpc-from-ros-cdk": {
          "Type": "ALIYUN::ECS::VPC",
          "Properties": {
            "CidrBlock": "10.0.0.0/8",
            "Description": "Ini adalah tes ros cdk",
            "EnableIpv6": false,
            "VpcName": "test-ros-cdk-javascript"
          }
        },
        "vsw-from-ros-cdk": {
          "Type": "ALIYUN::ECS::VSwitch",
          "Properties": {
            "CidrBlock": "10.0.0.0/16",
            "VpcId": {
              "Ref": "vpc-from-ros-cdk"
            },
            "ZoneId": "cn-hangzhou-i",
            "VSwitchName": "test-ros-cdk-javascript"
          }
        }
      }
    }

    Java

    {
      "Metadata": {
        "ALIYUN::ROS::Interface": {
          "TemplateTags": [
            "Dibuat oleh ROS CDK"
          ]
        }
      },
      "ROSTemplateFormatVersion": "2015-09-01",
      "Resources": {
        "vpc-from-ros-cdk": {
          "Type": "ALIYUN::ECS::VPC",
          "Properties": {
            "CidrBlock": "10.0.0.0/8",
            "Description": "Ini adalah tes ros java cdk",
            "EnableIpv6": false,
            "VpcName": "TestJavaCDK"
          }
        },
        "vsw-from-ros-cdk": {
          "Type": "ALIYUN::ECS::VSwitch",
          "Properties": {
            "CidrBlock": "10.0.0.0/16",
            "VpcId": {
              "Ref": "vpc-from-ros-cdk"
            },
            "ZoneId": "cn-hangzhou-i",
            "VSwitchName": "TestJavaCDK"
          }
        }
      }
    }

    Python

    {
      "Metadata": {
        "ALIYUN::ROS::Interface": {
          "TemplateTags": [
            "Dibuat oleh ROS CDK"
          ]
        }
      },
      "ROSTemplateFormatVersion": "2015-09-01",
      "Resources": {
        "vpc-from-ros-cdk": {
          "Type": "ALIYUN::ECS::VPC",
          "Properties": {
            "CidrBlock": "10.0.0.0/8",
            "Description": "Ini adalah tes ros java cdk",
            "EnableIpv6": false,
            "VpcName": "TestJavaCDK"
          }
        },
        "vsw-from-ros-cdk": {
          "Type": "ALIYUN::ECS::VSwitch",
          "Properties": {
            "CidrBlock": "10.0.0.0/16",
            "VpcId": {
              "Ref": "vpc-from-ros-cdk"
            },
            "ZoneId": "cn-hangzhou-i",
            "VSwitchName": "TestJavaCDK"
          }
        }
      }
    }

    C#

    {
      "Metadata": {
        "ALIYUN::ROS::Interface": {
          "TemplateTags": [
            "Dibuat oleh ROS CDK"
          ]
        }
      },
      "ROSTemplateFormatVersion": "2015-09-01",
      "Resources": {
        "vpc-from-ros-cdk": {
          "Type": "ALIYUN::ECS::VPC",
          "Properties": {
            "CidrBlock": "10.0.0.0/8",
            "Description": "Ini adalah tes ros cdk",
            "EnableIpv6": false,
            "VpcName": "test-ros-cdk-csharp"
          }
        },
        "vsw-from-ros-cdk": {
          "Type": "ALIYUN::ECS::VSwitch",
          "Properties": {
            "CidrBlock": "10.0.0.0/16",
            "VpcId": {
              "Ref": "vpc-from-ros-cdk"
            },
            "ZoneId": "cn-hangzhou-i",
            "VSwitchName": "test-ros-cdk-csharp"
          }
        }
      }
    }

    Go

    {
      "Metadata": {
        "ALIYUN::ROS::Interface": {
          "TemplateTags": [
            "Dibuat oleh ROS CDK"
          ]
        }
      },
      "ROSTemplateFormatVersion": "2015-09-01",
      "Resources": {
        "Vpc": {
          "Type": "ALIYUN::ECS::VPC",
          "Properties": {
            "CidrBlock": "10.0.0.0/8",
            "EnableIpv6": false
          }
        },
        "VSwitch": {
          "Type": "ALIYUN::ECS::VSwitch",
          "Properties": {
            "CidrBlock": "10.0.0.0/16",
            "VpcId": {
              "Ref": "Vpc"
            },
            "ZoneId": "cn-hangzhou-i"
          }
        }
      }
    }

Langkah 6: (Opsional) Lakukan pengujian unit

  1. Periksa apakah VPC dan vSwitch dapat dibuat dalam tumpukan.

    TypeScript

    Modifikasi file 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('Tumpukan dengan versi.', () => {
      const app = new ros.App();
      // WHEN
      const stack = new Demo.DemoStack(app, 'MyTestStack');
      // THEN
      expectCDK(stack).to(
        matchTemplate(
          {
            "Description": "Ini adalah contoh aplikasi ros cdk sederhana.",
            "Metadata": {
              "ALIYUN::ROS::Interface": {
                "TemplateTags": [
                  "Dibuat oleh ROS CDK"
                ]
              }
            },
            "ROSTemplateFormatVersion": "2015-09-01",
            "Resources": {
              "vpc-from-ros-cdk": {
                "Type": "ALIYUN::ECS::VPC",
                "Properties": {
                  "CidrBlock": "10.0.0.0/8",
                  "Description": "Ini adalah tes ros cdk",
                  "EnableIpv6": false,
                  "VpcName": "test-ros-cdk"
                }
              },
              "vsw-from-ros-cdk": {
                "Type": "ALIYUN::ECS::VSwitch",
                "Properties": {
                  "CidrBlock": "10.0.0.0/16",
                  "VpcId": {
                    "Ref": "vpc-from-ros-cdk"
                  },
                  "ZoneId": "cn-hangzhou-i",
                  "VSwitchName": "test-ros-cdk"
                }
              }
            }
          },
          MatchStyle.EXACT,
        ),
      );
    });
    

    JavaScript

    Modifikasi file demo.test.js.

    const { expect, matchTemplate, MatchStyle } = require('@alicloud/ros-cdk-assert');
    const ros = require('@alicloud/ros-cdk-core');
    const Demo = require('../lib/demo-stack');
    
    test('Tumpukan dengan versi.', () => {
        const app = new ros.App();
        // WHEN
        const stack = new Demo.DemoStack(app, 'MyTestStack');
        // THEN
        expect(stack).to(matchTemplate({
            "Description": "Ini adalah contoh aplikasi ros cdk sederhana.",
            "Metadata": {
              "ALIYUN::ROS::Interface": {
                "TemplateTags": [
                  "Dibuat oleh ROS CDK"
                ]
              }
            },
            "ROSTemplateFormatVersion": "2015-09-01",
            "Resources": {
              "vpc-from-ros-cdk": {
                "Type": "ALIYUN::ECS::VPC",
                "Properties": {
                  "CidrBlock": "10.0.0.0/8",
                  "Description": "Ini adalah tes ros cdk",
                  "EnableIpv6": false,
                  "VpcName": "test-ros-cdk-javascript"
                }
              },
              "vsw-from-ros-cdk": {
                "Type": "ALIYUN::ECS::VSwitch",
                "Properties": {
                  "CidrBlock": "10.0.0.0/16",
                  "VpcId": {
                    "Ref": "vpc-from-ros-cdk"
                  },
                  "ZoneId": "cn-hangzhou-i",
                  "VSwitchName": "test-ros-cdk-javascript"
                }
              }
            }
          }, MatchStyle.EXACT))
    });
    

    Java

    Modifikasi file DemoTest.java.

    package com.myorg;
    
    import com.aliyun.ros.cdk.core.*;
    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializationFeature;
    import com.fasterxml.jackson.databind.node.ObjectNode;
    import org.junit.Test;
    import com.fasterxml.jackson.databind.node.ArrayNode;
    
    import java.io.IOException;
    
    import static org.junit.Assert.assertEquals;
    
    public class DemoTest {
        private final static ObjectMapper JSON =
            new ObjectMapper().configure(SerializationFeature.INDENT_OUTPUT, true);
    
        @Test
        public void testStack() throws IOException {
            App app = new App();
            DemoStack stack = new DemoStack(app, "test");
    
            // sintesis tumpukan ke template ROS dan bandingkan dengan
            // file JSON yang dicheck-in.
            JsonNode actual = JSON.valueToTree(app.synth().getStackArtifact(stack.getArtifactId()).getTemplate());
            ObjectNode expected = new ObjectMapper().createObjectNode();
            expected.put("ROSTemplateFormatVersion", "2015-09-01");
            ObjectNode metadata = expected.putObject("Metadata");
            ObjectNode rosInterface = metadata.putObject("ALIYUN::ROS::Interface");
            ArrayNode templateTags = rosInterface.putArray("TemplateTags");
            templateTags.add("Dibuat oleh ROS CDK");
            ObjectNode resources = expected.putObject("Resources");
    
            ObjectNode vpc = resources.putObject("vpc-from-ros-cdk");
            vpc.put("Type","ALIYUN::ECS::VPC");
            ObjectNode vpcProperties = vpc.putObject("Properties");
            vpcProperties.put("CidrBlock","10.0.0.0/8");
            vpcProperties.put("Description","Ini adalah tes ros java cdk.");
            vpcProperties.put("EnableIpv6",false);
            vpcProperties.put("VpcName","TestJavaCDK");
    
            ObjectNode vsw = resources.putObject("vsw-from-ros-cdk");
            vsw.put("Type","ALIYUN::ECS::VSwitch");
            ObjectNode vswProperties = vsw.putObject("Properties");
            vswProperties.put("CidrBlock","10.0.0.0/16");
            ObjectNode vpcId = vswProperties.putObject("VpcId");
            vpcId.put("Ref","vpc-from-ros-cdk");
            vswProperties.put("ZoneId","cn-hangzhou-i");
            vswProperties.put("VSwitchName","TestJavaCDK");
    
            assertEquals(expected, actual);
        }
    }

    Python

    Modifikasi file test_demo.py.

    #!/usr/bin/env python3
    import unittest
    import ros_cdk_core as core
    from demo.demo_stack import DemoStack
    
    
    class TestStack(unittest.TestCase):
        def setUp(self):
            pass
    
        def test_stack(self):
            app = core.App()
            stack = DemoStack(app, "testdemo")
            artifact = app.synth().get_stack_artifact(stack.artifact_id).template
            expect = {
              "Metadata": {
                "ALIYUN::ROS::Interface": {
                  "TemplateTags": [
                    "Dibuat oleh ROS CDK"
                  ]
                }
              },
              "ROSTemplateFormatVersion": "2015-09-01",
              "Resources": {
                "MyVPC": {
                  "Type": "ALIYUN::ECS::VPC",
                  "Properties": {
                    "CidrBlock": "10.0.0.0/8",
                    "Description": "Ini adalah tes ros python cdk.",
                    "EnableIpv6": False,
                    "VpcName": "test-ros-cdk-python"
                  }
                },
                "MyVSwitch": {
                  "Type": "ALIYUN::ECS::VSwitch",
                  "Properties": {
                    "CidrBlock": "10.0.0.0/16",
                    "VpcId": {
                      "Ref": "MyVPC"
                    },
                    "ZoneId": "cn-hangzhou-i",
                    "VSwitchName": "test-ros-cdk-python"
                  }
                }
              }
            }
            self.assertDictContainsSubset(artifact, expect)
    
        def tearDown(self):
            pass
    
    
    if __name__ == '__main__':
        unittest.main()

    C#

    Modifikasi file DemoTest.cs.

    using AlibabaCloud.SDK.ROS.CDK.Core;
    using NUnit.Framework;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using Demo;
    
    namespace Stack.UnitTests.Services
    {
        [TestFixture]
        public class Stack_IsStackShould
        {
            [Test]
            public void DemoStack_IsStackShould()
            {
                var app = new App();
                var testStack = new DemoStack(app, "TestStack");
                var result = app.Synth().GetStackArtifact(testStack.ArtifactId).Template;
                var actualJson = JsonConvert.SerializeObject(result);
                JObject obj = new JObject();
                JObject Resources = new JObject();
                JObject VPC = new JObject();
                JObject VSW = new JObject();
                JObject vpcProperties = new JObject();
                JObject vswProperties = new JObject();
                JObject metadata = new JObject();
                JObject rosInterface = new JObject();
                JArray templateTags = new JArray();
                JObject vpcId = new JObject();
                metadata.Add("ALIYUN::ROS::Interface", rosInterface);
                rosInterface.Add("TemplateTags", templateTags);
                templateTags.Add("Dibuat oleh ROS CDK");
                obj.Add("Metadata", metadata);
                VPC.Add("Type", "ALIYUN::ECS::VPC");
                VPC.Add("Properties", vpcProperties);
                Resources.Add("vpc-from-ros-cdk", VPC);
                vpcProperties.Add("CidrBlock", "10.0.0.0/8");
                vpcProperties.Add("Description", "Ini adalah tes ros cdk.");
                vpcProperties.Add("EnableIpv6", false);
                vpcProperties.Add("VpcName", "test-ros-cdk-csharp");
                VSW.Add("Type", "ALIYUN::ECS::VSwitch");
                VSW.Add("Properties", vswProperties);
                Resources.Add("vsw-from-ros-cdk", VSW);
                vswProperties.Add("CidrBlock", "10.0.0.0/16");
                vpcId.Add("Ref", "vpc-from-ros-cdk");
                vswProperties.Add("VpcId", vpcId);
                vswProperties.Add("ZoneId", "cn-hangzhou-i");
                vswProperties.Add("VSwitchName", "test-ros-cdk-csharp");
                obj.Add("ROSTemplateFormatVersion", "2015-09-01");
                obj.Add("Resources", Resources);
                var expected = JsonConvert.SerializeObject(obj);
                Assert.AreEqual(actualJson, expected);
            }
        }
    }

    Go

    Modifikasi file demo_test.go.

    package main
    
    import (
    	"github.com/alibabacloud-go/ros-cdk/alicloudroscdkcore"
    	"github.com/stretchr/testify/assert"
    	"testing"
    )
    
    func TestNewdemoStack(t *testing.T) {
    	app := alicloudroscdkcore.NewApp(nil)
    	props := &demoStackProps{}
    	stack := NewdemoStack(app, "myTestStack", props)
    
    	artifact := app.Synth(nil).GetStackArtifact(stack.ArtifactId()).Template()
    	expect := map[string]interface{}{
    		"Metadata": map[string]interface{}{
    			"ALIYUN::ROS::Interface": map[string]interface{}{
    				"TemplateTags": []interface{}{"Dibuat oleh ROS CDK"},
    			},
    		},
    		"ROSTemplateFormatVersion": "2015-09-01",
    		"Resources": map[string]interface{}{
    			"Vpc": map[string]interface{}{
    				"Type": "ALIYUN::ECS::VPC",
    				"Properties": map[string]interface{}{
    					"CidrBlock":  "10.0.0.0/8",
    					"EnableIpv6": false,
    				},
    			},
    			"VSwitch": map[string]interface{}{
    				"Type": "ALIYUN::ECS::VSwitch",
    				"Properties": map[string]interface{}{
    					"CidrBlock": "10.0.0.0/16",
    					"VpcId": map[string]interface{}{
    						"Ref": "Vpc",
    					},
    					"ZoneId": "cn-hangzhou-i",
    				},
    			},
    		},
    	}
    	assert.Equal(t, expect, artifact)
    }
    
  2. Lakukan pengujian unit.

    TypeScript

    npm test

    JavaScript

    npm test

    Java

    mvn test

    Python

    python -m unittest  -v

    C#

    dotnet test

    Go

    go get
    go test

    Keluaran perintah:

    TypeScript

    > demo@0.1.0 test
    > jest
    
     PASS  test/demo.test.ts
      ✓ Tumpukan dengan versi. (89ms)
    
    Test Suites: 1 passed, 1 total
    Tests:       1 passed, 1 total
    Snapshots:   0 total
    Time:        1.731s
    Ran all test suites.

    JavaScript

    > demo@0.1.0 test
    > jest
    
     PASS  test/demo.test.js
      ✓ Tumpukan dengan versi. (94ms)
    
    Test Suites: 1 passed, 1 total
    Tests:       1 passed, 1 total
    Snapshots:   0 total
    Time:        1.298s
    Ran all test suites.

    Java

    [INFO] -------------------------------------------------------
    [INFO]  T E S T S
    [INFO] -------------------------------------------------------
    [INFO] Running com.myorg.DemoTest
    [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.892 s -- in com.myorg.DemoTest
    [INFO] 
    [INFO] Results:
    [INFO] 
    [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
    [INFO] 
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  3.319 s
    [INFO] Finished at: 2024-03-26T14:20:08+08:00
    [INFO] ------------------------------------------------------------------------

    Python

    test_stack (test.test_demo.TestStack) ... ok
    
    ----------------------------------------------------------------------
    Ran 1 test in 0.021s
    
    OK

    C#

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern. 
    
    Passed!  - Failed:     0, Passed:     1, Skipped:     0, Total:     1, Duration: 1 s - DemoTest.dll (netcoreapp3.1)

    Go

    PASS
    ok  	demo	0.971s

Langkah 7: Sebarkan tumpukan

Anda dapat menjalankan perintah ROS CDK untuk membuat, menanyakan, dan menghapus tumpukan.

Jalankan perintah berikut untuk membuat tumpukan:

ros-cdk deploy --region cn-hangzhou

Output perintah:

✅ Penyebaran (membuat tumpukan) telah selesai!
StackId: 701ecf04-d758-457f-a0fc-7e00e2b6****

Langkah 8: (Opsional) Tanyakan tumpukan

Jalankan perintah berikut untuk memeriksa tumpukan:

ros-cdk list-stacks

Hasil keluaran perintah:

✅ Daftar Tumpukan di cn-hangzhou adalah:
 [
	{
		"Status": "CREATE_COMPLETE",
		"OperationInfo": {},
		"ResourceGroupId": "rg-acfm2xwmxvr****",
		"ServiceManaged": false,
		"StatusReason": "Penyebaran tumpukan berhasil diselesaikan",
		"CreateTime": "2024-03-25T06:02:10",
		"DeletionProtection": "Disabled",
		"StackType": "ROS",
		"RegionId": "cn-hangzhou",
		"DisableRollback": false,
		"StackName": "DemoStack",
		"Tags": [
			{
				"Value": "rg-acfm2xwmxvr****",
				"Key": "acs:rm:rgId"
			}
		],
		"TimeoutInMinutes": 20,
		"StackId": "701ecf04-d758-457f-a0fc-7e00e2b6****"
	}
] 

Langkah 9: (Opsional) Perbarui tumpukan

  1. Dalam contoh ini, deskripsi VPC diperbarui dan vSwitch dihapus.

    TypeScript

    Modifikasi file 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, "Ini adalah contoh aplikasi ros cdk sederhana.");
        // Kode yang mendefinisikan tumpukan Anda ada di sini
    
        const vpc = new ecs.Vpc(this, 'vpc-from-ros-cdk', {
          vpcName: 'test-ros-cdk',
          cidrBlock: '10.0.0.0/8',
          description: 'Tes pembaruan nama VPC menggunakan ros cdk.'
        });
      }
    }
    

    JavaScript

    Modifikasi file lib/demo-stack.js.

    const ros = require('@alicloud/ros-cdk-core');
    const ecs = require('@alicloud/ros-cdk-ecs');
    
    class DemoStack extends ros.Stack {
      /**
       *
       * @param {ros.Construct} scope
       * @param {string} id
       * @param {ros.StackProps} props
       */
      constructor(scope, id, props) {
        super(scope, id, props);
        new ros.RosInfo(this, ros.RosInfo.description, "Ini adalah contoh aplikasi ros cdk sederhana.");
        // Kode yang mendefinisikan tumpukan Anda ada di sini
        const vpc = new ecs.Vpc(this, 'vpc-from-ros-cdk', {
          vpcName: 'test-ros-cdk-javascript',
          cidrBlock: '10.0.0.0/8',
          description: 'Tes pembaruan nama VPC menggunakan ros cdk.',
        });
      }
    }
    
    module.exports = { DemoStack }
    

    Java

    Modifikasi file DemoStack.java.

    package com.myorg;
    
    import com.aliyun.ros.cdk.core.*;
    import com.aliyun.ros.cdk.ecs.*;
    
    public class DemoStack extends Stack {
        public DemoStack(final Construct scope, final String id) {
            this(scope, id, null);
        }
    
        public DemoStack(final Construct scope, final String id, final StackProps props) {
            super(scope, id, props);
    
            // Kode yang mendefinisikan tumpukan Anda ada di sini
    
            Vpc.Builder.create(this, "VPC").vpcName("TestJavaCDK").description("Tes pembaruan nama VPC menggunakan ros cdk.").
                    cidrBlock("10.0.0.0/8").build();
        }
    }

    Python

    Modifikasi file demo_stack.py.

    import ros_cdk_core as core
    import ros_cdk_ecs as ecs
    
    
    class DemoStack(core.Stack):
    
        def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None:
            super().__init__(scope, construct_id, **kwargs)
    
            # Kode yang mendefinisikan tumpukan Anda ada di sini
            vpc = ecs.Vpc(self, "MyVPC", ecs.VPCProps(
                cidr_block='10.0.0.0/8',
                vpc_name='test-ros-cdk-python',
                description='Tes pembaruan nama VPC menggunakan ros cdk.'
            ))

    C#

    Modifikasi file DemoStack.cs.

    using AlibabaCloud.SDK.ROS.CDK.Core;
    using AlibabaCloud.SDK.ROS.CDK.Ecs;
    
    namespace Demo
    {
        public class DemoStack : Stack
        {
            public DemoStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
            {
                var vpc = new Vpc(this, "vpc-from-ros-cdk", new VPCProps
                {
                    VpcName = "test-ros-cdk-csharp",
                    CidrBlock = "10.0.0.0/8",
                    Description = "Tes pembaruan nama VPC menggunakan ros cdk."
                });
            }
        }
    }

    Go

    package main
    
    import (
    	"github.com/alibabacloud-go/ros-cdk/alicloudroscdkcore"
    	"github.com/alibabacloud-go/ros-cdk/alicloudroscdkecs"
    )
    
    type demoStackProps struct {
    	alicloudroscdkcore.StackProps
    }
    
    func NewdemoStack(scope alicloudroscdkcore.Construct, id string, props *demoStackProps) alicloudroscdkcore.Stack {
    	var sprops alicloudroscdkcore.StackProps
    	if props != nil {
    		sprops = props.StackProps
    	}
    	stack := alicloudroscdkcore.NewStack(scope, &id, &sprops)
    
    	// Kode yang mendefinisikan tumpukan Anda ada di sini
    	vpcKey := "Vpc"
    	vpcProps := alicloudroscdkecs.VPCProps{CidrBlock: "10.0.0.0/8", Description: "Tes pembaruan nama VPC menggunakan ros cdk."}
    	alicloudroscdkecs.NewVpc(stack, &vpcKey, &vpcProps, nil)
    
    	return stack
    }
    
    func main() {
    	app := alicloudroscdkcore.NewApp(nil)
    	props := &demoStackProps{}
    
    	NewdemoStack(app, "demoStack", props)
    
    	app.Synth(nil)
    }
    
  2. Jalankan perintah berikut untuk memperbarui tumpukan:

    ros-cdk deploy --region cn-hangzhou

    Keluaran perintah:

     ✅ Penyebaran (memperbarui tumpukan) telah selesai!
    StackId: 701ecf04-d758-457f-a0fc-7e00e2b6****

Langkah 10: Hapus tumpukan

  1. Jalankan perintah berikut untuk menghapus tumpukan:

    ros-cdk destroy
  2. Ikuti petunjuk di layar untuk mengonfirmasi operasi penghapusan.

    Tumpukan berikut akan dihapus(Hanya tumpukan yang telah disebarkan yang akan ditampilkan).
    
    DemoStack
    
    Silakan konfirmasi.(Y/N)
    Y

    Keluaran perintah:

     ✅ Dihapus
    RequestedId: 1BF864E1-7965-4148-A302-E6ABFF80****

Referensi

  • Halaman Referensi API: Pustaka konstruksi CDK menyediakan kumpulan operasi API yang dapat digunakan untuk membangun aplikasi CDK Anda. Untuk informasi lebih lanjut mengenai penggunaan operasi API dan fitur-fiturnya, lihat Referensi Ros Cdk.

  • Perintah CDK: Informasi lebih lanjut tentang cara menggunakan perintah CDK beserta contoh penggunaannya dapat ditemukan di Perintah ROS CDK.

  • Fitur CDK: Informasi lebih lanjut mengenai penggunaan fitur CDK seperti output dan (parameter semu), serta contoh penggunaannya, dapat ditemukan di Fitur ROS CDK.

  • Repositori GitHub: Informasi lebih lanjut mengenai repositori GitHub resmi ROS CDK dapat ditemukan di Resource-Orchestration-Service-Cloud-Development-Kit. Di situs tersebut, Anda dapat mengirimkan masalah, melihat lisensi layanan, serta membaca catatan rilis.