Trabalhando com o AWS CDK em linguagens de programação suportadas - 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 em linguagens de programação suportadas

Use o AWS Cloud Development Kit (AWS CDK) para definir sua Nuvem AWS infraestrutura com uma linguagem de programação compatível.

Importando a biblioteca AWS Construct

AWS CDK Isso inclui a AWS Construct Library, uma coleção de construções organizadas por AWS serviço. As construções estáveis da biblioteca são oferecidas em um único módulo, chamado pelo nome TypeScript do pacote:aws-cdk-lib. O nome real do pacote varia de acordo com o idioma.

TypeScript
Instalar instalação do npm aws-cdk-lib
Importar const cdk = require ('aws-cdk-lib');
JavaScript
Instalar instalação do npm aws-cdk-lib
Importar const cdk = require ('aws-cdk-lib');
Python
Instalar instalação do python -m pip aws-cdk-lib
Importar importar aws_cdk como cdk
Java
Adicionar a pom.xml Group software.amazon.awscdk; artifact aws-cdk-lib
Importar importar software.amazon.awscdk.app; (for example)
C#
Instalar dotnet adiciona pacote Amazon.cdk.lib
Importar usando Amazon.cdk;

A classe construct base e o código de suporte estão no constructs módulo. As construções experimentais, nas quais a API ainda está sendo refinada, são distribuídas como módulos separados.

A referência AWS CDK da API

A Referência da AWS CDK API fornece documentação detalhada das construções (e outros componentes) na biblioteca. Uma versão da Referência da API é fornecida para cada linguagem de programação compatível.

O material de referência de cada módulo é dividido nas seções a seguir.

  • Visão geral: Material introdutório que você precisará conhecer para trabalhar com o serviço no AWS CDK, incluindo conceitos e exemplos.

  • Construções: classes de biblioteca que representam um ou mais AWS recursos concretos. Esses são os recursos ou padrões “selecionados” (L2) (recursos L3) que fornecem uma interface de alto nível com padrões sensatos.

  • Classes: classes não construtivas que fornecem a funcionalidade usada pelas construções no módulo.

  • Estruturas: estruturas de dados (pacotes de atributos) que definem a estrutura de valores compostos, como propriedades (o props argumento das construções) e opções.

  • Interfaces: as interfaces, cujos nomes começam todos com “I”, definem a funcionalidade mínima absoluta para a construção correspondente ou outra classe. O CDK usa interfaces de construção para representar AWS recursos definidos fora do seu AWS CDK aplicativo e referenciados por métodos como. Bucket.fromBucketArn()

  • Enums: coleções de valores nomeados para uso na especificação de determinados parâmetros de construção. O uso de um valor enumerado permite que o CDK verifique a validade desses valores durante a síntese.

  • CloudFormation Recursos: Essas construções L1, cujos nomes começam com “Cfn”, representam exatamente os recursos definidos na especificação. CloudFormation Eles são gerados automaticamente a partir dessa especificação em cada versão do CDK. Cada construção L2 ou L3 encapsula um ou mais recursos. CloudFormation

  • CloudFormation Tipos de propriedade: a coleção de valores nomeados que definem as propriedades de cada CloudFormation recurso.

Interfaces comparadas com classes de construção

AWS CDK Ele usa interfaces de uma forma específica que pode não ser óbvia, mesmo se você estiver familiarizado com interfaces como um conceito de programação.

O AWS CDK suporta o uso de recursos definidos fora dos aplicativos do CDK usando métodos comoBucket.fromBucketArn(). Os recursos externos não podem ser modificados e podem não ter todas as funcionalidades disponíveis com os recursos definidos em seu aplicativo CDK usando, por exemplo, a Bucket classe. As interfaces, então, representam a funcionalidade mínima disponível no CDK para um determinado tipo de AWS recurso, incluindo recursos externos.

