【问题标题】:How to specify S3 bucket region SAM template如何指定 S3 存储桶区域 SAM 模板
【发布时间】:2020-01-17 08:13:20
【问题描述】:

我正在学习 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 错误代码:永久重定向。 S3 错误消息:存储桶位于此区域:us-east-1。请使用该区域重试请求(服务:AWSLambdaInternal;状态码:400;错误码:InvalidParameterValueException

us-east-2 是我的 AWS 配置文件的默认区域。

如果us-east-2 是我的默认区域,为什么我会收到此错误消息说The bucket is in this region: us-east-1?如何在无服务器脚本中为 S3 存储桶指定区域?

【问题讨论】:

    标签: amazon-s3 serverless-application-model


    【解决方案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
    

    注意:请确保您的存储桶和函数位于同一区域。如果您想在不同的区域部署,则需要该区域的存储桶。

    【讨论】:

    • 我有点困惑。您正在打包 template.yml 以生成 packaged.yml,然后部署 packaged.yml。我按照上面的流程进行了操作,packaged.yml 看起来与 template.yml 完全一样。为什么需要打包步骤?我可以简单地部署 template.yml 吗?
    • 我将 --region us-east-2 添加到 sam 包和 sam deploy 中。我仍然收到“存储桶位于此区域:us-east-1”错误消息。
    • 所以@TomSchreck 第一个命令使用template.yml(即SAM 模板)并输出cloudformation 模板(packagaed.yml)。在下一个命令中,sam deploy 我正在使用模板文件 packaged.yml(Cloudformation 模板)并对其进行部署。现在,您是否已经使用该名称创建了您的存储桶?如果是,桶已经在哪个区域?只是让您知道,S3 存储桶是在 AWS 的特定区域中创建的。
    • 不,我还没有创建存储桶。我的印象是 yml 模板也会创建 S3 存储桶。我需要先手动创建 S3 存储桶吗?
    • 我让它为 us-east-2 工作。我对打包和部署的工作方式感到困惑。我的困惑在于 package 如何创建一个新的 yaml 文件,并且部署应该使用从 package 命令生成的新 yaml 文件。我看错了。我假设我只需要部署 sam-template.yaml 而不首先调用包。感谢您的帮助。
    猜你喜欢
    • 2021-09-23
    • 2015-06-29
    • 2013-09-16
    • 2017-01-28
    • 2023-04-11
    • 1970-01-01
    • 2020-08-11
    • 2020-11-09
    • 1970-01-01
    相关资源
    最近更新 更多