Получен статус ответа [FAILED] от пользовательского ресурса. Возвращено сообщение: Команда умерла с <Signals.SIGKILL: 9>

Что я пытаюсь сделать

  • Я использую CDK для создания стека, который может запускать приложение Python.
  • EC2 для запуска приложения Python
  • Экземпляр RDS для запуска базы данных PosgreSQL, которая подключается к EC2.
  • Пользовательский VPC, вмещающий все
  • У меня есть локальный файл pg_dump моей базы данных PostgreSQL, который я хочу загрузить в корзину S3, содержащую все данные моей базы данных.
  • Я использовал CDK для создания корзины S3 и попытался загрузить файл pg_dump.

Что происходит

  • Для небольшого размера файла <1 МБ кажется, что все работает нормально.

Для моего дампа разработки (размером около 160 МБ) выдается ошибка

Received response status [FAILED] from
custom resource. Message returned:
Command '['/opt/awscli/aws', 's3',
'cp', 's3://cdk-<some-hash>.zip',
'/tmp/tmpjtgcib_f/<some-hash>']' died
with <Signals.SIGKILL: 9>. (RequestId:
<some-request-id>)

❌  SomeStack failed: Error: The stack
named SomeStack failed creation, it may
need to be manually deleted from the
AWS console: ROLLBACK_COMPLETE:
Received response status [FAILED] from
custom resource. Message returned:
Command '['/opt/awscli/aws', 's3',
'cp', 's3://cdk-<some-hash>.zip',
'/tmp/tmpjtgcib_f/<some-hash>']' died
with <Signals.SIGKILL: 9>. (RequestId:
<some-request-id>)
at
FullCloudFormationDeployment.monitorDeployment

(/Users/vr/.nvm/versions/node/v20.10.0/lib/node_modules/aws-cdk/lib/index.js:455:10568)
at process.processTicksAndRejections
(node:internal/process/task_queues:95:5)
at async Object.deployStack2 [as
deployStack]

(/Users/vr/.nvm/versions/node/v20.10.0/lib/node_modules/aws-cdk/lib/index.js:458:199716)
at async

/Users/vr/.nvm/versions/node/v20.10.0/lib/node_modules/aws-cdk/lib/index.js:458:181438

Код

export class SomeStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // The code that defines your stack goes here

    const dataImportBucket = new s3.Bucket(this, "DataImportBucket", {
      blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
      bucketName: "ch-data-import-bucket",
      encryption: s3.BucketEncryption.KMS_MANAGED,
      enforceSSL: true,
      minimumTLSVersion: 1.2,
      publicReadAccess: false,
      removalPolicy: cdk.RemovalPolicy.DESTROY,
      versioned: false,
    });
    
    // This folder will contain my dump file in .tar.gz format
    const dataImportPath = join(__dirname, "..", "assets");

    const deployment = new s3d.BucketDeployment(this, "DatabaseDump", {
      destinationBucket: dataImportBucket,
      extract: true,
      ephemeralStorageSize: cdk.Size.mebibytes(512),
      logRetention: 7,
      memoryLimit: 128,
      retainOnDelete: false,
      sources: [s3d.Source.asset(dataImportPath)],
    });
  }
}

Мой файл дампа разработки весит всего около 160 МБ, но рабочий файл близок к ГБ. Может ли кто-нибудь любезно сказать мне, как я могу загружать файлы большего размера без этой ошибки?

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
0
0
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вашей лямбды не хватает памяти. Поскольку он извлекает ZIP-архив, его содержимое должно помещаться в памяти. Фактический размер хранилища также должен быть достаточным — значение по умолчанию — 512 МБ.

Установите память, например. 2 ГБ и размер хранилища такой же:

    memoryLimit: 2048,
    ephemeralStorageSize: Size.gibityes(2),

вы, сэр, настоящий спасатель, это действительно сработало! Мой рабочий файл будет иметь размер около 700 МБ, поэтому мне следует установить ограничение памяти в 4 раза или что-то в этом роде? А как насчет эфемерного хранилища? по умолчанию 512 МБ, верно?

PirateApp 22.07.2024 11:14

Да, хорошее замечание по поводу размера хранилища, добавлено к ответу.

gshpychka 22.07.2024 11:54

раз уж мы затронули эту тему, я хотел спросить. на данный момент кажется, что лямбда имеет верхний предел в 10 ГБ. Что, если вы хотите загрузить файл размером 1 ТБ на s3 через cdk, нет ли способа выполнить потоковую передачу на s3 через cdk?

PirateApp 22.07.2024 13:42

Ни в коем случае нельзя использовать конструкцию BucketDeployment, нет.

gshpychka 22.07.2024 14:05

Другие вопросы по теме