Ao instanciar recursos em seu aplicativo CDK, você deve sempre usar classes concretas, como. Bucket Ao especificar o tipo de argumento que você está aceitando em uma de suas próprias construções, use o tipo de interface, como IBucket se estivesse preparado para lidar com recursos externos (ou seja, não precisará alterá-los). Se você precisar de uma construção definida pelo CDK, especifique o tipo mais geral que você pode usar.

Algumas interfaces são versões mínimas de propriedades ou pacotes de opções associados a classes específicas, em vez de construções. Essas interfaces podem ser úteis na criação de subclasses para aceitar argumentos que você passará para sua classe principal. Se você precisar de uma ou mais propriedades adicionais, convém implementar ou derivar dessa interface ou de um tipo mais específico.

nota

Algumas linguagens de programação suportadas pelo AWS CDK não têm um recurso de interface. Nessas linguagens, as interfaces são apenas classes comuns. Você pode identificá-los por seus nomes, que seguem o padrão de um “I” inicial seguido pelo nome de alguma outra construção (por exemploIBucket). As mesmas regras se aplicam.

Gerenciando dependências

As dependências do seu AWS CDK aplicativo ou biblioteca são gerenciadas usando ferramentas de gerenciamento de pacotes. Essas ferramentas são comumente usadas com as linguagens de programação.

Normalmente, ele AWS CDK suporta a ferramenta de gerenciamento de pacotes padrão ou oficial do idioma, se houver uma. Caso contrário, o AWS CDK suportará o idioma mais popular ou amplamente suportado. Você também poderá usar outras ferramentas, especialmente se elas funcionarem com as ferramentas suportadas. No entanto, o suporte oficial para outras ferramentas é limitado.

O AWS CDK suporta os seguintes gerenciadores de pacotes:

Idioma Ferramenta de gerenciamento de pacotes compatível
TypeScript/JavaScript NPM (Node Package Manager) ou Yarn
Python PIP (Package Installer para Python)
Java Maven
C# NuGet
Go Módulos Go

Quando você cria um novo projeto usando o AWS CDK CLI cdk init comando, as dependências das bibliotecas principais e construções estáveis do CDK são especificadas automaticamente.

Para obter mais informações sobre o gerenciamento de dependências para linguagens de programação compatíveis, consulte o seguinte:

AWS CDK Comparando TypeScript com outros idiomas

TypeScript foi a primeira linguagem suportada para o desenvolvimento de AWS CDK aplicativos. Portanto, uma quantidade substancial de exemplos de código CDK é gravada TypeScript. Se você estiver desenvolvendo em outra linguagem, pode ser útil comparar como o AWS CDK código é implementado em TypeScript comparação com a linguagem de sua escolha. Isso pode ajudá-lo a usar os exemplos em toda a documentação.

Importando um módulo

TypeScript/JavaScript

TypeScript suporta a importação de um namespace inteiro ou de objetos individuais de um namespace. Cada namespace inclui construções e outras classes para uso com um determinado serviço. AWS

// Import main CDK library as cdk import * as cdk from 'aws-cdk-lib'; // ES6 import preferred in TS const cdk = require('aws-cdk-lib'); // Node.js require() preferred in JS // Import specific core CDK classes import { Stack, App } from 'aws-cdk-lib'; const { Stack, App } = require('aws-cdk-lib'); // Import AWS S3 namespace as s3 into current namespace import { aws_s3 as s3 } from 'aws-cdk-lib'; // TypeScript const s3 = require('aws-cdk-lib/aws-s3'); // JavaScript // Having imported cdk already as above, this is also valid const s3 = cdk.aws_s3; // Now use s3 to access the S3 types const bucket = s3.Bucket(...); // Selective import of s3.Bucket import { Bucket } from 'aws-cdk-lib/aws-s3'; // TypeScript const { Bucket } = require('aws-cdk-lib/aws-s3'); // JavaScript // Now use Bucket to instantiate an S3 bucket const bucket = Bucket(...);
Python

