【问题标题】:Is there a way to specify an already created s3 deployment bucket in serverless?有没有办法在无服务器中指定已经创建的 s3 部署存储桶?
【发布时间】:2018-12-13 18:43:35
【问题描述】:

因此,我们目前在最近的项目中使用无服务器,我们的客户向我们提供了 aws iam 用户,因为我们将部署到他们的 aws 资源中。问题是他们不会给用户创建 s3 策略。 s3 存储桶的创建将由他们手动完成。那么我可以在 serverless.yml 的哪个位置添加他们创建的 s3 存储桶并让 serverless 将其用作部署存储桶而不是创建一个新存储桶?

【问题讨论】:

    标签: serverless-framework serverless aws-serverless


    【解决方案1】:

    我认为 OP 是在询问如何指定无服务器 S3 部署存储桶,而不是如何在 Lambda 函数中引用随机存储桶。

    您可以像这样在serverless.yml 中设置部署桶:

    provider:
        deploymentBucket: <bucket name>
    

    【讨论】:

    • 是的,它仅用于部署存储桶。我明白了,所以只有存储桶名称?不是 ARN?
    • 无服务器文档说它只是存储桶名称。由于 S3 存储桶是全球唯一的,因此很容易从中计算 ARN
    • 另外,github.com/serverless/serverless/issues/3060 值得一读,如果您想知道如何/是否可以在 S3 存储桶内配置路径(简而言之,尚不支持。如果您有 10 个无服务器项目,您需要 10 个 S3 存储桶)。
    • 如果您有 10 个无服务器项目,则不需要 10 个 S3 存储桶。 Serverless 将根据项目名称、阶段名称和时间戳生成唯一的 zip 文件名。除非您出于 IAM 原因需要限制 S3 路径,否则您可以在无服务器项目之间共享存储桶。见github.com/serverless/serverless/issues/…
    【解决方案2】:

    您可以在无服务器应用程序云形成脚本中使用参数:

    "Parameters" : {
      "S3BucketArn" : {
        "Default" : "arn:aws:s3:::somebucketarndefaults",
        "Description" : "The ARN for the S3 Bucket",
        "Type" : "String"
      }
    }
    

    我猜您是在无服务器函数 (Lambda) 中使用它,因此您可以使用环境变量传递它

     "Resources" : {
        "MyAmazingFunction" : {
          "Type" : "AWS::Serverless::Function",
          "Properties": {
            "Handler": "functions::handle",
            // Yada yada
        "Environment" : {
              "Variables" : {
                "S3Arn": {"Ref" : "S3BucketArn"}
              }
            }
          }
        }
    

    然后在代码中使用S3Arn 环境变量拉出Arn。

    【讨论】:

      猜你喜欢
      • 2020-12-16
      • 1970-01-01
      • 2020-03-23
      • 1970-01-01
      • 2018-09-29
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多