#node.js #amazon-s3 #amazon-cloudformation #serverless-framework #serverless
Вопрос:
Наши клиенты уже зарегистрированы в нашей среде разработки, и руководство просит нас создать производственную среду без потери каких-либо уже зарегистрированных пользовательских данных.
Мы пытаемся развернуть производственную среду на ap-юго-восток-2, а наша среда разработки уже находится на eu-запад-1.
Я внес необходимые изменения для развертывания в этих двух регионах, но проблема в том, что мы создаем ведра cognito и s3 с использованием шаблона cloudformation.
Мы хотим использовать одни и те же сегменты s3 и cognito между этими двумя регионами, но проблема в том, что при развертывании в ap-юго-восток-2 (производство) создание стека завершается неудачно, потому что сегмент s3 уже существует.
Возможно ли повторно использовать одно и то же ведро s3 и cognito между регионами и этапами? Я хочу, чтобы бессерверная платформа проверяла, существуют ли эти ресурсы в выбранном мной регионе (в данном случае ес-запад-1). Мы не можем создавать новые ведра, потому что у нас лимит в 100 ведер!
Вот код в том, как мы создаем корзины s3. Мы используем бессерверный фреймворк с nodejs.
Resources:
AttachmentsBucket:
Type: AWS::S3::Bucket
Properties:
# Set the CORS policy
CorsConfiguration:
CorsRules:
-
AllowedOrigins:
- '*'
AllowedHeaders:
- '*'
AllowedMethods:
- GET
- PUT
- POST
- DELETE
- HEAD
MaxAge: 3000
# Print out the name of the bucket that is created
Outputs:
AttachmentsBucketName:
Value:
Ref: AttachmentsBucket
Комментарии:
1. @Marcin Мы на самом деле решили развернуть и перенести все данные. Это длительный процесс, но разделение ресурсов между этапами рискованно, и мы не можем пойти на такой риск.
2. Спасибо, что дали мне знать. Рад, что все получилось в любом случае. Но если бы мой ответ был полезен, его принятие было бы оценено по достоинству.
Ответ №1:
Я хочу, чтобы бессерверная платформа проверяла, существуют ли эти ресурсы в выбранном мной регионе
Это не то, как работает Инфраструктура как код (IaC). CloudFormation и terraform, если на то пошло, не имеют встроенных инструментов для «проверки», существует ресурс или нет. Перспектива IaC такова — если она находится в шаблоне, то только данный шаблон/стек может управлять этим. Между ними нет ничего, как будто это может существовать или нет.
Сказав это, есть способы перепроектировать и обойти это. Наиболее распространенными способами являются:
- Поскольку корзина является общим ресурсом, ее следует развертывать отдельно от остальных ваших стеков, а ее имя следует передавать в качестве входных данных зависимым стекам.
- Разработайте пользовательский ресурс в виде лямбда-функции. Функция будет использовать AWS SDK для проверки наличия ваших блоков и возврата этой информации в ваш стек для дальнейшего использования.