Что я пытаюсь сделать
Что происходит
Для моего дампа разработки (размером около 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 МБ, но рабочий файл близок к ГБ. Может ли кто-нибудь любезно сказать мне, как я могу загружать файлы большего размера без этой ошибки?
У вашей лямбды не хватает памяти. Поскольку он извлекает ZIP-архив, его содержимое должно помещаться в памяти. Фактический размер хранилища также должен быть достаточным — значение по умолчанию — 512 МБ.
Установите память, например. 2 ГБ и размер хранилища такой же:
memoryLimit: 2048,
ephemeralStorageSize: Size.gibityes(2),
Да, хорошее замечание по поводу размера хранилища, добавлено к ответу.
раз уж мы затронули эту тему, я хотел спросить. на данный момент кажется, что лямбда имеет верхний предел в 10 ГБ. Что, если вы хотите загрузить файл размером 1 ТБ на s3 через cdk, нет ли способа выполнить потоковую передачу на s3 через cdk?
Ни в коем случае нельзя использовать конструкцию BucketDeployment
, нет.
вы, сэр, настоящий спасатель, это действительно сработало! Мой рабочий файл будет иметь размер около 700 МБ, поэтому мне следует установить ограничение памяти в 4 раза или что-то в этом роде? А как насчет эфемерного хранилища? по умолчанию 512 МБ, верно?