Questa è la guida per sviluppatori AWS CDK v2. Il vecchio CDK v1 è entrato 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à.
I valori di contesto sono coppie chiave-valore che possono essere associate a un'app, uno stack o un costrutto. Possono essere forniti all'app da un file (di solito o cdk.context.json
nella directory del progetto) cdk.json
o dalla riga di comando.
Il CDK Toolkit utilizza il contesto per memorizzare nella cache i valori recuperati dall' AWS account durante la sintesi. I valori includono le zone di disponibilità nel tuo account o l'Amazon Machine Image (AMI) IDs attualmente disponibile per EC2 le istanze Amazon. Poiché questi valori sono forniti dal tuo AWS account, possono cambiare tra le esecuzioni dell'applicazione CDK. Ciò li rende una potenziale fonte di cambiamenti involontari. Il comportamento di memorizzazione nella cache di CDK Toolkit «blocca» questi valori per l'app CDK finché non decidi di accettare i nuovi valori.
Immaginate lo scenario seguente senza la memorizzazione nella cache del contesto. Supponiamo che tu abbia specificato «la versione più recente di Amazon Linux» come AMI per le tue EC2 istanze Amazon e che sia stata rilasciata una nuova versione di questa AMI. Quindi, la prossima volta che distribuisci lo stack CDK, le istanze già distribuite utilizzeranno l'AMI obsoleta («sbagliata») e dovranno essere aggiornate. L'aggiornamento comporterebbe la sostituzione di tutte le istanze esistenti con altre nuove, il che sarebbe probabilmente inaspettato e indesiderato.
Invece, il CDK registra i dati disponibili dell'account AMIs nel cdk.context.json
file del progetto e utilizza il valore memorizzato per future operazioni di sintesi. In questo modo, l'elenco di non AMIs è più una potenziale fonte di cambiamento. Puoi anche essere sicuro che i tuoi stack vengano sempre sintetizzati negli stessi modelli. AWS CloudFormation
Non tutti i valori di contesto sono valori memorizzati nella cache del tuo ambiente. AWS AWS CDK bandiere caratteristichesono anche valori di contesto. Puoi anche creare i tuoi valori di contesto da utilizzare con le tue app o costrutti.
Le chiavi di contesto sono stringhe. I valori possono essere di qualsiasi tipo supportato da JSON: numeri, stringhe, matrici o oggetti.
Suggerimento
Se i tuoi costrutti creano i propri valori di contesto, incorpora il nome del pacchetto della libreria nelle sue chiavi in modo che non entrino in conflitto con i valori di contesto di altri pacchetti.
Molti valori di contesto sono associati a un particolare AWS ambiente e una determinata app CDK può essere distribuita in più di un ambiente. La chiave per tali valori include l' AWS account e la regione, in modo che i valori di ambienti diversi non siano in conflitto.
La seguente chiave di contesto illustra il formato utilizzato da AWS CDK, inclusi l'account e la regione.
availability-zones:account=123456789012:region=eu-central-1
Importante
I valori di contesto memorizzati nella cache sono gestiti da AWS CDK e dai relativi costrutti, inclusi i costrutti che è possibile scrivere. Non aggiungete o modificate i valori di contesto memorizzati nella cache modificando manualmente i file. Può essere utile, tuttavia, rivedere di cdk.context.json
tanto in tanto per vedere quali valori vengono memorizzati nella cache. I valori di contesto che non rappresentano i valori memorizzati nella cache devono essere archiviati sotto la context
chiave di. cdk.json
In questo modo, non verranno cancellati quando i valori memorizzati nella cache vengono cancellati.
Fonti di valori contestuali
I valori di contesto possono essere forniti all' AWS CDK app in sei modi diversi:
-
Automaticamente dall' AWS account corrente.
-
Tramite l'--contextopzione al cdk comando. (Questi valori sono sempre stringhe.)
-
Nel
cdk.context.json
file del progetto. -
Nella
context
chiave delcdk.json
file del progetto. -
Nella
context
chiave del tuo~/.cdk.json
file. -
Nella tua AWS CDK app usando il
construct.node.setContext()
metodo.
Il file di progetto cdk.context.json
è dove vengono memorizzati nella AWS CDK cache i valori di contesto recuperati dal tuo AWS account. Questa pratica evita modifiche impreviste alle distribuzioni quando, ad esempio, viene introdotta una nuova zona di disponibilità. AWS CDK Non scrive dati contestuali in nessuno degli altri file elencati.
Importante
Perché fanno parte dello stato dell'applicazione cdk.json
e cdk.context.json
devono essere sottoposti al controllo del codice sorgente insieme al resto del codice sorgente dell'app. In caso contrario, le implementazioni in altri ambienti (ad esempio, una pipeline CI) potrebbero produrre risultati incoerenti.
I valori di contesto rientrano nell'ambito del costrutto che li ha creati; sono visibili ai costrutti figli, ma non ai genitori o ai fratelli. I valori di contesto impostati dal AWS CDK Toolkit (il cdk comando) possono essere impostati automaticamente, da un file o dall'opzione. --context I valori di contesto di queste fonti sono impostati implicitamente nel App
costrutto. Pertanto, sono visibili a tutti i costrutti in ogni stack dell'app.
La tua app può leggere un valore di contesto utilizzando il construct.node.tryGetContext
metodo. Se la voce richiesta non viene trovata nel costrutto corrente o in uno dei suoi genitori, il risultato èundefined
. (In alternativa, il risultato potrebbe essere l'equivalente della tua lingua, ad esempio None
in Python.)
Metodi del contesto
AWS CDK Supporta diversi metodi contestuali che consentono alle AWS CDK app di ottenere informazioni contestuali dall' AWS ambiente. Ad esempio, puoi ottenere un elenco di zone di disponibilità disponibili in un determinato AWS account e regione, utilizzando il metodo Stack.availabilityZones.
Di seguito sono riportati i metodi contestuali:
- HostedZone.fromLookup
-
Ottiene le zone ospitate nel tuo account.
- Stack.Availability Zones
-
Ottiene le zone di disponibilità supportate.
- StringParameter.valueFromLookup
-
Ottiene un valore dall'Amazon EC2 Systems Manager Parameter Store della regione corrente.
- vpc.fromLookup
-
Acquisisce gli Amazon Virtual Private Cloud esistenti nei tuoi account.
- LookupMachineImage
-
Cerca l'immagine di una macchina da utilizzare con un'istanza NAT in un Amazon Virtual Private Cloud.
Se un valore di contesto richiesto non è disponibile, l' AWS CDK app notifica al CDK Toolkit che le informazioni di contesto sono mancanti. Successivamente, la CLI interroga l' AWS account corrente per le informazioni e memorizza le informazioni di contesto risultanti nel file. cdk.context.json
Quindi, esegue nuovamente l' AWS CDK app con i valori di contesto.
Visualizzazione e gestione del contesto
Usa il cdk context comando per visualizzare e gestire le informazioni nel tuo cdk.context.json
file. Per visualizzare queste informazioni, usa il cdk context comando senza alcuna opzione. L'output dovrebbe essere simile al seguente.
Context found in cdk.json:
┌───┬─────────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────┐
│ # │ Key │ Value │
├───┼─────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ 1 │ availability-zones:account=123456789012:region=eu-central-1 │ [ "eu-central-1a", "eu-central-1b", "eu-central-1c" ] │
├───┼─────────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┤
│ 2 │ availability-zones:account=123456789012:region=eu-west-1 │ [ "eu-west-1a", "eu-west-1b", "eu-west-1c" ] │
└───┴─────────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────┘
Run cdk context --reset KEY_OR_NUMBER
to remove a context key. If it is a cached value, it will be refreshed on the next cdk synth
.
Per rimuovere un valore di contesto, eseguicdk context --reset, specificando la chiave o il numero corrispondente al valore. L'esempio seguente rimuove il valore che corrisponde alla seconda chiave dell'esempio precedente. Questo valore rappresenta l'elenco delle zone di disponibilità nella regione Europa (Irlanda).
cdk context --reset 2
Context value availability-zones:account=123456789012:region=eu-west-1 reset. It will be refreshed on the next SDK synthesis run.
Pertanto, se desideri eseguire l'aggiornamento all'ultima versione dell'AMI Amazon Linux, utilizza l'esempio precedente per eseguire un aggiornamento controllato del valore di contesto e reimpostarlo. Quindi, sintetizza e distribuisci nuovamente l'app.
cdk synth
Per cancellare tutti i valori di contesto memorizzati per la tua appcdk context --clear, esegui come segue.
cdk context --clear
Solo i valori di contesto memorizzati in cdk.context.json
possono essere ripristinati o cancellati. AWS CDK Non tocca altri valori di contesto. Pertanto, per proteggere un valore di contesto dalla reimpostazione mediante questi comandi, è possibile copiare il valore incdk.json
.
AWS CDK Bandiera Toolkit --context
Utilizzate l'opzione --context
(in breve) -c
per passare i valori del contesto di runtime all'app CDK durante la sintesi o la distribuzione.
cdk synth --context key=value MyStack
Per specificare più valori di contesto, ripetete l'--contextopzione un numero qualsiasi di volte, fornendo ogni volta una coppia chiave-valore.
cdk synth --context key1=value1 --context key2=value2 MyStack
Quando si sintetizzano più stack, i valori di contesto specificati vengono passati a tutti gli stack. Per fornire valori di contesto diversi ai singoli stack, utilizzate chiavi diverse per i valori oppure utilizzate più comandi o. cdk synth cdk deploy
I valori di contesto passati dalla riga di comando sono sempre stringhe. Se un valore è in genere di un altro tipo, il codice deve essere preparato per convertire o analizzare il valore. È possibile che i valori di contesto non stringhe vengano forniti in altri modi (ad esempio, incdk.context.json
). Per assicurarti che questo tipo di valore funzioni come previsto, verifica che il valore sia una stringa prima di convertirlo.
Esempio
Di seguito è riportato un esempio di utilizzo di un Amazon VPC esistente utilizzando AWS CDK il contesto.
import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
import { Construct } from 'constructs';
export class ExistsVpcStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const vpcid = this.node.tryGetContext('vpcid');
const vpc = ec2.Vpc.fromLookup(this, 'VPC', {
vpcId: vpcid,
});
const pubsubnets = vpc.selectSubnets({subnetType: ec2.SubnetType.PUBLIC});
new cdk.CfnOutput(this, 'publicsubnets', {
value: pubsubnets.subnetIds.toString(),
});
}
}
Puoi usarlo cdk diff per vedere gli effetti del passaggio di un valore di contesto sulla riga di comando:
cdk diff -c vpcid=vpc-0cb9c31031d0d3e22
Stack ExistsvpcStack
Outputs
[+] Output publicsubnets publicsubnets: {"Value":"subnet-06e0ea7dd302d3e8f,subnet-01fc0acfb58f3128f"}
I valori di contesto risultanti possono essere visualizzati come illustrato qui.
cdk context -j
{ "vpc-provider:account=123456789012:filter.vpc-id=vpc-0cb9c31031d0d3e22:region=us-east-1": { "vpcId": "vpc-0cb9c31031d0d3e22", "availabilityZones": [ "us-east-1a", "us-east-1b" ], "privateSubnetIds": [ "subnet-03ecfc033225be285", "subnet-0cded5da53180ebfa" ], "privateSubnetNames": [ "Private" ], "privateSubnetRouteTableIds": [ "rtb-0e955393ced0ada04", "rtb-05602e7b9f310e5b0" ], "publicSubnetIds": [ "subnet-06e0ea7dd302d3e8f", "subnet-01fc0acfb58f3128f" ], "publicSubnetNames": [ "Public" ], "publicSubnetRouteTableIds": [ "rtb-00d1fdfd823c82289", "rtb-04bb1969b42969bcb" ] } }