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=trueJavaScript
mkdir demo
cd demo
ros-cdk init --language=javascript --generate-only=trueJava
mkdir demo
cd demo
ros-cdk init --language=java --generate-only=truePython
mkdir demo
cd demo
ros-cdk init --language=python --generate-only=trueJalankan 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 .venvJalankan perintah berikut untuk masuk ke lingkungan virtual:
source .venv/bin/activateC#
mkdir demo
cd demo
ros-cdk init --language=csharp --generate-only=trueGo
mkdir demo
cd demo
ros-cdk init --language=go --generate-only=trueLangkah 2: Konfigurasikan kredensial Alibaba Cloud
Jalankan perintah berikut untuk mengonfigurasi kredensial Alibaba Cloud:
ros-cdk configIkuti 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 fileBerikut adalah deskripsi struktur proyek:
bin/demo.ts: file peluncuran proyek.CatatanSebuah 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.tsberisi 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.tsberisi 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.tsberisi 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 fileBerikut adalah deskripsi struktur proyek:
bin/demo.js: file peluncuran proyek.CatatanSebuah 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.jsberisi 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.jsberisi 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.jsberisi 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 fileBerikut adalah deskripsi struktur proyek:
src/main/java/com/myorg/DemoApp.java: file peluncuran proyek.CatatanSebuah 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.javaberisi 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.javaberisi 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.javaberisi 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 fileBerikut adalah deskripsi struktur proyek:
app.py: file peluncuran proyek.CatatanSebuah 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.pyberisi 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.pyberisi 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 sinitest/test_demo.py: file pengujian unit.File ini digunakan untuk memeriksa apakah tumpukan dibuat berdasarkan logika yang diharapkan. File
test_demo.pyberisi 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 fileSetelah 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.csberisi 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.csberisi 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 fileBerikut adalah deskripsi struktur proyek:
demo.go: file peluncuran proyek, juga merupakan file definisi tumpukan.CatatanSebuah 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.goberisi 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
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.0C#
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 )Instal dependensi.
TypeScript
npm installJavaScript
npm installJava
mvn compilePython
Metode 1:
pip install -r requirements.txtMetode 2:
pip install ros-cdk-core ros-cdk-ecs
C#
CatatanUntuk bahasa pemrograman C#, tidak diperlukan instalasi dependensi melalui perintah.
Go
go get
Langkah 5: Tambahkan sumber daya
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.godengan 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) }(Opsional) Hasilkan file template.
TypeScript
ros-cdk synth --jsonJavaScript
ros-cdk synth --jsonJava
mvn compile ros-cdk synth --jsonPython
ros-cdk synth --jsonC#
ros-cdk synth --jsonGo
go get ros-cdk synth --jsonKeluaran 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
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) }Lakukan pengujian unit.
TypeScript
npm testJavaScript
npm testJava
mvn testPython
python -m unittest -vC#
dotnet testGo
go get go testKeluaran 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 OKC#
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-hangzhouOutput 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-stacksHasil 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
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) }Jalankan perintah berikut untuk memperbarui tumpukan:
ros-cdk deploy --region cn-hangzhouKeluaran perintah:
✅ Penyebaran (memperbarui tumpukan) telah selesai! StackId: 701ecf04-d758-457f-a0fc-7e00e2b6****
Langkah 10: Hapus tumpukan
-
Jalankan perintah berikut untuk menghapus tumpukan:
ros-cdk destroy -
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) YKeluaran 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.