#aws-lambda #serverless-framework #aws-serverless
#aws-lambda #бессерверный фреймворк #aws-бессерверная
Вопрос:
Я пытаюсь использовать сервис S3 в своем проекте.
Я сохраняю пользовательскую переменную и использую в своем свойстве provider:
service: snapnext
custom:
imagesBucketName: snapnext-images
provider:
name: aws
runtime: nodejs6.10
iamRoleStatements: # IAM permissions granted to all functions
- Effect: Allow
Action:
- S3:GetObject
Resource:
- Fn::Join:
- ''
- - 'arn:aws:s3:::'
- '${self:custom.imagesBucketName}/*'
environment:
IMAGES_BUCKET_NAME: ${self:custom.imagesBucketName}
functions:
downloadImage: # Define a new Function
handler: functions/downloadImage.handler
events:
- http:
path: images
method: post
resources:
Resources:
ImagesBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: ${self:custom.imagesBucketName}
AccessControl: PublicRead
plugins:
- serverless-offline
Когда я пытаюсь выполнить развертывание, я всегда получаю сообщение об ошибке, подобное этому
Есть идеи, почему это происходит? И как лучше выполнить отладку в бессерверном фреймворке, особенно для .yml
файла?
Комментарии:
1. Вы создали
snapnext-images
корзину до того, как попытались развернуть свое бессерверное приложение? Например, через веб-консоль или аналогичным образом?
Ответ №1:
Вы настроили serverless для создания корзины с именем snapnext-images
, и когда он пытается это сделать, он не может, потому что… она уже существует.
При условии, что имя корзины доступно (имена корзин доступны всем), либо:
- Убедитесь, что корзина не существует перед первым развертыванием, чтобы бессерверная платформа могла выполнять свою работу; или
- Не определяйте корзину для создания и используйте существующую корзину; или
- Выберите другое имя, если хотите создать новую корзину и сохранить существующую.
Это не имеет ничего общего с пользовательскими переменными.
Комментарии:
1. привет, Алекс, спасибо за ответ. Я уже пытаюсь удалить корзину в s3 services amp; cloud formation. после этого я запускаю команду serverless remove в своем терминале. При повторной попытке развертывания я получаю то же сообщение об ошибке
2. @EndySantoso корзина определенно существует. Если эта корзина ваша, убедитесь, что она удалена, если она не ваша, вам придется выбрать другое имя — корзины для разных регионов и учетных записей.
Ответ №2:
Вы пытаетесь создать ресурс s3 при развертывании своего стека. Вы получите эту ошибку только в том случае, если имя корзины уже существует. Имена корзин должны быть уникальными для разных регионов и учетных записей. Вам нужно быть осторожным при создании ресурсов корзины s3 при формировании облака.
- Перед развертыванием убедитесь, что она не существует, многократное удаление stack не приводит к удалению корзины S3, созданной со стеком, если в ней есть объекты / файлы. Вам необходимо написать пользовательскую лямбду, запускаемую при событии удаления корзины, чтобы удалить все содержимое перед удалением корзины.