Questa è la guida per sviluppatori AWS CDK v2. La versione precedente della CDK versione 1 è entrata in manutenzione il 1° giugno 2022 e ha terminato il supporto il 1° giugno 2023.
Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Aspetti e AWS CDK
Gli aspetti sono un modo per applicare un'operazione a tutti i costrutti in un determinato ambito. L'aspetto potrebbe modificare i costrutti, ad esempio aggiungendo tag. Oppure potrebbe verificare qualcosa sullo stato dei costrutti, ad esempio assicurarsi che tutti i bucket siano crittografati.
Per applicare un aspetto a un costrutto e a tutti i costrutti nello stesso ambito, chiamate Aspects
.of(SCOPE
).add()
con un nuovo aspetto, come mostrato nell'esempio seguente.
- 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(...))
AWS CDK Utilizza gli aspetti per etichettare le risorse, ma il framework può essere utilizzato anche per altri scopi. Ad esempio, potete usarlo per convalidare o modificare le AWS CloudFormation risorse definite per voi da costrutti di livello superiore.
Aspetti in dettaglio
Gli aspetti utilizzano lo schema dei visitatori. Un aspetto è una classe che implementa la seguente interfaccia.
- TypeScript
-
interface IAspect {
visit(node: IConstruct): void;}
- JavaScript
-
JavaScript non ha interfacce come funzionalità linguistica. Pertanto, un aspetto è semplicemente un'istanza di una classe con un visit
metodo che accetta il nodo su cui operare.
- Python
-
Python non ha interfacce come funzionalità del linguaggio. Pertanto, un aspetto è semplicemente un'istanza di una classe con un visit
metodo che accetta il nodo su cui operare.
- 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)
}
Quando si chiamaAspects.of(SCOPE
).add(...)
, il costrutto aggiunge l'aspetto a un elenco interno di aspetti. È possibile ottenere l'elenco conAspects.of(SCOPE
)
.
Durante la fase di preparazione, AWS CDK chiama il visit
metodo dell'oggetto per il costrutto e ciascuno dei suoi figli in ordine dall'alto verso il basso.
Il visit
metodo è libero di modificare qualsiasi cosa nel costrutto. In linguaggi fortemente tipizzati, trasmetti il costrutto ricevuto a un tipo più specifico prima di accedere a proprietà o metodi specifici del costrutto.
Gli aspetti non si propagano oltre i confini del Stage
costrutto, perché dopo la definizione Stages
sono autonomi e immutabili. Applica gli aspetti sul Stage
costrutto stesso (o inferiore) se vuoi che visitino i costrutti all'interno di. Stage
Esempio
L'esempio seguente verifica che tutti i bucket creati nello stack abbiano il controllo delle versioni abilitato. L'aspetto aggiunge un'annotazione di errore ai costrutti che non superano la convalida. Ciò comporta il fallimento dell'synthoperazione e impedisce la distribuzione dell'assemblaggio cloud risultante.
- 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());