Новая версия синтезатора AWS CDK

#typescript #amazon-web-services #aws-cdk

#typescript #amazon-веб-сервисы #aws-cdk

Вопрос:

Я загрузил стек CDKToolKit для нового «StyleStackSynthesis», я добавил это поле в cdk.json

 "@aws-cdk/core:newStyleStackSynthesis": "true"
  

Этот стек CDKToolKit успешно развернут в AWS.
Я использовал эту команду

 cdk bootstrap  --toolkit-stack-name custom-cdktoolkit
  

Но теперь я пытаюсь использовать стек CDKToolKit для развертывания моего стека приложений CDK, и я получаю этот массаж

  Error: Could not assume role in target account (did you bootstrap the environment with the right '--trust's?)
  

Я использую эту команду

 cdk deploy --toolkit-stack-name custom-cdktoolkit
  

Я также добавил это в стек приложений cdk

  "@aws-cdk/core:newStyleStackSynthesis": "true"
  

Должен ли я добавить дополнительную конфигурацию и т. Д.?

Комментарии:

1. Вы выполняете развертывание с одной учетной записи на другую?

2. @mchlfchr Это та же учетная запись

3. Есть ли у вас существующий стек CloudFormation со старым механизмом начальной загрузки? Без какого-либо пользовательского имени он начинается с cdktoolkit... и содержит только сегмент S3 в разделе «Ресурсы»

4. Нет, только новый custome-cdktoolkit стек, который содержит s3, роли, репозиторий и ключ

Ответ №1:

Я только что воспроизвел все, что вы опубликовали, в совершенно новой и нетронутой учетной записи.

Я использую версию AWS CDK: 1.70.0 (последняя версия 2020/10/28)

  1. добавить в cdk.json "@aws-cdk/core:newStyleStackSynthesis": "true"
  2. выполнить cdk bootstrap --toolkit-stack-name custom-cdktoolkit . Это была команда, которую вы указали в своем сообщении.
 cdk bootstrap --toolkit-stack-name custom-cdktoolkit

'@aws-cdk/core:newStyleStackSynthesis' context set, using new-style bootstrapping
 ⏳  Bootstrapping environment aws://xxxxxx/us-east-1...Environment aws://xxxxxx/us-east-1 failed bootstrapping: Error: Please pass '--cloudformation-execution-policies' to specify deployment permissions. Try a managed policy of the form 'arn:aws:iam::aws:policy/<PolicyName>'.
  

Итак, с моей стороны это уже не удается воспроизвести.

Каждый следующий шаг теперь выполняется в произвольном стиле из-за отсутствия дополнительной информации.

  1. Добавьте политики выполнения cf по мере необходимости:
 cdk bootstrap 
--toolkit-stack-name custom-cdktoolkit 
--cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess

'@aws-cdk/core:newStyleStackSynthesis' context set, using new-style bootstrapping
 ⏳  Bootstrapping environment aws://xxxxx/us-east-1...
Trusted accounts:   (none)
Execution policies: arn:aws:iam::aws:policy/AdministratorAccess
custom-cdktoolkit: creating CloudFormation changeset...
[██████████████████████████████████████████████████████████] (11/11)
 ✅  Environment aws://xxxxx/us-east-1 bootstrapped.
  
  1. Хорошо, давайте быстро взглянем на стек примеров (без какого-либо межаккаунтного доступа, как вы сказали в комментариях):
 // file: lib/cdk-playground-stack.ts
import * as cdk from "@aws-cdk/core";
import * as s3 from "@aws-cdk/aws-s3";
export class CdkPlaygroundStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    new s3.Bucket(this, "id", {
      accessControl: s3.BucketAccessControl.PRIVATE,
      encryption: s3.BucketEncryption.S3_MANAGED,
      versioned: false,
      blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
    });
  }
}
  
 // file: app/app.ts

#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from '@aws-cdk/core';
import { CdkPlaygroundStack } from '../lib/cdk-playground-stack';

const app = new cdk.App();
// no cross-account environment arguments (like account) passed to the stack!
new CdkPlaygroundStack(app, 'CdkPlaygroundStack');
  
  1. разверните его с помощью предоставленной вами команды (из-за нестандартного cdk-bootstrap-name)
 cdk deploy --toolkit-stack-name custom-cdktoolkit

CdkPlaygroundStack: deploying...
[0%] start: Publishing dbfc18c149132627081b768fbbfc4bc345aeba4259514174fcd302d8b3926a90:current_account-current_region
[100%] success: Published dbfc18c149132627081b768fbbfc4bc345aeba4259514174fcd302d8b3926a90:current_account-current_region
CdkPlaygroundStack: creating CloudFormation changeset...
[██████████████████████████████████████████████████████████] (3/3)

 ✅  CdkPlaygroundStack

Stack ARN:
arn:aws:cloudformation:us-east-1:xxxxxxx:stack/CdkPlaygroundStack/9b8d4460-1940-11eb-abd9-0e794c84352f
  

Как вы можете видеть, никакого конфликта нет, и с предоставленной вами информацией очень сложно проверить, что происходит.

Что вы можете сделать?

  • Обновление до текущей версии CDK
  • Проверьте создание стека и, действительно ли нет аргументов / реквизитов, передаваемых в терминах другой учетной записи, например, тех, которые вы используете в своих переменных профиля / среды AWS. Для развертывания между учетными записями требуется определенная настройка начальной загрузки, поэтому я специально спросил об этом.
  • Удалите загрузочный стек CloudFormation
  • Точно воспроизвести то, что я сделал

Ответ №2:

Приведенные ниже методы сработали для меня, особенно второй, где у нас есть перекрестное доверие к учетной записи и сценарий принятия роли.

Прежде чем вы сможете подготовить конвейер, вам необходимо выполнить загрузку среды, в которой вы хотите его создать. Если вы развертываете свое приложение в разных средах, вам также необходимо выполнить их загрузку и обязательно добавить доверительные отношения.

Для начальной загрузки среды для подготовки конвейера:

$ env CDK_NEW_BOOTSTRAP=1 npx загрузка cdk
[—profile admin-profile-1]
—cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess
aws://111111111111/us-east-1

Для начальной загрузки другой среды для развертывания приложений CDK с использованием конвейера в учетной записи 111111111111:

$ env CDK_NEW_BOOTSTRAP=1 npx загрузка cdk
[—profile admin-profile-2]
—cloudformation-execution-policies arn:aws:iam::aws:policy/AdministratorAccess
—доверие 11111111111
aws://222222222222/us-east-2