Criar um modelo do CloudFormation a partir de recursos verificados com o gerador de IaC - AWS CloudFormation

Criar um modelo do CloudFormation a partir de recursos verificados com o gerador de IaC

Este tópico explica como criar um modelo a partir de recursos que foram verificados pelo recurso de gerador de IaC.

Criar um modelo com base nos recursos verificados (console)

Para criar um modelo de pilha com recursos verificados
  1. Abra a página do gerador de IaC do console do CloudFormation.

  2. Na barra de navegação na parte superior da tela, escolha a Região da AWS que contém os recursos verificados.

  3. No painel Modelos, escolha Criar modelo.

  4. Selecione Iniciar de um novo modelo.

    1. Em Nome do modelo, forneça um nome para o modelo.

    2. (Opcional) Configure sua Política de exclusão e a Política de substituição de atualização.

    3. Escolha Próximo para adicionar recursos encontrados pela varredura ao modelo.

  5. Em Adicionar recursos verificados, navegue pela lista de recursos verificados e selecione os recursos que deseja adicionar ao modelo. É possível filtrar os recursos por identificador, tipo de recurso ou tags. Os filtros são mutuamente inclusivos.

  6. Após adicionar todos os recursos necessários para o modelo, escolha Próximo para sair da página Adicionar recursos verificados e prossiga para a página Adicionar recursos relacionados.

  7. Revise uma lista recomendada de recursos relacionados. Recursos relacionados, como instâncias do Amazon EC2 e grupos de segurança, são interdependentes e normalmente pertencem à mesma workload. Selecione os usuários relacionados que deseja incluir no modelo gerado.

    nota

    Sugerimos adicionar todos os recursos relacionados a esse modelo.

  8. Revise os detalhes do modelo, recursos encontrados pela varredura e recursos relacionados.

  9. Escolha Criar modelo para sair da página Revisar e criar e criar o modelo.

Criar um modelo com base nos recursos verificados (AWS CLI)

Para criar um modelo de pilha com recursos verificados
  1. Use o comando list-resource-scan-resources para listar os recursos encontrados pela verificação, especificando a opção --resource-identifier para limitar a saída, se assim desejar. Na opção --resource-scan-id, substitua o ARN de amostra pelo ARN real.

    aws cloudformation list-resource-scan-resources \ --resource-scan-id arn:aws:cloudformation:us-east-1:123456789012:resourceScan/0a699f15-489c-43ca-a3ef-3e6ecfa5da60 \ --resource-identifier MyApp

    Este é um exemplo de resposta, onde ManagedByStack indica se o CloudFormation já está gerenciando o recurso. Copie a saída. Você precisa dele para a próxima etapa.

    { "Resources": [ { "ResourceType": "AWS::EKS::Cluster", "ResourceIdentifier": { "ClusterName": "MyAppClusterName" }, "ManagedByStack": false }, { "ResourceType": "AWS::AutoScaling::AutoScalingGroup", "ResourceIdentifier": { "AutoScalingGroupName": "MyAppASGName" }, "ManagedByStack": false } ] }

    Consulte uma descrição dos campos na saída em ScannedResource na Referência de API do AWS CloudFormation.

  2. Use o comando cat para armazenar os tipos e identificadores de recursos em um arquivo JSON chamado resources.json em seu diretório inicial. O exemplo a seguir é um JSON baseado na saída do exemplo da etapa anterior.

    $ cat > resources.json [ { "ResourceType": "AWS::EKS::Cluster", "ResourceIdentifier": { "ClusterName": "MyAppClusterName" } }, { "ResourceType": "AWS::AutoScaling::AutoScalingGroup", "ResourceIdentifier": { "AutoScalingGroupName": "MyAppASGName" } } ]
  3. Use o comando list-resource-scan-related-resources, juntamente com o arquivo resources.json que você criou, para listar os recursos relacionados aos recursos verificados.

    aws cloudformation list-resource-scan-related-resources \ --resource-scan-id arn:aws:cloudformation:us-east-1:123456789012:resourceScan/0a699f15-489c-43ca-a3ef-3e6ecfa5da60 \ --resources file://resources.json

    Este é um exemplo de resposta, onde ManagedByStack indica se o CloudFormation já está gerenciando o recurso. Adicione esses recursos ao arquivo JSON criado na etapa anterior. Ele será necessário para criar o modelo.

    { "RelatedResources": [ { "ResourceType": "AWS::EKS::Nodegroup", "ResourceIdentifier": { "NodegroupName": "MyAppNodegroupName" }, "ManagedByStack": false }, { "ResourceType": "AWS::IAM::Role", "ResourceIdentifier": { "RoleId": "arn:aws::iam::account-id:role/MyAppIAMRole" }, "ManagedByStack": false } ] }

    Consulte uma descrição dos campos na saída em ScannedResource na Referência de API do AWS CloudFormation.

    nota

    A lista de entrada de recursos não pode exceder um tamanho de 100. Para listar recursos relacionados para mais de 100 recursos, execute o comando list-resource-scan-related-resources em lotes de 100 e consolide os resultados.

    Tenha em mente que a saída pode conter recursos duplicados na lista.

  4. Use o comando create-generated-template para criar um novo modelo de pilha da seguinte forma, com as seguintes modificações:

    • Substitua us-east-1 pelo Região da AWS que contém os recursos verificados.

    • Substitua MyTemplate pelo nome do modelo a ser criado.

    aws cloudformation create-generated-template --region us-east-1 \ --generated-template-name MyTemplate \ --resources file://resources.json

    Veja a seguir um exemplo de arquivo resources.json.

    [ { "ResourceType": "AWS::EKS::Cluster", "LogicalResourceId":"MyCluster", "ResourceIdentifier": { "ClusterName": "MyAppClusterName" } }, { "ResourceType": "AWS::AutoScaling::AutoScalingGroup", "LogicalResourceId":"MyASG", "ResourceIdentifier": { "AutoScalingGroupName": "MyAppASGName" } }, { "ResourceType": "AWS::EKS::Nodegroup", "LogicalResourceId":"MyNodegroup", "ResourceIdentifier": { "NodegroupName": "MyAppNodegroupName" } }, { "ResourceType": "AWS::IAM::Role", "LogicalResourceId":"MyRole", "ResourceIdentifier": { "RoleId": "arn:aws::iam::account-id:role/MyAppIAMRole" } } ]

    Em caso de êxito, o comando retornará a resposta a seguir.

    { "Arn": "arn:aws:cloudformation:region:account-id:generatedtemplate/7fc8512c-d8cb-4e02-b266-d39c48344e48", "Name": "MyTemplate" }