Trabalhando com o AWS CDK in Go - AWS Cloud Development Kit (AWS CDK) v2

Este é o Guia do Desenvolvedor AWS CDK v2. O CDK v1 antigo entrou em manutenção em 1º de junho de 2022 e encerrou o suporte em 1º de junho de 2023.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Trabalhando com o AWS CDK in Go

Go é uma linguagem de cliente totalmente compatível com o AWS Cloud Development Kit (AWS CDK) e é considerada estável. Trabalhar com o AWS CDK in Go usa ferramentas familiares. A versão Go do AWS CDK evento usa identificadores no estilo Go.

Ao contrário das outras linguagens suportadas pelo CDK, o Go não é uma linguagem de programação tradicional orientada a objetos. O Go usa composição em que outras linguagens geralmente aproveitam a herança. Tentamos empregar abordagens idiomáticas de Go o máximo possível, mas há lugares em que o CDK pode ser diferente.

Este tópico fornece orientação ao trabalhar com o AWS CDK in Go. Veja a postagem do blog do anúncio para ver um passo a passo de um projeto Go simples para o. AWS CDK

Conceitos básicos do Go

Para trabalhar com o AWS CDK, você deve ter uma AWS conta e credenciais e ter instalado o Node.js e o AWS CDK Toolkit. Consulte Começando com o AWS CDK.

As vinculações Go para o AWS CDK usam o conjunto de ferramentas Go padrão, v1.18 ou posterior. Você pode usar o editor de sua escolha.

nota

Suspensão de uso de idioma de terceiros: a versão do idioma só é suportada até seu EOL (End Of Life) compartilhado pelo fornecedor ou pela comunidade e está sujeita a alterações mediante aviso prévio.

Criação de um projeto

Você cria um novo AWS CDK projeto invocando cdk init em um diretório vazio. Use a --language opção e especifiquego:

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

cdk initusa o nome da pasta do projeto para nomear vários elementos do projeto, incluindo classes, subpastas e arquivos. Os hífens no nome da pasta são convertidos em sublinhados. No entanto, caso contrário, o nome deve seguir a forma de um identificador Go; por exemplo, ele não deve começar com um número ou conter espaços.

O projeto resultante inclui uma referência ao módulo AWS CDK Go principal,github.com/aws/aws-cdk-go/awscdk/v2, emgo.mod. Problema go get para instalar este e outros módulos necessários.

Gerenciando módulos da AWS Construct Libr

Na maioria das AWS CDK documentações e exemplos, a palavra “módulo” é frequentemente usada para se referir aos módulos da AWS Construct Library, um ou mais por AWS serviço, o que difere do uso idiomático do termo em Go. A CDK Construct Library é fornecida em um módulo Go com os módulos individuais da Construct Library, que suportam os vários AWS serviços, fornecidos como pacotes Go dentro desse módulo.

O suporte da AWS Construct Library de alguns serviços está em mais de um módulo da Construct Library (pacote Go). Por exemplo, o Amazon Route 53 tem três módulos da Construct Library, além awsroute53 do pacote principal awsroute53patternsawsroute53resolver, chamado, awsroute53targets e.

O AWS CDK pacote principal, que você precisará na maioria dos AWS CDK aplicativos, é importado no código Go comogithub.com/aws/aws-cdk-go/awscdk/v2. Os pacotes para os vários serviços da AWS Construct Library estão abaixogithub.com/aws/aws-cdk-go/awscdk/v2. Por exemplo, o namespace do módulo Amazon S3 é. github.com/aws/aws-cdk-go/awscdk/v2/awss3

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

Depois de importar os módulos da Construct Library (pacotes Go) para os serviços que você deseja usar em seu aplicativo, você acessa as construções desse módulo usando, por exemplo,awss3.Bucket.

Gerenciando dependências em Go

Em Go, as versões das dependências são definidas emgo.mod. O padrão go.mod é semelhante ao mostrado aqui.

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 )

Os nomes dos pacotes (módulos, no jargão do Go) são especificados por URL com o número de versão necessário anexado. O sistema de módulos do Go não suporta intervalos de versões.

go getExecute o comando para instalar todos os módulos necessários e atualizargo.mod. Para ver uma lista das atualizações disponíveis para suas dependências, emitago list -m -u all.

AWS CDK expressões idiomáticas em Go

Nomes de campos e métodos

Os nomes de campos e métodos usam camel casing (likeThis) in TypeScript, o idioma de origem do CDK. Em Go, eles seguem as convenções de Go, assim como Pascal-cased (). LikeThis

Limpeza

Em seu main método, use defer jsii.Close() para garantir que seu aplicativo CDK se limpe sozinho.

Valores ausentes e conversão de ponteiro

Em Go, os valores ausentes em AWS CDK objetos, como pacotes de propriedades, são representados pornil. Go não tem tipos anuláveis; o único tipo que pode conter nil é um ponteiro. Para permitir que os valores sejam opcionais, então, todas as propriedades, argumentos e valores de retorno do CDK são ponteiros, mesmo para tipos primitivos. Isso se aplica tanto aos valores obrigatórios quanto aos opcionais, portanto, se um valor obrigatório se tornar opcional posteriormente, nenhuma alteração significativa no tipo será necessária.

