Как указать SAM-шаблон области сегмента S3

Я изучаю модель бессерверного приложения AWS. Пробую следующую модель:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  MyLambdaFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Runtime: nodejs8.10
      Handler: index.handler
      CodeUri: 
        Bucket: artifacts-for-lambda
        Key: my-lambda-package.zip
      Events:
        MySchedule:
          Type: Schedule
          Properties:
            Schedule: rate(1 minute)
        MyS3Upload:
          Type: S3
          Properties:
            Bucket: !Ref MyS3Bucket
            Events: s3:ObjectCreated:*
  MyS3Bucket:
    Type: 'AWS::S3::Bucket'
    Properties:
      BucketName: upload-something-here

Вот как я его запускаю:

aws cloudformation deploy 
--capabilities CAPABILITY_NAMED_IAM 
--template-file sam-template.yaml 
--stack-name my-serverless-app

Я получаю вот такую ​​ошибку:

Ошибка при GetObject. Код ошибки S3: PermanentRedirect. Сообщение об ошибке S3: сегмент находится в этом регионе: us-east-1. Используйте этот регион, чтобы повторить запрос (Сервис: AWSLambdaInternal; Код состояния: 400; Код ошибки: InvalidParameterValueException

us-east-2 - это мой регион по умолчанию в моем конфигурационном файле AWS.

Если us-east-2 - мой регион по умолчанию, почему я получаю это сообщение об ошибке The bucket is in this region: us-east-1? Как мне указать регион для моей корзины S3 в бессерверном скрипте?


person Tom Schreck    schedule 16.09.2019    source источник


Ответы (1)


Том, я использовал SAM в одном из проектов, над которым работал. Вы можете использовать это так:

sam package --template-file template.yml \
              --output-template-file packaged.yml \
              --s3-bucket developing-sam-applications 
              --region YOUR_REGION

Более того, вы можете выполнить развертывание с помощью этой команды с указанным регионом:

sam deploy --template-file packaged.yml \
             --stack-name developing-sam-applications \
             --capabilities CAPABILITY_IAM
             --region YOUR_REGION

Примечание. Убедитесь, что у вас есть сегмент и функция в одном регионе. Если вы хотите развернуть в другом регионе, вам понадобится сегмент в этом регионе.

person Hassan Murtaza    schedule 16.09.2019
comment
Я немного запутался. Вы упаковываете template.yml для создания packaged.yml, а затем развертываете packaged.yml. Я следил за описанным выше процессом, и packaged.yml выглядит точно так же, как template.yml. Зачем нужен этап пакета? Могу я просто развернуть template.yml? - person Tom Schreck; 16.09.2019
comment
Я добавил --region us-east-2 как в sam package, так и в sam deploy. Я по-прежнему получаю сообщение об ошибке "Ведро находится в этом регионе: us-east-1". - person Tom Schreck; 16.09.2019
comment
Итак, @TomSchreck Первая команда использует template.yml (который является шаблоном SAM) и выводит шаблон облачной информации (packagaed.yml). В следующей команде sam deploy. Я использую файл шаблона packaged.yml (шаблон Cloudformation) и развертываю его. Итак, у вас уже есть корзина с этим именем? Если да, то в каком регионе уже находится сегмент? Чтобы вы знали, корзины S3 создаются в определенном регионе AWS. - person Hassan Murtaza; 16.09.2019
comment
Нет, ведро еще не создано. У меня сложилось впечатление, что шаблон yml также создаст корзину S3. Нужно ли мне сначала вручную создать корзину S3? - person Tom Schreck; 16.09.2019
comment
Вы правы в этом. С помощью этого шаблона следует создать корзину. 1. Можете попробовать изменить название корзины? 2. Можете ли вы пока попробовать развернуться в us-east-1? - person Hassan Murtaza; 16.09.2019
comment
Я изменил свой регион по умолчанию на us-east-1 и решил эту проблему. Я пытаюсь узнать и понять, как все это работает. Можно ли использовать SAM / CloudFormation для развертывания корзины S3 в регионе, отличном от us-east-1? Я понимаю, что функция и сегмент должны находиться в одном регионе. Это имеет смысл для меня. Однако я не могу создать корзину S3 в другом регионе, кроме us-east-1. - person Tom Schreck; 16.09.2019
comment
@TomSchreck Вы пытались изменить имя корзины и сохранить регион us-east-2? - person Hassan Murtaza; 16.09.2019
comment
Получил на нас работать-восток-2. Я был сбит с толку тем, как работали пакет и развертывание. Мое замешательство было связано с тем, как пакет создает новый файл yaml, и при развертывании следует использовать новый файл yaml, созданный с помощью команды пакета. Я смотрел на это неправильно. Я предполагал, что мне просто нужно развернуть sam-template.yaml без предварительного вызова пакета. Спасибо за помощь. - person Tom Schreck; 16.09.2019
comment
Рад, что смог помочь! @TomSchreck - person Hassan Murtaza; 16.09.2019