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á.
Antes de implantar uma AWS Cloud Development Kit (AWS CDK) pilha, ela deve primeiro ser sintetizada. A síntese de pilha é o processo de produzir um AWS CloudFormation modelo e artefatos de implantação a partir de uma pilha de CDK. O modelo e os artefatos são conhecidos como conjunto de nuvem. O conjunto de nuvem é o que é implantado para provisionar seus recursos na AWS. Para obter mais informações sobre o funcionamento das implantações, consulte Como as AWS CDK implantações funcionam.
Como a síntese e o bootstrapping funcionam juntos
Para que seus aplicativos CDK sejam implantados adequadamente, os CloudFormation modelos produzidos durante a síntese devem especificar corretamente os recursos criados durante a inicialização. Portanto, o bootstrapping e a síntese devem se complementar para que uma implantação seja bem-sucedida:
-
O bootstrapping é um processo único de configuração de um AWS ambiente para implantações. AWS CDK Ele configura AWS recursos específicos em seu ambiente que são usados pelo CDK para implantações. Eles são comumente chamados de recursos de bootstrap. Para instruções sobre bootstrapping, consulte Inicialize seu ambiente para uso com o AWS CDK.
-
CloudFormation os modelos produzidos durante a síntese incluem informações sobre quais recursos de bootstrap usar. Durante a síntese, o CDK CLI não sabe especificamente como seu AWS ambiente foi inicializado. Em vez disso, o CDK CLI produz CloudFormation modelos com base no sintetizador que você configura para cada pilha de CDK. Para que uma implantação seja bem-sucedida, o sintetizador deve produzir CloudFormation modelos que façam referência aos recursos de bootstrap corretos a serem usados.
O CDK vem com um sintetizador padrão e uma configuração de bootstrapping projetados para funcionarem juntos. Se você personalizar um, deverá aplicar personalizações relevantes ao outro.
Como configurar a síntese de pilhas do CDK
Você configura a síntese de pilhas do CDK usando a propriedade synthesizer
da sua instância Stack
. Essa propriedade especifica como suas pilhas do CDK serão sintetizadas. Você fornece uma instância de uma classe que implementa IStackSynthesizer
ou IReusableStackSynthesizer
. Seus métodos serão invocados toda vez que um ativo for adicionado à pilha ou quando a pilha for sintetizada. Veja a seguir um exemplo básico de como usar essa propriedade na sua pilha:
new MyStack(this, 'MyStack', {
// stack properties
synthesizer: new DefaultStackSynthesizer({
// synthesizer properties
}),
});
Você também pode configurar um sintetizador para todas as pilhas do CDK em sua aplicação do CDK usando a propriedade defaultStackSynthesizer
da sua instância: App
import { App, Stack, DefaultStackSynthesizer } from 'aws-cdk-lib';
const app = new App({
// Configure for all stacks in this app
defaultStackSynthesizer: new DefaultStackSynthesizer({
/* ... */
}),
});
Por padrão, os AWS CDK usosDefaultStackSynthesizer
. Se você não configurar um sintetizador, esse sintetizador será usado.
Se você não modificar o bootstrapping, como fazer alterações na pilha ou no modelo de bootstrap, não precisará modificar a síntese da pilha. Você nem precisa fornecer um sintetizador. O CDK usará a classe DefaultStackSynthesizer
padrão para configurar a síntese da pilha do CDK para interagir adequadamente com sua pilha de bootstrap.
Como sintetizar uma pilha do CDK
Para sintetizar uma pilha de CDK, use a interface de linha de comando ( AWS CDK AWS CDK CLI) cdk synth
comando. Para obter mais informações sobre esse comando, incluindo as opções que você pode usar com esse comando, consulte cdk synthesize.
Se sua aplicação do CDK contiver uma única pilha, ou para sintetizar todas as pilhas, você não precisará fornecer o nome da pilha do CDK como argumento. Por padrão, o CDK CLI sintetizará suas pilhas de CDK em modelos. AWS CloudFormation
Um modelo json
formatado para cada pilha é salvo no diretório cdk.out
. Se sua aplicação contiver uma única pilha, um modelo yaml
formatado será impresso em stdout
. Veja um exemplo a seguir:
$
cdk synth
Resources: CDKMetadata: Type: AWS::CDK::Metadata Properties: Analytics: v2:deflate64:H4sIAAAAAAAA/unique-identifier
Metadata: aws:cdk:path: CdkAppStack/CDKMetadata/Default Condition: CDKMetadataAvailable...
Se sua aplicação do CDK contiver várias pilhas, você poderá fornecer o ID lógico de uma pilha para sintetizar uma única pilha. Veja um exemplo a seguir:
$
cdk synth
MyStackName
Se você não sintetizar uma pilha e executarcdk deploy
, o CDK CLI sintetizará automaticamente sua pilha antes da implantação.
Como a síntese funciona por padrão
Lógica gerada IDs em seu AWS CloudFormation modelo
Quando você sintetiza uma pilha de CDK para produzir um CloudFormation modelo, a lógica é gerada a partir das seguintes fontes, IDs formatadas como: <construct-path><construct-ID><unique-hash>
-
Caminho de constructo: o caminho inteiro para o constructo em sua aplicação do CDK. Esse caminho exclui o ID do constructo L1, que é sempre
Resource
ouDefault
, e o ID da pilha de nível superior da qual ela faz parte. -
ID do constructo: o ID que você fornece como segundo argumento ao instanciar seu constructo.
-
Hash exclusivo — Ele AWS CDK gera um hash exclusivo de 8 caracteres usando um algoritmo de hash determinístico. Esse hash exclusivo ajuda a garantir que os valores lógicos de ID em seu modelo sejam exclusivos uns dos outros. O comportamento determinístico dessa geração de hash garante que o valor de ID lógico gerado para cada constructo permaneça o mesmo toda vez que você realizar a síntese. O valor de hash só mudará se você modificar valores específicos do constructo, como o ID ou o caminho do constructo.
IDs Os lógicos têm um comprimento máximo de 255 caracteres. Portanto, AWS CDK truncará o caminho da construção e o ID da construção, se necessário, para se manter dentro desse limite.
Veja a seguir um exemplo de um constructo que define um bucket do Amazon Simple Storage Service (Amazon S3). Aqui, passamos myBucket
como ID para o nosso constructo:
import * as cdk from 'aws-cdk-lib';
import { Construct} from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
export class MyCdkAppStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Define the S3 bucket
new s3.Bucket(this, 'myBucket', {
versioned: true,
removalPolicy: cdk.RemovalPolicy.DESTROY,
});
}
}
Quando executamos cdk synth
, um ID lógico no formato de myBucket
é gerado. Veja a seguir um exemplo desse recurso no AWS CloudFormation modelo gerado:unique-hash
Resources:
myBucket5AF9C99B:
Type: AWS::S3::Bucket
Properties:
VersioningConfiguration:
Status: Enabled
UpdateReplacePolicy: Delete
DeletionPolicy: Delete
Metadata:
aws:cdk:path: S3BucketAppStack/myBucket/Resource
Veja a seguir um exemplo de um constructo personalizado chamado Bar
que define um bucket do Amazon S3. O constructo Bar
inclui o constructo personalizado Foo
em seu caminho:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
// Define the Bar construct
export class Bar extends Construct {
constructor(scope: Construct, id: string) {
super(scope, id);
// Define an S3 bucket inside of Bar
new s3.Bucket(this, 'Bucket', {
versioned: true,
removalPolicy: cdk.RemovalPolicy.DESTROY,
} );
}
}
// Define the Foo construct
export class Foo extends Construct {
constructor(scope: Construct, id: string) {
super(scope, id);
// Create an instance of Bar inside Foo
new Bar(this, 'Bar');
}
}
// Define the CDK stack
export class MyCustomAppStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Instantiate Foo construct in the stack
new Foo(this, 'Foo');
}
}
Quando executamos cdk synth
, um ID lógico no formato de FooBarBucket
é gerado. Veja a seguir um exemplo desse recurso no AWS CloudFormation modelo gerado:unique-hash
Resources:
FooBarBucketBA3ED1FA:
Type: AWS::S3::Bucket
Properties:
VersioningConfiguration:
Status: Enabled
UpdateReplacePolicy: Delete
DeletionPolicy: Delete
# ...
Personalizar a síntese de pilhas do CDK
Se o comportamento padrão da síntese do CDK não atender às suas necessidades, você poderá personalizar a síntese do CDK. Para fazer isso, modifique o DefaultStackSynthesizer
, use outros sintetizadores integrados disponíveis ou crie seu próprio sintetizador. Para instruções, consulte Personalizar a síntese de pilhas do CDK.