Lavorare con AWS CDK in Go - 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à.

Lavorare con AWS CDK in Go

Go è un linguaggio client completamente supportato per AWS Cloud Development Kit (AWS CDK) ed è considerato stabile. Lavorare con AWS CDK in Go utilizza strumenti familiari. La versione Go di AWS CDK Even utilizza identificatori in stile Go.

A differenza degli altri linguaggi supportati dal CDK, Go non è un linguaggio di programmazione tradizionale orientato agli oggetti. Go utilizza la composizione laddove altri linguaggi spesso sfruttano l'ereditarietà. Abbiamo cercato di utilizzare il più possibile approcci Go idiomatici, ma ci sono punti in cui il CDK può differire.

Questo argomento fornisce una guida per l'utilizzo di in Go. AWS CDK Consulta il post sul blog dedicato all'annuncio per una descrizione dettagliata di un semplice progetto Go per il. AWS CDK

Inizia a usare Go

Per utilizzare AWS CDK, è necessario disporre di un AWS account e delle credenziali e aver installato Node.js e il Toolkit. AWS CDK Per informazioni, consulta Iniziare con AWS CDK.

I collegamenti Go AWS CDK utilizzano la toolchain Go standard, v1.18 o successiva. Puoi usare l'editor che preferisci.

Nota

