Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

I valori di contesto e il AWS CDK

Modalità Focus
I valori di contesto e il AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

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à.

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 del cdk.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.

TypeScript
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(), }); } }
JavaScript
const cdk = require('aws-cdk-lib'); const ec2 = require('aws-cdk-lib/aws-ec2'); class ExistsVpcStack extends cdk.Stack { constructor(scope, id, props) { 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() }); } } module.exports = { ExistsVpcStack }
Python
import aws_cdk as cdk import aws_cdk.aws_ec2 as ec2 from constructs import Construct class ExistsVpcStack(cdk.Stack): def __init__(scope: Construct, id: str, **kwargs): super().__init__(scope, id, **kwargs) vpcid = self.node.try_get_context("vpcid") vpc = ec2.Vpc.from_lookup(self, "VPC", vpc_id=vpcid) pubsubnets = vpc.select_subnets(subnetType=ec2.SubnetType.PUBLIC) cdk.CfnOutput(self, "publicsubnets", value=pubsubnets.subnet_ids.to_string())
Java
import software.amazon.awscdk.CfnOutput; import software.amazon.awscdk.services.ec2.Vpc; import software.amazon.awscdk.services.ec2.VpcLookupOptions; import software.amazon.awscdk.services.ec2.SelectedSubnets; import software.amazon.awscdk.services.ec2.SubnetSelection; import software.amazon.awscdk.services.ec2.SubnetType; import software.constructs.Construct; public class ExistsVpcStack extends Stack { public ExistsVpcStack(Construct context, String id) { this(context, id, null); } public ExistsVpcStack(Construct context, String id, StackProps props) { super(context, id, props); String vpcId = (String)this.getNode().tryGetContext("vpcid"); Vpc vpc = (Vpc)Vpc.fromLookup(this, "VPC", VpcLookupOptions.builder() .vpcId(vpcId).build()); SelectedSubnets pubSubNets = vpc.selectSubnets(SubnetSelection.builder() .subnetType(SubnetType.PUBLIC).build()); CfnOutput.Builder.create(this, "publicsubnets") .value(pubSubNets.getSubnetIds().toString()).build(); } }
C#
using Amazon.CDK; using Amazon.CDK.AWS.EC2; using Constructs; class ExistsVpcStack : Stack { public ExistsVpcStack(Construct scope, string id, StackProps props) : base(scope, id, props) { var vpcId = (string)this.Node.TryGetContext("vpcid"); var vpc = Vpc.FromLookup(this, "VPC", new VpcLookupOptions { VpcId = vpcId }); SelectedSubnets pubSubNets = vpc.SelectSubnets([new SubnetSelection { SubnetType = SubnetType.PUBLIC }]); new CfnOutput(this, "publicsubnets", new CfnOutputProps { Value = pubSubNets.SubnetIds.ToString() }); } }
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"
    ]
  }
}
PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.