为什么导出 s3 存储桶名称和 arn 在无服务器框架中使用不同的语法?

Why export s3 bucket name and arn use different syntax in serverless framework?

我为 serverless.yml 配置了以下配置。它创建一个 s3 存储桶并导出其 ARN 和名称。我不明白的是为什么存储桶 ARN 值是通过 Fn::GetAtt:: S3Bucket Arn 获取的,而存储桶名称是通过 Ref S3Bucket 获取的。这两种语法有什么不同?

...
  Outputs:
    AttachmentsBucketArn:
      Value:
         Fn::GetAtt:
          - S3Bucket
          - Arn
      Export:
        Name: ${self:custom.stage}-ExtAttachmentsBucketArn

    AttachmentsBucketName:
      Value:
        Ref: S3Bucket
      Export:
        Name: ${self:custom.stage}-ExtAttachmentsBucket

它们直接映射到 CloudFormation 中 AWS::S3::Bucket 的 return 值。

如 link 所述,使用:

  • Ref "return存储桶名称"
  • GetAttArn “return 是指定存储桶的 Amazon 资源名称 (ARN)。”