Ini adalah Panduan Pengembang AWS CDK v2. CDKV1 yang lebih lama memasuki pemeliharaan pada 1 Juni 2022 dan mengakhiri dukungan pada 1 Juni 2023.
Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tag dan AWS CDK
Tag adalah elemen nilai kunci informasi yang dapat Anda tambahkan ke konstruksi di aplikasi Anda. AWS CDK Tag yang diterapkan pada konstruksi tertentu juga berlaku untuk semua anak yang dapat diberi tag. Tag disertakan dalam AWS CloudFormation templat yang disintesis dari aplikasi Anda dan diterapkan ke AWS sumber daya yang diterapkan. Anda dapat menggunakan tag untuk mengidentifikasi dan mengkategorikan sumber daya untuk tujuan berikut:
Menggunakan tanda
Tags
Kelas mencakup metode statisof()
, di mana Anda dapat menambahkan tag ke, atau menghapus tag dari, konstruksi yang ditentukan.
-
Tags.of(SCOPE
).add()
menerapkan tag baru ke konstruksi yang diberikan dan semua anak-anaknya.
-
Tags.of(SCOPE
).remove()
menghapus tag dari konstruksi yang diberikan dan salah satu turunannya, termasuk tag yang mungkin diterapkan oleh konstruksi anak pada dirinya sendiri.
Penandaan diimplementasikan menggunakanAspek dan AWS CDK. Aspek adalah cara untuk menerapkan operasi (seperti penandaan) ke semua konstruksi dalam lingkup tertentu.
Contoh berikut menerapkan kunci tag dengan nilai nilai untuk konstruksi.
- TypeScript
-
Tags.of(myConstruct).add('key', 'value');
- JavaScript
-
Tags.of(myConstruct).add('key', 'value');
- Python
-
Tags.of(my_construct).add("key", "value")
- Java
-
Tags.of(myConstruct).add("key", "value");
- C#
-
Tags.Of(myConstruct).Add("key", "value");
- Go
-
awscdk.Tags_Of(myConstruct).Add(jsii.String("key"), jsii.String("value"), &awscdk.TagProps{})
Contoh berikut menghapus kunci tag dari konstruksi.
- TypeScript
-
Tags.of(myConstruct).remove('key');
- JavaScript
-
Tags.of(myConstruct).remove('key');
- Python
-
Tags.of(my_construct).remove("key")
- Java
-
Tags.of(myConstruct).remove("key");
- C#
-
Tags.Of(myConstruct).Remove("key");
- Go
-
awscdk.Tags_Of(myConstruct).Remove(jsii.String("key"), &awscdk.TagProps{})
Jika Anda menggunakan Stage
konstruksi, terapkan tag di Stage
tingkat atau di bawah. Tag tidak diterapkan melintasi Stage
batas.
Menandai prioritas
AWS CDK Ini berlaku dan menghapus tag secara rekursif. Jika ada konflik, operasi penandaan dengan prioritas tertinggi menang. (Prioritas ditetapkan menggunakan priority
properti opsional.) Jika prioritas dua operasi sama, operasi penandaan yang paling dekat dengan bagian bawah pohon konstruksi menang. Secara default, menerapkan tag memiliki prioritas 100 (kecuali untuk tag yang ditambahkan langsung ke AWS CloudFormation sumber daya, yang memiliki prioritas 50). Prioritas default untuk menghapus tag adalah 200.
Berikut ini menerapkan tag dengan prioritas 300 untuk konstruksi.
- TypeScript
-
Tags.of(myConstruct).add('key', 'value', {
priority: 300
});
- JavaScript
-
Tags.of(myConstruct).add('key', 'value', {
priority: 300
});
- Python
-
Tags.of(my_construct).add("key", "value", priority=300)
- Java
-
Tags.of(myConstruct).add("key", "value", TagProps.builder()
.priority(300).build());
- C#
-
Tags.Of(myConstruct).Add("key", "value", new TagProps { Priority = 300 });
- Go
-
awscdk.Tags_Of(myConstruct).Add(jsii.String("key"), jsii.String("value"), &awscdk.TagProps{
Priority: jsii.Number(300),
})
Properti opsional
Tag mendukung properties
yang menyempurnakan cara tag diterapkan, atau dihapus dari, sumber daya. Semua properti adalah opsional.
applyToLaunchedInstances
(Python:) apply_to_launched_instances
-
Tersedia untuk add () saja. Secara default, tag diterapkan ke instance yang diluncurkan di grup Auto Scaling. Setel properti ini ke false untuk mengabaikan instance yang diluncurkan dalam grup Auto Scaling.
includeResourceTypes
/excludeResourceTypes
(Python:include_resource_types
/) exclude_resource_types
-
Gunakan ini untuk memanipulasi tag hanya pada subset sumber daya, berdasarkan jenis AWS CloudFormation sumber daya. Secara default, operasi diterapkan ke semua sumber daya di subpohon konstruksi, tetapi ini dapat diubah dengan memasukkan atau mengecualikan jenis sumber daya tertentu. Kecualikan lebih diutamakan daripada include, jika keduanya ditentukan.
priority
-
Gunakan ini untuk menetapkan prioritas operasi ini sehubungan dengan operasi lain Tags.add()
dan Tags.remove()
operasi. Nilai yang lebih tinggi lebih diutamakan daripada nilai yang lebih rendah. Defaultnya adalah 100 untuk operasi tambah (50 untuk tag diterapkan langsung ke AWS CloudFormation sumber daya) dan 200 untuk menghapus operasi.
Contoh berikut menerapkan tag tag dengan nilai nilai dan prioritas 100 untuk sumber daya tipe AWS: :Xxx: :Yyy dalam konstruksi. Itu tidak menerapkan tag ke instance yang diluncurkan di grup EC2 Auto Scaling Amazon atau ke sumber daya AWStipe: :Xxx: :Zzz. (Ini adalah placeholder untuk dua jenis AWS CloudFormation sumber daya yang sewenang-wenang tetapi berbeda.)
- TypeScript
-
Tags.of(myConstruct).add('tagname', 'value', {
applyToLaunchedInstances: false,
includeResourceTypes: ['AWS::Xxx::Yyy'],
excludeResourceTypes: ['AWS::Xxx::Zzz'],
priority: 100,
});
- JavaScript
-
Tags.of(myConstruct).add('tagname', 'value', {
applyToLaunchedInstances: false,
includeResourceTypes: ['AWS::Xxx::Yyy'],
excludeResourceTypes: ['AWS::Xxx::Zzz'],
priority: 100
});
- Python
-
Tags.of(my_construct).add("tagname", "value",
apply_to_launched_instances=False,
include_resource_types=["AWS::Xxx::Yyy"],
exclude_resource_types=["AWS::Xxx::Zzz"],
priority=100)
- Java
-
Tags.of(myConstruct).add("tagname", "value", TagProps.builder()
.applyToLaunchedInstances(false)
.includeResourceTypes(Arrays.asList("AWS::Xxx::Yyy"))
.excludeResourceTypes(Arrays.asList("AWS::Xxx::Zzz"))
.priority(100).build());
- C#
-
Tags.Of(myConstruct).Add("tagname", "value", new TagProps
{
ApplyToLaunchedInstances = false,
IncludeResourceTypes = ["AWS::Xxx::Yyy"],
ExcludeResourceTypes = ["AWS::Xxx::Zzz"],
Priority = 100
});
- Go
-
awscdk.Tags_Of(myConstruct).Add(jsii.String("tagname"), jsii.String("value"), &awscdk.TagProps{
ApplyToLaunchedInstances: jsii.Bool(false),
IncludeResourceTypes: &[]*string{jsii.String("AWS::Xxx:Yyy")},
ExcludeResourceTypes: &[]*string{jsii.String("AWS::Xxx:Zzz")},
Priority: jsii.Number(100),
})
Contoh berikut menghapus tag tag dengan prioritas 200 dari sumber daya tipe AWS: :Xxx: :Yyy dalam konstruksi, tetapi tidak dari sumber daya tipe: :Xxx: :Zzz. AWS
- TypeScript
-
Tags.of(myConstruct).remove('tagname', {
includeResourceTypes: ['AWS::Xxx::Yyy'],
excludeResourceTypes: ['AWS::Xxx::Zzz'],
priority: 200,
});
- JavaScript
-
Tags.of(myConstruct).remove('tagname', {
includeResourceTypes: ['AWS::Xxx::Yyy'],
excludeResourceTypes: ['AWS::Xxx::Zzz'],
priority: 200
});
- Python
-
Tags.of(my_construct).remove("tagname",
include_resource_types=["AWS::Xxx::Yyy"],
exclude_resource_types=["AWS::Xxx::Zzz"],
priority=200,)
- Java
-
Tags.of((myConstruct).remove("tagname", TagProps.builder()
.includeResourceTypes(Arrays.asList("AWS::Xxx::Yyy"))
.excludeResourceTypes(Arrays.asList("AWS::Xxx::Zzz"))
.priority(100).build());
- C#
-
Tags.Of(myConstruct).Remove("tagname", new TagProps
{
IncludeResourceTypes = ["AWS::Xxx::Yyy"],
ExcludeResourceTypes = ["AWS::Xxx::Zzz"],
Priority = 100
});
- Go
-
awscdk.Tags_Of(myConstruct).Remove(jsii.String("tagname"), &awscdk.TagProps{
IncludeResourceTypes: &[]*string{jsii.String("AWS::Xxx:Yyy")},
ExcludeResourceTypes: &[]*string{jsii.String("AWS::Xxx:Zzz")},
Priority: jsii.Number(200),
})
Contoh
Contoh berikut menambahkan kunci tag StackTypedengan nilai TheBestke sumber daya apa pun yang dibuat dalam Stack
namaMarketingSystem
. Kemudian menghapusnya lagi dari semua sumber daya kecuali EC2 VPC subnet Amazon. Hasilnya adalah hanya subnet yang memiliki tag yang diterapkan.
- TypeScript
-
import { App, Stack, Tags } from 'aws-cdk-lib';
const app = new App();
const theBestStack = new Stack(app, 'MarketingSystem');
// Add a tag to all constructs in the stack
Tags.of(theBestStack).add('StackType', 'TheBest');
// Remove the tag from all resources except subnet resources
Tags.of(theBestStack).remove('StackType', {
excludeResourceTypes: ['AWS::EC2::Subnet']
});
- JavaScript
-
const { App, Stack, Tags } = require('aws-cdk-lib');
const app = new App();
const theBestStack = new Stack(app, 'MarketingSystem');
// Add a tag to all constructs in the stack
Tags.of(theBestStack).add('StackType', 'TheBest');
// Remove the tag from all resources except subnet resources
Tags.of(theBestStack).remove('StackType', {
excludeResourceTypes: ['AWS::EC2::Subnet']
});
- Python
-
from aws_cdk import App, Stack, Tags
app = App();
the_best_stack = Stack(app, 'MarketingSystem')
# Add a tag to all constructs in the stack
Tags.of(the_best_stack).add("StackType", "TheBest")
# Remove the tag from all resources except subnet resources
Tags.of(the_best_stack).remove("StackType",
exclude_resource_types=["AWS::EC2::Subnet"])
- Java
-
import software.amazon.awscdk.App;
import software.amazon.awscdk.Tags;
// Add a tag to all constructs in the stack
Tags.of(theBestStack).add("StackType", "TheBest");
// Remove the tag from all resources except subnet resources
Tags.of(theBestStack).remove("StackType", TagProps.builder()
.excludeResourceTypes(Arrays.asList("AWS::EC2::Subnet"))
.build());
- C#
-
using Amazon.CDK;
var app = new App();
var theBestStack = new Stack(app, 'MarketingSystem');
// Add a tag to all constructs in the stack
Tags.Of(theBestStack).Add("StackType", "TheBest");
// Remove the tag from all resources except subnet resources
Tags.Of(theBestStack).Remove("StackType", new TagProps
{
ExcludeResourceTypes = ["AWS::EC2::Subnet"]
});
- Go
-
import "github.com/aws/aws-cdk-go/awscdk/v2"
app := awscdk.NewApp(nil)
theBestStack := awscdk.NewStack(app, jsii.String("MarketingSystem"), &awscdk.StackProps{})
// Add a tag to all constructs in the stack
awscdk.Tags_Of(theBestStack).Add(jsii.String("StackType"), jsii.String("TheBest"), &awscdk.TagProps{})
// Remove the tag from all resources except subnet resources
awscdk.Tags_Of(theBestStack).Add(jsii.String("StackType"), jsii.String("TheBest"), &awscdk.TagProps{
ExcludeResourceTypes: &[]*string{jsii.String("AWS::EC2::Subnet")},
})
Kode berikut mencapai hasil yang sama. Pertimbangkan pendekatan mana (inklusi atau pengecualian) yang membuat maksud Anda lebih jelas.
- TypeScript
-
Tags.of(theBestStack).add('StackType', 'TheBest',
{ includeResourceTypes: ['AWS::EC2::Subnet']});
- JavaScript
-
Tags.of(theBestStack).add('StackType', 'TheBest',
{ includeResourceTypes: ['AWS::EC2::Subnet']});
- Python
-
Tags.of(the_best_stack).add("StackType", "TheBest",
include_resource_types=["AWS::EC2::Subnet"])
- Java
-
Tags.of(theBestStack).add("StackType", "TheBest", TagProps.builder()
.includeResourceTypes(Arrays.asList("AWS::EC2::Subnet"))
.build());
- C#
-
Tags.Of(theBestStack).Add("StackType", "TheBest", new TagProps {
IncludeResourceTypes = ["AWS::EC2::Subnet"]
});
- Go
-
awscdk.Tags_Of(theBestStack).Add(jsii.String("StackType"), jsii.String("TheBest"), &awscdk.TagProps{
IncludeResourceTypes: &[]*string{jsii.String("AWS::EC2::Subnet")},
})
Menandai konstruksi tunggal
Tags.of(scope).add(key, value)
adalah cara standar untuk menambahkan tag ke konstruksi di. AWS CDK Perilaku berjalan di pohon, yang secara rekursif menandai semua sumber daya yang dapat diberi tag di bawah lingkup yang diberikan, hampir selalu seperti yang Anda inginkan. Namun, terkadang, Anda perlu menandai konstruksi (atau konstruksi) tertentu dan arbitrer.
Salah satu kasus tersebut melibatkan penerapan tag yang nilainya berasal dari beberapa properti konstruksi yang diberi tag. Pendekatan penandaan standar secara rekursif menerapkan kunci dan nilai yang sama ke semua sumber daya yang cocok dalam ruang lingkup. Namun, di sini nilainya bisa berbeda untuk setiap konstruksi yang ditandai.
Tag diimplementasikan menggunakan aspek, dan CDK memanggil visit()
metode tag untuk setiap konstruksi di bawah lingkup yang Anda tentukan menggunakanTags.of(scope)
. Kita dapat memanggil Tag.visit()
langsung untuk menerapkan tag ke konstruksi tunggal.
- TypeScript
-
new cdk.Tag(key, value).visit(scope);
- JavaScript
-
new cdk.Tag(key, value).visit(scope);
- Python
-
cdk.Tag(key, value).visit(scope)
- Java
-
Tag.Builder.create(key, value).build().visit(scope);
- C#
-
new Tag(key, value).Visit(scope);
- Go
-
awscdk.NewTag(key, value, &awscdk.TagProps{}).Visit(scope)
Anda dapat menandai semua konstruksi di bawah lingkup tetapi membiarkan nilai tag berasal dari properti setiap konstruksi. Untuk melakukannya, tulis aspek dan terapkan tag dalam visit()
metode aspek seperti yang ditunjukkan pada contoh sebelumnya. Kemudian, tambahkan aspek ke lingkup yang diinginkan menggunakanAspects.of(scope).add(aspect)
.
Contoh berikut menerapkan tag untuk setiap sumber daya dalam tumpukan yang berisi jalur sumber daya.
- TypeScript
-
class PathTagger implements cdk.IAspect {
visit(node: IConstruct) {
new cdk.Tag("aws-cdk-path", node.node.path).visit(node);
}
}
stack = new MyStack(app);
cdk.Aspects.of(stack).add(new PathTagger())
- JavaScript
-
class PathTagger {
visit(node) {
new cdk.Tag("aws-cdk-path", node.node.path).visit(node);
}
}
stack = new MyStack(app);
cdk.Aspects.of(stack).add(new PathTagger())
- Python
-
@jsii.implements(cdk.IAspect)
class PathTagger:
def visit(self, node: IConstruct):
cdk.Tag("aws-cdk-path", node.node.path).visit(node)
stack = MyStack(app)
cdk.Aspects.of(stack).add(PathTagger())
- Java
-
final class PathTagger implements IAspect {
public void visit(IConstruct node) {
Tag.Builder.create("aws-cdk-path", node.getNode().getPath()).build().visit(node);
}
}
stack stack = new MyStack(app);
Aspects.of(stack).add(new PathTagger());
- C#
-
public class PathTagger : IAspect
{
public void Visit(IConstruct node)
{
new Tag("aws-cdk-path", node.Node.Path).Visit(node);
}
}
var stack = new MyStack(app);
Aspects.Of(stack).Add(new PathTagger);
Logika penandaan bersyarat, termasuk prioritas, jenis sumber daya, dan sebagainya, dibangun ke dalam kelas. Tag
Anda dapat menggunakan fitur ini saat menerapkan tag ke sumber daya arbitrer; tag tidak diterapkan jika kondisi tidak terpenuhi. Selain itu, Tag
kelas hanya menandai sumber daya yang dapat diberi tag, jadi Anda tidak perlu menguji apakah konstruksi dapat diberi tag sebelum menerapkan tag.