Lingua obsoleta di terze parti: la versione linguistica è supportata solo fino alla fine del ciclo di vita (EOL (End Of Life) condivisa dal fornitore o dalla community ed è soggetta a modifiche con preavviso.

Creare un progetto

È possibile creare un nuovo AWS CDK progetto cdk init richiamandolo in una directory vuota. Utilizzate l'--languageopzione e specificatego:

mkdir my-project cd my-project cdk init app --language go

cdk initutilizza il nome della cartella del progetto per denominare vari elementi del progetto, tra cui classi, sottocartelle e file. I trattini nel nome della cartella vengono convertiti in caratteri di sottolineatura. Tuttavia, il nome dovrebbe altrimenti assumere la forma di un identificatore Go; ad esempio, non dovrebbe iniziare con un numero o contenere spazi.

Il progetto risultante include un riferimento al modulo AWS CDK Go principale,github.com/aws/aws-cdk-go/awscdk/v2, ingo.mod. Problema go get per installare questo e altri moduli richiesti.

Gestione dei moduli AWS di Construct Library

Nella maggior parte della AWS CDK documentazione e degli esempi, la parola «modulo» è spesso usata per riferirsi ai moduli di AWS Construct Library, uno o più per AWS servizio, il che differisce dall'uso idiomatico del termine in Go. La CDK Construct Library è fornita in un modulo Go con i singoli moduli Construct Library, che supportano i vari AWS servizi, forniti come pacchetti Go all'interno di quel modulo.

Il supporto per AWS Construct Library di alcuni servizi è contenuto in più di un modulo Construct Library (pacchetto Go). Ad esempio, Amazon Route 53 dispone di tre moduli Construct Library oltre al awsroute53 pacchetto principale, named awsroute53patternsawsroute53resolver, andawsroute53targets.

Il AWS CDK pacchetto principale, necessario nella maggior parte delle AWS CDK app, viene importato in Go code asgithub.com/aws/aws-cdk-go/awscdk/v2. I pacchetti per i vari servizi della AWS Construct Library sono disponibili ingithub.com/aws/aws-cdk-go/awscdk/v2. Ad esempio, lo spazio dei nomi del modulo Amazon S3 è. github.com/aws/aws-cdk-go/awscdk/v2/awss3

import ( "github.com/aws/aws-cdk-go/awscdk/v2/awss3" // ... )

Dopo aver importato i moduli Construct Library (pacchetti Go) per i servizi che desideri utilizzare nella tua app, accedi ai costrutti di quel modulo utilizzando, ad esempio,. awss3.Bucket

Gestione delle dipendenze in Go

In Go, le versioni delle dipendenze sono definite in. go.mod L'impostazione predefinita go.mod è simile a quella mostrata qui.

module my-package go 1.16 require ( github.com/aws/aws-cdk-go/awscdk/v2 v2.16.0 github.com/aws/constructs-go/constructs/v10 v10.0.5 github.com/aws/jsii-runtime-go v1.29.0 )

I nomi dei Package (moduli, in gergo Go) sono specificati tramite URL con il numero di versione richiesto aggiunto. Il sistema di moduli di Go non supporta intervalli di versioni.

Emetti il go get comando per installare tutti i moduli richiesti e aggiornarligo.mod. Per visualizzare un elenco degli aggiornamenti disponibili per le tue dipendenze, invia. go list -m -u all

AWS CDK idiomi in Go

Nomi di campi e metodi

I nomi dei campi e dei metodi utilizzano camel casing (likeThis) in TypeScript, la lingua di origine del CDK. In Go, questi seguono le convenzioni Go, così come Pascal cased (). LikeThis

Pulizia

Nel tuo main metodo, usalo defer jsii.Close() per assicurarti che l'app CDK si pulisca da sola.

Valori mancanti e conversione del puntatore

In Go, i valori mancanti in AWS CDK oggetti come i pacchetti di proprietà sono rappresentati da. nil Go non ha tipi nullabili; l'unico tipo che può contenere nil è un puntatore. Per consentire ai valori di essere opzionali, quindi, tutte le proprietà CDK, gli argomenti e i valori restituiti sono puntatori, anche per i tipi primitivi. Questo vale sia per i valori obbligatori che per quelli facoltativi, quindi se un valore richiesto diventa successivamente facoltativo, non è necessario modificare radicalmente il tipo.

Quando passate valori o espressioni letterali, utilizzate le seguenti funzioni di supporto per creare puntatori ai valori.

  • jsii.String

  • jsii.Number

  • jsii.Bool

  • jsii.Time

Per motivi di coerenza, si consiglia di utilizzare i puntatori in modo simile quando si definiscono i propri costrutti, anche se può sembrare più comodo, ad esempio, ricevere i costrutti id come stringa anziché puntatore a una stringa.

Quando avete a che fare con AWS CDK valori opzionali, inclusi valori primitivi e tipi complessi, dovreste testare esplicitamente i puntatori per assicurarvi che non lo siano prima di fare qualcosa con essi. nil Go non ha «zucchero sintattico» per aiutare a gestire i valori vuoti o mancanti come fanno altri linguaggi. Tuttavia, è garantita l'esistenza dei valori richiesti nei pacchetti di proprietà e in strutture simili (altrimenti la costruzione fallisce), quindi non è necessario verificare questi valori. nil

Costrutti e oggetti di scena

I costrutti, che rappresentano una o più AWS risorse e i relativi attributi associati, sono rappresentati in Go come interfacce. Ad esempio, awss3.Bucket è un'interfaccia. Ogni costrutto ha una funzione di fabbricaawss3.NewBucket, ad esempio restituire una struttura che implementa l'interfaccia corrispondente.

Tutte le funzioni di fabbrica richiedono tre argomenti: quello scope in cui viene definito il costrutto (il suo elemento principale nell'albero dei costrutti)id, un e props un insieme di coppie chiave/valore che il costrutto utilizza per configurare le risorse che crea. Il modello «pacchetto di attributi» viene utilizzato anche altrove in. AWS CDK

In Go, gli oggetti di scena sono rappresentati da un tipo di struttura specifico per ogni costrutto. Ad esempio, an awss3.Bucket accetta un argomento props di tipo. awss3.BucketProps Usa una struttura letterale per scrivere argomenti props.

var bucket = awss3.NewBucket(stack, jsii.String("MyBucket"), &awss3.BucketProps{ Versioned: jsii.Bool(true), })

Strutture generiche

In alcuni punti, AWS CDK utilizza JavaScript matrici o oggetti non tipizzati come input per un metodo. (Vedi, ad esempio, AWS CodeBuild il metodo.) BuildSpec.fromObject() In Go, questi oggetti sono rappresentati rispettivamente come sezioni e un'interfaccia vuota.

Il CDK fornisce funzioni di supporto variadiche, come jsii.Strings la creazione di sezioni contenenti tipi primitivi.

jsii.Strings("One", "Two", "Three")

Sviluppo di costrutti personalizzati

In Go, di solito è più semplice scrivere un nuovo costrutto che estenderne uno esistente. Innanzitutto, definisci un nuovo tipo di struttura, incorporando in modo anonimo uno o più tipi esistenti se desideri una semantica simile a un'estensione. Scrivi metodi per ogni nuova funzionalità che stai aggiungendo e i campi necessari per contenere i dati di cui hanno bisogno. Definisci un'interfaccia props se il tuo costrutto ne ha bisogno. Infine, scrivi una funzione di fabbrica NewMyConstruct() per restituire un'istanza del tuo costrutto.

Se state semplicemente modificando alcuni valori predefiniti su un costrutto esistente o aggiungete un comportamento semplice al momento dell'istanziazione, non avete bisogno di tutta quell'installazione idraulica. Invece, scrivi una funzione di fabbrica che richiami la funzione di fabbrica del costrutto che stai «estendendo». In altri linguaggi CDK, ad esempio, è possibile creare un TypedBucket costrutto che impone il tipo di oggetti in un bucket Amazon S3 sovrascrivendo il s3.Bucket tipo e, nell'inizializzatore del nuovo tipo, aggiungendo una policy di bucket che consenta di aggiungere al bucket solo estensioni di nomi di file specificate. In Go, è più semplice scrivere semplicemente un messaggio NewTypedBucket che restituisca una s3.Bucket (istanziata utilizzandos3.NewBucket) a cui è stata aggiunta una policy bucket appropriata. Non è necessario alcun nuovo tipo di costrutto perché la funzionalità è già disponibile nel costrutto bucket standard; il nuovo «costrutto» fornisce solo un modo più semplice per configurarlo.

Creazione, sintesi e distribuzione

Compila AWS CDK automaticamente l'app prima di eseguirla. Tuttavia, può essere utile creare l'app manualmente per verificare la presenza di errori ed eseguire test. Puoi farlo eseguendo il comando go build al prompt dei comandi mentre ti trovi nella directory principale del tuo progetto.

Esegui tutti i test che hai scritto eseguendoli go test al prompt dei comandi.

Gli stack definiti nell' AWS CDK app possono essere sintetizzati e distribuiti singolarmente o insieme utilizzando i comandi seguenti. In genere, dovresti trovarti nella directory principale del tuo progetto quando li pubblichi.

  • cdk synth: sintetizza un AWS CloudFormation modello da uno o più stack dell'app. AWS CDK

  • cdk deploy: distribuisce le risorse definite da uno o più stack dell'app su. AWS CDK AWS

È possibile specificare i nomi di più stack da sintetizzare o distribuire in un unico comando. Se l'app definisce solo uno stack, non è necessario specificarlo.

cdk synth # app defines single stack cdk deploy Happy Grumpy # app defines two or more stacks; two are deployed

Puoi anche usare i caratteri jolly * (qualsiasi numero di caratteri) e? (qualsiasi carattere singolo) per identificare le pile in base allo schema. Quando usate i caratteri jolly, racchiudete il pattern tra virgolette. Altrimenti, la shell potrebbe provare ad espanderlo ai nomi dei file nella directory corrente prima che vengano passati al AWS CDK Toolkit.

cdk synth "Stack?" # Stack1, StackA, etc. cdk deploy "*Stack" # PipeStack, LambdaStack, etc.
Suggerimento

Non è necessario sintetizzare esplicitamente gli stack prima di distribuirli; cdk deploy esegue questo passaggio per assicurarsi che venga distribuito il codice più recente.

Per la documentazione completa del comando, consulta. cdk AWS CDK Toolkit (cdkcomando)