Ao passar valores ou expressões literais, use as seguintes funções auxiliares para criar ponteiros para os valores.

  • jsii.String

  • jsii.Number

  • jsii.Bool

  • jsii.Time

Para fins de consistência, recomendamos que você use ponteiros de forma semelhante ao definir suas próprias construções, mesmo que pareça mais conveniente, por exemplo, receber suas construções id como uma string em vez de um ponteiro para uma string.

Ao lidar com AWS CDK valores opcionais, incluindo valores primitivos e tipos complexos, você deve testar explicitamente os ponteiros para garantir que não estejam nil antes de fazer nada com eles. O Go não tem “açúcar sintático” para ajudar a lidar com valores vazios ou ausentes, como algumas outras linguagens. No entanto, é garantido que os valores necessários em pacotes de propriedades e estruturas similares existam (caso contrário, a construção falhará), portanto, esses valores não precisam ser verificadosnil.

Construções e adereços

As construções, que representam um ou mais AWS recursos e seus atributos associados, são representadas em Go como interfaces. Por exemplo, awss3.Bucket é uma interface. Cada construção tem uma função de fábricaawss3.NewBucket, como retornar uma estrutura que implementa a interface correspondente.

Todas as funções de fábrica usam três argumentos: o scope no qual a construção está sendo definida (seu pai na árvore de construção)id, an e props um pacote de pares de chave/valor que a construção usa para configurar os recursos que cria. O padrão “pacote de atributos” também é usado em outras partes do AWS CDK.

Em Go, os adereços são representados por um tipo de estrutura específico para cada construção. Por exemplo, an awss3.Bucket usa um argumento props do tipoawss3.BucketProps. Use uma estrutura literal para escrever argumentos de adereços.

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

Estruturas genéricas

Em alguns lugares, o AWS CDK usa JavaScript matrizes ou objetos não digitados como entrada para um método. (Veja, por exemplo, AWS CodeBuild o BuildSpec.fromObject()método de.) Em Go, esses objetos são representados como fatias e uma interface vazia, respectivamente.

O CDK fornece funções auxiliares variáveis, como jsii.Strings para criar fatias contendo tipos primitivos.

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

Desenvolvendo construções personalizadas

Em Go, geralmente é mais simples escrever uma nova construção do que estender uma existente. Primeiro, defina um novo tipo de estrutura, incorporando anonimamente um ou mais tipos existentes se uma semântica semelhante à extensão for desejada. Escreva métodos para qualquer nova funcionalidade que você esteja adicionando e os campos necessários para armazenar os dados necessários. Defina uma interface de adereços se sua construção precisar de uma. Por fim, escreva uma função de fábrica NewMyConstruct() para retornar uma instância da sua construção.

Se você está simplesmente alterando alguns valores padrão em uma construção existente ou adicionando um comportamento simples na instanciação, você não precisa de todo esse encanamento. Em vez disso, escreva uma função de fábrica que chame a função de fábrica da construção que você está “estendendo”. Em outras linguagens de CDK, por exemplo, você pode criar uma TypedBucket construção que imponha o tipo de objeto em um bucket do Amazon S3 substituindo s3.Bucket o tipo e, no inicializador do seu novo tipo, adicionando uma política de bucket que permite que somente extensões de nome de arquivo especificadas sejam adicionadas ao bucket. Em Go, é mais fácil simplesmente escrever um NewTypedBucket que retorne um s3.Bucket (uso instanciados3.NewBucket) ao qual você adicionou uma política de bucket apropriada. Nenhum novo tipo de construção é necessário porque a funcionalidade já está disponível na construção padrão do bucket; a nova “construção” fornece apenas uma maneira mais simples de configurá-la.

Construindo, sintetizando e implantando

Ele compila AWS CDK automaticamente seu aplicativo antes de executá-lo. No entanto, pode ser útil criar seu aplicativo manualmente para verificar erros e executar testes. Você pode fazer isso emitindo go build em um prompt de comando enquanto estiver no diretório raiz do seu projeto.

Execute todos os testes que você escreveu executando go test em um prompt de comando.

As pilhas definidas em seu AWS CDK aplicativo podem ser sintetizadas e implantadas individualmente ou em conjunto usando os comandos abaixo. Geralmente, você deve estar no diretório principal do seu projeto ao emiti-los.

  • cdk synth: sintetiza um AWS CloudFormation modelo a partir de uma ou mais pilhas do seu aplicativo. AWS CDK

  • cdk deploy: implanta os recursos definidos por uma ou mais pilhas em seu AWS CDK aplicativo para. AWS

Você pode especificar os nomes de várias pilhas a serem sintetizadas ou implantadas em um único comando. Se seu aplicativo definir apenas uma pilha, você não precisará especificá-la.

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

Você também pode usar os curingas * (qualquer número de caracteres) e? (qualquer caractere único) para identificar pilhas por padrão. Ao usar curingas, coloque o padrão entre aspas. Caso contrário, o shell pode tentar expandi-lo para os nomes dos arquivos no diretório atual antes de serem passados para o AWS CDK Toolkit.

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

Você não precisa sintetizar explicitamente as pilhas antes de implantá-las; cdk deploy executa essa etapa para garantir que seu código mais recente seja implantado.

Para obter a documentação completa do cdk comando, consulteAWS CDK Kit de ferramentas (cdkcomando).