Este é o Guia do Desenvolvedor AWS CDK v2. A versão CDK 1 mais antiga 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á.
Importar um AWS CloudFormation modelo existente
Importe recursos de um AWS CloudFormation modelo para seus AWS Cloud Development Kit (AWS CDK) aplicativos usando a cloudformation-include.CfnInclude
construção para converter recursos em construções L1.
Após a importação, você pode trabalhar com esses recursos em seu aplicativo da mesma forma que faria se eles fossem originalmente definidos em AWS CDK código. Você também pode usar essas construções L1 em construções de nível superior AWS CDK . Por exemplo, isso pode permitir que você use os métodos de concessão de permissão L2 com os recursos que eles definem.
A cloudformation-include.CfnInclude
construção basicamente adiciona um AWS CDK API invólucro a qualquer recurso em seu AWS CloudFormation modelo. Use esse recurso para importar seus AWS CloudFormation modelos existentes para AWS CDK uma peça por vez. Ao fazer isso, você pode gerenciar seus recursos existentes usando AWS CDK construções para utilizar os benefícios das abstrações de alto nível. Você também pode usar esse recurso para vender seus AWS CloudFormation modelos aos AWS CDK desenvolvedores fornecendo uma AWS CDK construçãoAPI.
nota
AWS CDK A v1 também foi incluída aws-cdk-lib.CfnInclude
, que era usada anteriormente para o mesmo propósito geral. No entanto, ele carece de muitas das funcionalidades docloudformation-include.CfnInclude
.
Tópicos
Importar um AWS CloudFormation modelo
Veja a seguir um exemplo AWS CloudFormation de modelo que usaremos para fornecer exemplos neste tópico. Copie e salve o modelo my-template.json
a seguir. Depois de analisar esses exemplos, você pode explorar mais usando qualquer um dos AWS CloudFormation modelos implantados existentes. Você pode obtê-los no AWS CloudFormation
console.
{ "Resources": { "MyBucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": "MyBucket", } } } }
Você pode trabalhar com qualquer um dos JSON YAML modelos. Recomendamos, JSON se disponível, pois YAML os analisadores podem variar um pouco no que aceitam.
Veja a seguir um exemplo de como importar o modelo de amostra para seu AWS CDK aplicativo usando cloudformation-include
o. Os modelos são importados dentro do contexto de uma CDK pilha.
Por padrão, a importação de um recurso preserva a ID lógica original do recurso no modelo. Esse comportamento é adequado para importar um AWS CloudFormation modelo para o AWS CDK, onde a lógica IDs deve ser mantida. AWS CloudFormation precisa dessas informações para reconhecer esses recursos importados como os mesmos recursos do AWS CloudFormation modelo.
Se você estiver desenvolvendo um invólucro de AWS CDK construção para o modelo para que ele possa ser usado por outros AWS CDK desenvolvedores, faça com que AWS CDK gere um novo recursoIDs. Ao fazer isso, a construção pode ser usada várias vezes em uma pilha sem conflitos de nome. Para fazer isso, defina a preserveLogicalIds
propriedade como false
ao importar o modelo. Veja um exemplo a seguir:
Para colocar os recursos importados sob o controle do seu AWS CDK aplicativo, adicione a pilha aoApp
:
Para verificar se não haverá nenhuma alteração não intencional nos AWS recursos na pilha, você pode fazer uma comparação. Use o AWS CDK CLI cdk diff
comando e omita qualquer AWS CDK metadado específico. Veja um exemplo a seguir:
cdk diff --no-version-reporting --no-path-metadata --no-asset-metadata
Depois de importar um AWS CloudFormation modelo, o AWS CDK aplicativo deve se tornar a fonte confiável dos recursos importados. Para fazer alterações em seus recursos, modifique-os em seu AWS CDK aplicativo e implante com o AWS CDK CLI cdk deploy comando.
Acesse recursos importados
O nome template
no código de exemplo representa o AWS CloudFormation modelo importado. Para acessar um recurso a partir dele, use o getResource()
método do objeto. Para acessar o recurso retornado como um tipo específico de recurso, converta o resultado no tipo desejado. Isso não é necessário em Python ou. JavaScript Veja um exemplo a seguir:
A partir desse exemplo, agora cfnBucket
é uma instância da aws-s3.CfnBucket
classe. Essa é uma construção L1 que representa o AWS CloudFormation recurso correspondente. Você pode tratá-lo como qualquer outro recurso desse tipo. Por exemplo, você pode obter seu ARN valor com a bucket.attrArn
propriedade.
Em vez disso, para agrupar o CfnBucket
recurso L1 em uma aws-s3.Bucket
instância L2, use os métodos estáticos fromBucketArn()
fromBucketAttributes()
, ou. fromBucketName()
Normalmente, o fromBucketName()
método é mais conveniente. Veja um exemplo a seguir:
Outras construções L2 têm métodos semelhantes para criar a construção a partir de um recurso existente.
Quando você envolve uma construção L1 em uma construção L2, ela não cria um novo recurso. No nosso exemplo, não estamos criando um segundo bucket S3;. Em vez disso, a nova Bucket
instância encapsula a existente. CfnBucket
A partir do exemplo, agora bucket
é uma Bucket
construção L2 que se comporta como qualquer outra construção L2. Por exemplo, você pode conceder a uma AWS Lambda função acesso de gravação ao bucket usando o grantWrite()
método conveniente do bucket. Você não precisa definir manualmente a política AWS Identity and Access Management (IAM) necessária. Veja um exemplo a seguir:
Substituir parâmetros
Se seu AWS CloudFormation modelo contiver parâmetros, você poderá substituí-los por valores de tempo de construção na importação usando a parameters
propriedade. No exemplo a seguir, substituímos o UploadBucket
parâmetro pelo ARN de um bucket definido em outro lugar em nosso AWS CDK código.
Importar outros elementos do modelo
Você pode importar qualquer elemento AWS CloudFormation do modelo, não apenas recursos. Os elementos importados se tornam parte da AWS CDK
pilha. Para importar esses elementos, use os seguintes métodos do CfnInclude
objeto:
-
getCondition()
— AWS CloudFormation condições. -
getHook()
— AWS CloudFormation ganchos para implantações em azul/verde. -
getMapping()
— AWS CloudFormation mapeamentos. -
getOutput()
— AWS CloudFormation saídas. -
getParameter()
— AWS CloudFormation parâmetros. -
getRule()
— AWS CloudFormation regras para AWS Service Catalog modelos.
Cada um desses métodos retorna uma instância de uma classe que representa o tipo específico de AWS CloudFormation elemento. Esses objetos são mutáveis. As alterações que você fizer nelas aparecerão no modelo gerado a partir da AWS CDK pilha. Veja a seguir um exemplo que importa um parâmetro do modelo e modifica seu valor padrão:
Importar pilhas aninhadas
Você pode importar pilhas aninhadas especificando-as ao importar o modelo principal ou em algum momento posterior. O modelo aninhado deve ser armazenado em um arquivo local, mas referenciado como um NestedStack
recurso no modelo principal. Além disso, o nome do recurso usado no AWS CDK código deve corresponder ao nome usado para a pilha aninhada no modelo principal.
Dada essa definição de recurso no modelo principal, o código a seguir mostra como importar a pilha aninhada referenciada nos dois sentidos.
"NestedStack": { "Type": "AWS::CloudFormation::Stack", "Properties": { "TemplateURL": "https://my-s3-template-source.s3.amazonaws.com/nested-stack.json" }
Você pode importar várias pilhas aninhadas com qualquer um dos métodos. Ao importar o modelo principal, você fornece um mapeamento entre o nome do recurso de cada pilha aninhada e seu arquivo de modelo. Esse mapeamento pode conter qualquer número de entradas. Para fazer isso após a importação inicial, chame loadNestedStack()
uma vez para cada pilha aninhada.
Depois de importar uma pilha aninhada, você pode acessá-la usando o método do modelo principal. getNestedStack()
O getNestedStack()
método retorna uma IncludedNestedStack
instância. Nessa instância, você pode acessar a AWS CDK NestedStack
instância por meio da stack
propriedade, conforme mostrado no exemplo. Você também pode acessar o objeto AWS CloudFormation de modelo original por meio includedTemplate
do qual você pode carregar recursos e outros AWS CloudFormation elementos.