Travailler avec le AWS CDK in Go - AWS Cloud Development Kit (AWS CDK) v2

Ceci est le guide du AWS CDK développeur de la version 2. L'ancien CDK v1 est entré en maintenance le 1er juin 2022 et a pris fin le 1er juin 2023.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Travailler avec le AWS CDK in Go

Go est un langage client entièrement pris en charge pour le AWS Cloud Development Kit (AWS CDK) et est considéré comme stable. L'utilisation d' AWS CDK in Go utilise des outils familiers. La version Go de l'événement utilise AWS CDK des identifiants de type Go.

Contrairement aux autres langages pris en charge par le CDK, Go n'est pas un langage de programmation orienté objet traditionnel. Go utilise la composition alors que d'autres langages exploitent souvent l'héritage. Nous avons essayé d'utiliser autant que possible des approches de Go idiomatiques, mais il y a des endroits où le CDK peut différer.

Cette rubrique fournit des conseils lorsque vous travaillez avec le AWS CDK in Go. Consultez le billet de blog consacré à l'annonce pour une présentation d'un projet Go simple pour le AWS CDK.

Premiers pas avec Go

Pour utiliser le AWS CDK, vous devez disposer d'un AWS compte et d'informations d'identification et avoir installé Node.js et le AWS CDK Toolkit. veuillez consulter Commencer à utiliser le AWS CDK.

Les liaisons Go pour AWS CDK utiliser la chaîne d'outils Go standard, v1.18 ou ultérieure. Vous pouvez utiliser l'éditeur de votre choix.

Note

Obsolète linguistique tierce : la version linguistique n'est prise en charge que jusqu'à sa fin de vie (EOL) partagée par le fournisseur ou la communauté et est sujette à modification avec préavis.

Création d’un projet

Vous créez un nouveau AWS CDK projet en l'invoquant cdk init dans un répertoire vide. Utilisez l'--languageoption et spécifiez go :

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

cdk initutilise le nom du dossier du projet pour nommer les différents éléments du projet, notamment les classes, les sous-dossiers et les fichiers. Les traits d'union figurant dans le nom du dossier sont convertis en traits de soulignement. Toutefois, le nom doit sinon prendre la forme d'un identifiant Go ; par exemple, il ne doit pas commencer par un chiffre ni contenir d'espaces.

Le projet qui en résulte inclut une référence au module AWS CDK Go de base,github.com/aws/aws-cdk-go/awscdk/v2, dansgo.mod. Problème lors go get de l'installation de ce module et des autres modules requis.

Gestion des modules AWS de la bibliothèque Construct

Dans la plupart des AWS CDK documentations et des exemples, le mot « module » est souvent utilisé pour désigner les modules de la bibliothèque AWS Construct, un ou plusieurs par AWS service, ce qui diffère de l'utilisation idiomatique du terme par Go. La bibliothèque CDK Construct est fournie dans un module Go avec les modules individuels de la bibliothèque Construct, qui prennent en charge les différents AWS services, fournis sous forme de packages Go dans ce module.

La prise en charge de la bibliothèque de AWS construction par certains services se trouve dans plusieurs modules de bibliothèque de construction (package Go). Par exemple, Amazon Route 53 possède trois modules Construct Library en plus awsroute53 du package principalawsroute53patterns, nomméawsroute53resolver, etawsroute53targets.

Le package AWS CDK de base, dont vous aurez besoin dans la plupart des AWS CDK applications, est importé dans le code Go sous le nom degithub.com/aws/aws-cdk-go/awscdk/v2. Des packages pour les différents services de la bibliothèque AWS Construct se trouvent sous cette rubriquegithub.com/aws/aws-cdk-go/awscdk/v2. Par exemple, l'espace de noms du module Amazon S3 estgithub.com/aws/aws-cdk-go/awscdk/v2/awss3.

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

Une fois que vous avez importé les modules Construct Library (packages Go) pour les services que vous souhaitez utiliser dans votre application, vous accédez aux constructions de ce module en utilisant, par exemple,awss3.Bucket.

Gestion des dépendances dans Go

Dans Go, les versions des dépendances sont définies dansgo.mod. La valeur par défaut go.mod est similaire à celle présentée ici.

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 )

Les noms des packages (modules, dans le langage Go) sont spécifiés par URL avec le numéro de version requis ajouté. Le système de modules de Go ne prend pas en charge les plages de versions.

Émettez la go get commande pour installer tous les modules requis et les mettre à jourgo.mod. Pour voir la liste des mises à jour disponibles pour vos dépendances, publiezgo list -m -u all.

AWS CDK Expressions idiomatiques en Go

Noms des champs et des méthodes

Les noms de champs et de méthodes utilisent camel casing (likeThis) dans TypeScript, la langue d'origine du CDK. Dans Go, ils suivent les conventions de Go, tout comme Pascal-cased (). LikeThis

Nettoyage

Dans votre main méthode, utilisez-le defer jsii.Close() pour vous assurer que votre application CDK se nettoie d'elle-même.

Valeurs manquantes et conversion du pointeur

Dans Go, les valeurs manquantes dans AWS CDK des objets tels que les ensembles de propriétés sont représentées parnil. Go n'a pas de types nullables ; le seul type qui peut contenir nil est un pointeur. Pour permettre aux valeurs d'être facultatives, toutes les propriétés, tous les arguments et toutes les valeurs de retour du CDK sont des pointeurs, même pour les types primitifs. Cela s'applique aux valeurs obligatoires ainsi qu'aux valeurs facultatives. Ainsi, si une valeur requise devient facultative ultérieurement, aucun changement radical de type n'est nécessaire.

Lorsque vous transmettez des valeurs ou des expressions littérales, utilisez les fonctions d'assistance suivantes pour créer des pointeurs vers les valeurs.

  • jsii.String

  • jsii.Number

  • jsii.Bool

  • jsii.Time