Por exemplo TypeScript, o Python suporta importações de módulos com namespace e importações seletivas. Os namespaces em Python se parecem com aws_cdk. xxx, onde xxx representa um nome AWS de serviço, como s3 para Amazon S3. (O Amazon S3 é usado nesses exemplos).

# Import main CDK library as cdk import aws_cdk as cdk # Selective import of specific core classes from aws_cdk import Stack, App # Import entire module as s3 into current namespace import aws_cdk.aws_s3 as s3 # s3 can now be used to access classes it contains bucket = s3.Bucket(...) # Selective import of s3.Bucket into current namespace from aws_cdk.s3 import Bucket # Bucket can now be used to instantiate a bucket bucket = Bucket(...)
Java

As importações do Java funcionam de forma diferente TypeScript das nossas. Cada instrução de importação importa um único nome de classe de um determinado pacote ou todas as classes definidas nesse pacote (usando*). As classes podem ser acessadas usando o nome da classe por si só, se tiver sido importada, ou o nome da classe qualificada, incluindo seu pacote.

As bibliotecas têm o mesmo software.amazon.awscdk.services.xxx nome da AWS Construct Library (a biblioteca principal ésoftware.amazon.awscdk). O ID do grupo Maven para AWS CDK pacotes ésoftware.amazon.awscdk.

// Make certain core classes available import software.amazon.awscdk.Stack; import software.amazon.awscdk.App; // Make all Amazon S3 construct library classes available import software.amazon.awscdk.services.s3.*; // Make only Bucket and EventType classes available import software.amazon.awscdk.services.s3.Bucket; import software.amazon.awscdk.services.s3.EventType; // An imported class may now be accessed using the simple class name (assuming that name // does not conflict with another class) Bucket bucket = Bucket.Builder.create(...).build(); // We can always use the qualified name of a class (including its package) even without an // import directive software.amazon.awscdk.services.s3.Bucket bucket = software.amazon.awscdk.services.s3.Bucket.Builder.create(...) .build(); // Java 10 or later can use var keyword to avoid typing the type twice var bucket = software.amazon.awscdk.services.s3.Bucket.Builder.create(...) .build();
C#

Em C#, você importa tipos com a using diretiva. Há dois estilos. Um fornece acesso a todos os tipos no namespace especificado usando seus nomes simples. Com o outro, você pode se referir ao próprio namespace usando um alias.

Os pacotes são nomeados da mesma forma que Amazon.CDK.AWS.xxx os pacotes da AWS Construct Library. (O módulo principal éAmazon.CDK.)

// Make CDK base classes available under cdk using cdk = Amazon.CDK; // Make all Amazon S3 construct library classes available using Amazon.CDK.AWS.S3; // Now we can access any S3 type using its name var bucket = new Bucket(...); // Import the S3 namespace under an alias using s3 = Amazon.CDK.AWS.S3; // Now we can access an S3 type through the namespace alias var bucket = new s3.Bucket(...); // We can always use the qualified name of a type (including its namespace) even without a // using directive var bucket = new Amazon.CDK.AWS.S3.Bucket(...)
Go

Cada módulo da AWS Construct Library é fornecido como um pacote Go.

