Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 gewartet und der Support wurde am 1. Juni 2023 eingestellt.
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Aspekte
Aspekte sind eine Möglichkeit, eine Operation auf alle Konstrukte in einem bestimmten Bereich anzuwenden. Der -Aspekt könnte die Konstrukte ändern, z. B. durch Hinzufügen von Tags. Oder es könnte etwas über den Status der Konstrukte überprüfen, z. B. um sicherzustellen, dass alle Buckets verschlüsselt sind.
Um einen Aspekt auf ein Konstrukt und alle Konstrukte im selben Bereich anzuwenden, rufen Sie Aspects
.of(SCOPE
).add()
mit einem neuen Aspekt auf, wie im folgenden Beispiel gezeigt.
- TypeScript
-
Aspects.of(myConstruct).add(new SomeAspect(...));
- JavaScript
-
Aspects.of(myConstruct).add(new SomeAspect(...));
- Python
-
Aspects.of(my_construct).add(SomeAspect(...))
- Java
-
Aspects.of(myConstruct).add(new SomeAspect(...));
- C#
-
Aspects.Of(myConstruct).add(new SomeAspect(...));
- Go
-
awscdk.Aspects_Of(stack).Add(awscdk.NewTag(...))
Die AWS CDK verwendet Aspekte, um Ressourcen zu markieren, aber das Framework kann auch für andere Zwecke verwendet werden. Sie können es beispielsweise verwenden, um die AWS CloudFormation Ressourcen zu validieren oder zu ändern, die von übergeordneten Konstrukten für Sie definiert werden.
Detailaspekte
Aspekte verwenden das Besuchermuster . Ein Aspekt ist eine Klasse, die die folgende Schnittstelle implementiert.
- TypeScript
-
interface IAspect {
visit(node: IConstruct): void;}
- JavaScript
-
JavaScript hat keine Schnittstellen als Sprachfunktion. Daher ist ein -Aspekt einfach eine Instance einer Klasse mit einer visit
Methode, die den Knoten akzeptiert, auf dem betrieben werden soll.
- Python
-
Python hat keine Schnittstellen als Sprachfunktion. Daher ist ein -Aspekt einfach eine Instance einer Klasse mit einer visit
Methode, die den Knoten akzeptiert, auf dem betrieben werden soll.
- Java
-
public interface IAspect {
public void visit(Construct node);
}
- C#
-
public interface IAspect
{
void Visit(IConstruct node);
}
- Go
-
type IAspect interface {
Visit(node constructs.IConstruct)
}
Wenn Sie aufrufenAspects.of(SCOPE
).add(...)
, fügt das Konstrukt den -Aspekt zu einer internen Liste von -Aspekten hinzu. Sie können die Liste mit abrufenAspects.of(SCOPE
)
.
Während der Vorbereitungsphase AWS CDK ruft die die visit
Methode des Objekts für das Konstrukt und jedes seiner untergeordneten Elemente in der Reihenfolge von oben nach unten auf.
Die visit
Methode ist frei, alles im Konstrukt zu ändern. Konvertieren Sie in stark typisierten Sprachen das empfangene Konstrukt in einen spezifischeren Typ, bevor Sie auf konstruktspezifische Eigenschaften oder Methoden zugreifen.
Aspekte werden nicht über Stage
Konstruktgrenzen weitergegeben, da sie nach der Definition eigenständig und unveränderlich Stages
sind. Wenden Sie Aspekte auf das Stage
Konstrukt selbst (oder niedriger) an, wenn Sie möchten, dass sie Konstrukte innerhalb der besuchenStage
.
Beispiel
Im folgenden Beispiel wird überprüft, ob für alle im Stack erstellten Buckets das Versioning aktiviert ist. Der -Aspekt fügt den Konstrukten, die die Validierung nicht bestehen, eine Fehleranmerkung hinzu. Dies führt dazu, dass der synth Vorgang fehlschlägt und die Bereitstellung der resultierenden Cloud-Baugruppe verhindert.
- TypeScript
-
class BucketVersioningChecker implements IAspect {
public visit(node: IConstruct): void {
// See that we're dealing with a CfnBucket
if (node instanceof s3.CfnBucket) {
// Check for versioning property, exclude the case where the property
// can be a token (IResolvable).
if (!node.versioningConfiguration
|| (!Tokenization.isResolvable(node.versioningConfiguration)
&& node.versioningConfiguration.status !== 'Enabled')) {
Annotations.of(node).addError('Bucket versioning is not enabled');
}
}
}
}
// Later, apply to the stack
Aspects.of(stack).add(new BucketVersioningChecker());
- JavaScript
-
class BucketVersioningChecker {
visit(node) {
// See that we're dealing with a CfnBucket
if ( node instanceof s3.CfnBucket) {
// Check for versioning property, exclude the case where the property
// can be a token (IResolvable).
if (!node.versioningConfiguration
|| !Tokenization.isResolvable(node.versioningConfiguration)
&& node.versioningConfiguration.status !== 'Enabled')) {
Annotations.of(node).addError('Bucket versioning is not enabled');
}
}
}
}
// Later, apply to the stack
Aspects.of(stack).add(new BucketVersioningChecker());
- Python
-
@jsii.implements(cdk.IAspect)
class BucketVersioningChecker:
def visit(self, node):
# See that we're dealing with a CfnBucket
if isinstance(node, s3.CfnBucket):
# Check for versioning property, exclude the case where the property
# can be a token (IResolvable).
if (not node.versioning_configuration or
not Tokenization.is_resolvable(node.versioning_configuration)
and node.versioning_configuration.status != "Enabled"):
Annotations.of(node).add_error('Bucket versioning is not enabled')
# Later, apply to the stack
Aspects.of(stack).add(BucketVersioningChecker())
- Java
-
public class BucketVersioningChecker implements IAspect
{
@Override
public void visit(Construct node)
{
// See that we're dealing with a CfnBucket
if (node instanceof CfnBucket)
{
CfnBucket bucket = (CfnBucket)node;
Object versioningConfiguration = bucket.getVersioningConfiguration();
if (versioningConfiguration == null ||
!Tokenization.isResolvable(versioningConfiguration.toString()) &&
!versioningConfiguration.toString().contains("Enabled"))
Annotations.of(bucket.getNode()).addError("Bucket versioning is not enabled");
}
}
}
// Later, apply to the stack
Aspects.of(stack).add(new BucketVersioningChecker());
- C#
-
class BucketVersioningChecker : Amazon.Jsii.Runtime.Deputy.DeputyBase, IAspect
{
public void Visit(IConstruct node)
{
// See that we're dealing with a CfnBucket
if (node is CfnBucket)
{
var bucket = (CfnBucket)node;
if (bucket.VersioningConfiguration is null ||
!Tokenization.IsResolvable(bucket.VersioningConfiguration) &&
!bucket.VersioningConfiguration.ToString().Contains("Enabled"))
Annotations.Of(bucket.Node).AddError("Bucket versioning is not enabled");
}
}
}
// Later, apply to the stack
Aspects.Of(stack).add(new BucketVersioningChecker());