Pour des raisons de cohérence, nous vous recommandons d'utiliser des pointeurs de la même manière lorsque vous définissez vos propres constructions, même s'il peut sembler plus pratique, par exemple, de recevoir vos constructions id sous forme de chaîne plutôt que de pointeur vers une chaîne.

Lorsque vous manipulez des AWS CDK valeurs facultatives, y compris des valeurs primitives ou des types complexes, vous devez tester explicitement les pointeurs pour vous assurer qu'ils ne le sont pas nil avant de faire quoi que ce soit avec eux. Go n'a pas de « sucre syntaxique » pour aider à gérer les valeurs vides ou manquantes comme le font d'autres langages. Cependant, l'existence des valeurs requises dans les ensembles de propriétés et les structures similaires est garantie (sinon la construction échoue), il n'est donc pas nécessaire de vérifier ces valeurs. nil

Constructions et accessoires

Les constructions, qui représentent une ou plusieurs AWS ressources et leurs attributs associés, sont représentées dans Go sous forme d'interfaces. Par exemple, awss3.Bucket c'est une interface. Chaque construction possède une fonction d'usine, telle que awss3.NewBucket celle de renvoyer une structure qui implémente l'interface correspondante.

Toutes les fonctions d'usine prennent trois arguments : celui scope dans lequel la construction est définie (son parent dans l'arbre de construction), un idprops, et un ensemble de paires clé/valeur que la construction utilise pour configurer les ressources qu'elle crée. Le modèle « ensemble d'attributs » est également utilisé ailleurs dans le AWS CDK.

Dans Go, les accessoires sont représentés par un type de structure spécifique pour chaque construction. Par exemple, an awss3.Bucket prend un argument props de typeawss3.BucketProps. Utilisez une structure littérale pour écrire les arguments des accessoires.

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

Structures génériques

À certains endroits, il AWS CDK utilise des JavaScript tableaux ou des objets non typés comme entrée dans une méthode. (Voir, par exemple, AWS CodeBuild la BuildSpec.fromObject()méthode.) Dans Go, ces objets sont respectivement représentés sous forme de tranches et d'interface vide.

Le CDK fournit des fonctions d'assistance variadiques, par exemple jsii.Strings pour créer des tranches contenant des types primitifs.

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

Développement de constructions personnalisées

Dans Go, il est généralement plus simple d'écrire une nouvelle construction que d'étendre une construction existante. Définissez d'abord un nouveau type de structure, en incorporant de manière anonyme un ou plusieurs types existants si vous souhaitez utiliser une sémantique semblable à une extension. Écrivez des méthodes pour chaque nouvelle fonctionnalité que vous ajoutez et les champs nécessaires pour contenir les données dont ils ont besoin. Définissez une interface d'accessoires si votre construction en a besoin. Enfin, écrivez une fonction d'usine NewMyConstruct() pour renvoyer une instance de votre construction.

Si vous modifiez simplement certaines valeurs par défaut d'une construction existante ou si vous ajoutez un comportement simple lors de l'instanciation, vous n'avez pas besoin de toute cette plomberie. Écrivez plutôt une fonction d'usine qui appelle la fonction d'usine de la construction que vous « étendez ». Dans d'autres langages CDK, par exemple, vous pouvez créer une TypedBucket construction qui impose le type d'objets dans un compartiment Amazon S3 en remplaçant le s3.Bucket type et, dans l'initialiseur de votre nouveau type, en ajoutant une politique de compartiment autorisant uniquement l'ajout d'extensions de nom de fichier spécifiées au compartiment. Dans Go, il est plus facile de simplement écrire un NewTypedBucket qui renvoie un s3.Bucket (instancié à l'aides3.NewBucket) auquel vous avez ajouté une politique de compartiment appropriée. Aucun nouveau type de construction n'est nécessaire car la fonctionnalité est déjà disponible dans la construction standard du bucket ; la nouvelle « construction » fournit simplement un moyen plus simple de la configurer.

Création, synthèse et déploiement

Compile AWS CDK automatiquement votre application avant de l'exécuter. Cependant, il peut être utile de créer votre application manuellement pour vérifier les erreurs et exécuter des tests. Vous pouvez le faire go build en lançant une commande dans le répertoire racine de votre projet.

Exécutez tous les tests que vous avez écrits go test à l'aide d'une invite de commande.

Les piles définies dans votre AWS CDK application peuvent être synthétisées et déployées individuellement ou ensemble à l'aide des commandes ci-dessous. En général, vous devez vous trouver dans le répertoire principal de votre projet lorsque vous les publiez.

  • cdk synth: synthétise un AWS CloudFormation modèle à partir d'une ou de plusieurs piles de votre AWS CDK application.

  • cdk deploy: Déploie les ressources définies par une ou plusieurs piles de votre AWS CDK application vers. AWS

Vous pouvez spécifier les noms de plusieurs piles à synthétiser ou à déployer en une seule commande. Si votre application ne définit qu'une seule pile, il n'est pas nécessaire de la spécifier.

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

Vous pouvez également utiliser les caractères génériques * (n'importe quel nombre de caractères) et ? (n'importe quel caractère) pour identifier les piles par modèle. Lorsque vous utilisez des caractères génériques, placez le motif entre guillemets. Sinon, le shell peut essayer de l'étendre aux noms des fichiers du répertoire actuel avant qu'ils ne soient transmis au AWS CDK Toolkit.

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

Il n'est pas nécessaire de synthétiser explicitement les piles avant de les déployer. cdk deploy Effectuez cette étape pour vous assurer que votre dernier code est déployé.

Pour une documentation complète de la cdk commande, consultezAWS CDK Boîte à outils (cdkcommande).