import ( "github.com/aws/aws-cdk-go/awscdk/v2" // CDK core package "github.com/aws/aws-cdk-go/awscdk/v2/awss3" // AWS S3 construct library module ) // now instantiate a bucket bucket := awss3.NewBucket(...) // use aliases for brevity/clarity import ( cdk "github.com/aws/aws-cdk-go/awscdk/v2" // CDK core package s3 "github.com/aws/aws-cdk-go/awscdk/v2/awss3" // AWS S3 construct library module ) bucket := s3.NewBucket(...)

Instanciando uma construção

AWS CDK as classes de construção têm o mesmo nome em todos os idiomas suportados. A maioria das linguagens usa a new palavra-chave para instanciar uma classe (Python e Go não). Além disso, na maioria dos idiomas, a palavra-chave this se refere à instância atual. (O Python é usado self por convenção.) Você deve passar uma referência à instância atual como scope parâmetro para cada construção criada.

O terceiro argumento para uma AWS CDK construção é props um objeto contendo os atributos necessários para construir a construção. Esse argumento pode ser opcional, mas quando necessário, as linguagens suportadas o tratam de forma idiomática. Os nomes dos atributos também são adaptados aos padrões de nomenclatura padrão da linguagem.

TypeScript/JavaScript
// Instantiate default Bucket const bucket = new s3.Bucket(this, 'MyBucket'); // Instantiate Bucket with bucketName and versioned properties const bucket = new s3.Bucket(this, 'MyBucket', { bucketName: 'my-bucket', versioned: true, }); // Instantiate Bucket with websiteRedirect, which has its own sub-properties const bucket = new s3.Bucket(this, 'MyBucket', { websiteRedirect: {host: 'aws.amazon.com'}});
Python

O Python não usa uma new palavra-chave ao instanciar uma classe. O argumento de propriedades é representado usando argumentos de palavra-chave e os argumentos são nomeados usandosnake_case.

Se um valor de props for em si um pacote de atributos, ele será representado por uma classe com o nome da propriedade, que aceita argumentos de palavra-chave para as subpropriedades.

Em Python, a instância atual é passada para os métodos como o primeiro argumento, que é nomeado self por convenção.

# Instantiate default Bucket bucket = s3.Bucket(self, "MyBucket") # Instantiate Bucket with bucket_name and versioned properties bucket = s3.Bucket(self, "MyBucket", bucket_name="my-bucket", versioned=true) # Instantiate Bucket with website_redirect, which has its own sub-properties bucket = s3.Bucket(self, "MyBucket", website_redirect=s3.WebsiteRedirect( host_name="aws.amazon.com"))
Java

Em Java, o argumento props é representado por uma classe chamada XxxxProps (por exemplo, BucketProps para as props da Bucket construção). Você constrói o argumento props usando um padrão de construtor.

Cada XxxxProps classe tem um construtor. Também existe um construtor conveniente para cada construção que constrói os adereços e a construção em uma única etapa, conforme mostrado no exemplo a seguir.

Os adereços são nomeados da mesma forma que em TypeScript, usandocamelCase.

// Instantiate default Bucket Bucket bucket = Bucket(self, "MyBucket"); // Instantiate Bucket with bucketName and versioned properties Bucket bucket = Bucket.Builder.create(self, "MyBucket") .bucketName("my-bucket").versioned(true) .build(); # Instantiate Bucket with websiteRedirect, which has its own sub-properties Bucket bucket = Bucket.Builder.create(self, "MyBucket") .websiteRedirect(new websiteRedirect.Builder() .hostName("aws.amazon.com").build()) .build();
C#

Em C#, os adereços são especificados usando um inicializador de objeto para uma classe chamada XxxxProps (por exemplo, BucketProps para os adereços da Bucket construção).

Os adereços são nomeados de forma semelhante a TypeScript, exceto usandoPascalCase.

É conveniente usar a var palavra-chave ao instanciar uma construção, para que você não precise digitar o nome da classe duas vezes. No entanto, seu guia de estilo de código local pode variar.

// Instantiate default Bucket var bucket = Bucket(self, "MyBucket"); // Instantiate Bucket with BucketName and Versioned properties var bucket = Bucket(self, "MyBucket", new BucketProps { BucketName = "my-bucket", Versioned = true}); // Instantiate Bucket with WebsiteRedirect, which has its own sub-properties var bucket = Bucket(self, "MyBucket", new BucketProps { WebsiteRedirect = new WebsiteRedirect { HostName = "aws.amazon.com" }});
Go

Para criar uma construção em Go, chame a função NewXxxxxx onde Xxxxxxx está o nome da construção. As propriedades das construções são definidas como uma estrutura.

Em Go, todos os parâmetros de construção são ponteiros, incluindo valores como números, booleanos e cadeias de caracteres. Use as funções de conveniência, como jsii.String criar esses ponteiros.

// Instantiate default Bucket bucket := awss3.NewBucket(stack, jsii.String("MyBucket"), nil) // Instantiate Bucket with BucketName and Versioned properties bucket1 := awss3.NewBucket(stack, jsii.String("MyBucket"), &awss3.BucketProps{ BucketName: jsii.String("my-bucket"), Versioned: jsii.Bool(true), }) // Instantiate Bucket with WebsiteRedirect, which has its own sub-properties bucket2 := awss3.NewBucket(stack, jsii.String("MyBucket"), &awss3.BucketProps{ WebsiteRedirect: &awss3.RedirectTarget{ HostName: jsii.String("aws.amazon.com"), }})

Acessando membros

É comum se referir a atributos ou propriedades de construções e outras AWS CDK classes e usar esses valores como, por exemplo, entradas para criar outras construções. As diferenças de nomenclatura descritas anteriormente para os métodos também se aplicam aqui. Além disso, em Java, não é possível acessar os membros diretamente. Em vez disso, um método getter é fornecido.

TypeScript/JavaScript

Os nomes sãocamelCase.

bucket.bucketArn
Python

Os nomes sãosnake_case.

bucket.bucket_arn
Java

Um método getter é fornecido para cada propriedade; esses nomes sãocamelCase.

bucket.getBucketArn()
C#

Os nomes sãoPascalCase.

bucket.BucketArn
Go

Os nomes sãoPascalCase.

bucket.BucketArn

Constantes de enumeração

As constantes Enum têm como escopo uma classe e têm nomes em maiúsculas com sublinhados em todos os idiomas (às vezes chamadas de). SCREAMING_SNAKE_CASE Como os nomes das classes também usam a mesma letra maiúscula em todos os idiomas suportados, exceto Go, os nomes de enumeração qualificados também são os mesmos nesses idiomas.

s3.BucketEncryption.KMS_MANAGED

Em Go, as constantes enum são atributos do namespace do módulo e são escritas da seguinte forma.

awss3.BucketEncryption_KMS_MANAGED

Interfaces de objetos

O AWS CDK usa interfaces de TypeScript objetos para indicar que uma classe implementa um conjunto esperado de métodos e propriedades. Você pode reconhecer uma interface de objeto porque seu nome começa comI. Uma classe concreta indica as interfaces que ela implementa usando a implements palavra-chave.

TypeScript/JavaScript
nota

JavaScript não tem um recurso de interface. Você pode ignorar a implements palavra-chave e os nomes das classes que a seguem.

import { IAspect, IConstruct } from 'aws-cdk-lib'; class MyAspect implements IAspect { public visit(node: IConstruct) { console.log('Visited', node.node.path); } }
Python

O Python não tem um recurso de interface. No entanto, para o, AWS CDK você pode indicar a implementação da interface decorando sua classe com@jsii.implements(interface).

from aws_cdk import IAspect, IConstruct import jsii @jsii.implements(IAspect) class MyAspect(): def visit(self, node: IConstruct) -> None: print("Visited", node.node.path)
Java
import software.amazon.awscdk.IAspect; import software.amazon.awscdk.IConstruct; public class MyAspect implements IAspect { public void visit(IConstruct node) { System.out.format("Visited %s", node.getNode().getPath()); } }
C#
using Amazon.CDK; public class MyAspect : IAspect { public void Visit(IConstruct node) { System.Console.WriteLine($"Visited ${node.Node.Path}"); } }
Go

As estruturas Go não precisam declarar explicitamente quais interfaces elas implementam. O compilador Go determina a implementação com base nos métodos e propriedades disponíveis na estrutura. Por exemplo, no código a seguir, MyAspect implementa a IAspect interface porque ela fornece um Visit método que usa uma construção.

type MyAspect struct { } func (a MyAspect) Visit(node constructs.IConstruct) { fmt.Println("Visited", *node.Node().Path()) }