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á.
Importe e use a AWS Cloud Development Kit (AWS CDK) biblioteca para definir sua Nuvem AWS infraestrutura com uma linguagem de programação compatível.
Importar a AWS CDK biblioteca
A AWS CDK Biblioteca é frequentemente referida por TypeScript nome do pacote deaws-cdk-lib
. O nome real do pacote varia de acordo com o idioma. Veja a seguir um exemplo de como instalar e importar a biblioteca CDK:
Instalar | npm install aws-cdk-lib |
---|---|
Import | import * as cdk from 'aws-cdk-lib'; |
A classe de base construct
e o código de suporte estão na biblioteca constructs
. Os constructos experimentais, nos quais a API ainda está sendo refinada, são distribuídos como módulos separados.
Usando a referência AWS CDK da API
Use a referência da API AWS CDK ao desenvolver com AWS CDK.
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 de não constructos que fornecem a funcionalidade usada por constructos no módulo.
-
Estruturas: estruturas de dados (pacotes de atributos) que definem a estrutura de valores compostos, como propriedades (o argumento
props
de constructos) e opções. -
Interfaces: as interfaces, cujos nomes começam todos com “I”, definem a funcionalidade mínima absoluta para o constructo 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 constructos. 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 constructos
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 sua aplicação CDK usando, por exemplo, a classe Bucket
. 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 sua aplicação CDK, você deve sempre usar classes concretas, como Bucket
. Ao especificar o tipo de argumento que você está aceitando em um de seus próprios constructos, use o tipo de interface, como IBucket
, se estiver preparado para lidar com recursos externos (ou seja, não precisará alterá-los). Se você precisar de um constructo definido 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 constructos. 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á-las por seus nomes, que seguem o padrão de um “I” inicial seguido pelo nome de algum outro constructo (por exemplo, IBucket
). As mesmas regras se aplicam.
Gerenciamento de 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 compatíveis. 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 (instalador de pacotes para Python) |
Java | Maven |
C# | NuGet |
Go | Módulos Go |
Quando você cria um novo projeto usando o AWS CDK CLI cdk init
comando, dependências para as bibliotecas principais do CDK e construções estáveis são especificadas automaticamente.
Para obter mais informações sobre o gerenciamento de dependências das linguagens de programação compatível, consulte o seguinte:
Comparando AWS CDK em 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.
Importação de um módulo
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(...);
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. (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(...)
Criação da instância de uma estrutura
AWS CDK as classes de construção têm o mesmo nome em todas as linguagens suportadas. A maioria das linguagens usa a palavra-chave new
para instanciar uma classe (Python e Go não). Além disso, na maioria das linguagens, a palavra-chave this
se refere à instância atual. (Python usa self
por convenção.) Você deve passar uma referência à instância atual como parâmetro scope
para cada constructo criado.
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.
// Instantiate default Bucket
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket');
// Instantiate Bucket with bucketName and versioned properties
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', {
bucketName: 'amzn-s3-demo-bucket',
versioned: true,
});
// Instantiate Bucket with websiteRedirect, which has its own sub-properties
const bucket = new s3.Bucket(this, 'amzn-s3-demo-bucket', {
websiteRedirect: {host: 'aws.amazon.com'}});
Python não usa uma palavra-chave new
ao instanciar uma classe. O argumento de propriedades é representado usando argumentos de palavra-chave e os argumentos são nomeados usando snake_case
.
Se um valor de props for em si um pacote de atributos, 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, "amzn-s3-demo-bucket")
# Instantiate Bucket with bucket_name and versioned properties
bucket = s3.Bucket(self, "amzn-s3-demo-bucket", bucket_name="amzn-s3-demo-bucket", versioned=true)
# Instantiate Bucket with website_redirect, which has its own sub-properties
bucket = s3.Bucket(self, "amzn-s3-demo-bucket", website_redirect=s3.WebsiteRedirect(
host_name="aws.amazon.com"))
Acesso a 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.
Os nomes são camelCase
.
bucket.bucketArn
Os nomes são snake_case
.
bucket.bucket_arn
Constantes Enum
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 com I
. Uma classe concreta indica as interfaces que ela implementa usando a palavra-chave implements
.
nota
JavaScript não tem um recurso de interface. Você pode ignorar a palavra-chave implements
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);
}
}
O Python não tem um atributo 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)