CloudFormation 中如何派生 S3 存储桶名称?

How is S3 bucket name being derived in CloudFormation?

我有这个创建存储桶的 cloudformation 脚本 template.js。我有点不确定存储桶名称是如何组装的。

假设我的堆栈名称是 my-service 我正在将存储桶名称创建为 my-service-s3bucket-1p3s4szy5bomf

  1. 我想知道这个名字是怎么得来的
  2. 我也想去掉最后那个arn。 -1p3s4szy5bomf
  3. 我可以跳过最后的输出吗,不知道他们做了什么

template.js

中的代码
var stackTemplate = {

    "AWSTemplateFormatVersion": "2010-09-09",
    "Description": "with S3",
    "Resources": {
        "S3Bucket": {
            "Type": "AWS::S3::Bucket",
            "DeletionPolicy": "Retain",
            "Properties": {},
            "Metadata": {
                "AWS::CloudFormation::Designer": {
                    "id": "bba483af-4ae6-4d3d-b37d-435f66c42e44"
                }
            }
        },
        "S3BucketAccessPolicy": {
            "Type": "AWS::IAM::Policy",
            "Properties": {
                "PolicyName": "S3BucketAccessPolicy",
                "Roles": [
                    {
                        "Ref": "IAMServiceRole"
                    }
                ],
                "PolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Effect": "Allow",
                            "Action": [
                                "s3:DeleteObject",
                                "s3:GetObject",
                                "s3:PutObject",
                                "s3:PutObjectAcl",
                                "s3:List*"
                            ],
                            "Resource": [
                                {
                                    "Fn::Sub": [
                                        "${S3BucketArn}",
                                        {
                                            "S3BucketArn": {
                                                "Fn::GetAtt": ["S3Bucket", "Arn"]
                                            }
                                        }
                                    ]
                                },
                                {
                                    "Fn::Sub": [
                                        "${S3BucketArn}/*",
                                        {
                                            "S3BucketArn": {
                                                "Fn::GetAtt": ["S3Bucket", "Arn"]
                                            }
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            }
        }
    },
    "Outputs": {
        "s3Bucket": {
            "Description": "The created S3 bucket.",
            "Value": {
                "Ref": "S3Bucket"
            },
            "Export": {
                "Name": {
                    "Fn::Sub": "${AWS::StackName}-S3Bucket"
                }
            }
        },
        "s3BucketArn": {
            "Description": "The ARN of the created S3 bucket.",
            "Value": {
                "Fn::GetAtt": ["S3Bucket", "Arn"]
            },
            "Export": {
                "Name": {
                    "Fn::Sub": "${AWS::StackName}-S3BucketArn"
                }
            }
        }
    }
};

stackUtils.assembleStackTemplate(stackTemplate, module);
I want to know how this name was derived

如果您没有为您的存储桶指定名称,CloudFormation 会根据模式 $name-of-stack-s3bucket-$generatedId[=21 生成一个新名称=] 来自文档 https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-s3-bucket.html 桶名 存储桶的名称。如果您不指定名称,AWS CloudFormation 会生成一个唯一 ID 并将该 ID 用作存储桶名称。

I also want to get rid of that arn at the end. -1p3s4szy5bomf

您可以为您的存储桶指定一个名称,但 AWS 建议将其清空以生成一个新的存储桶,以避免通过 CloudFormation 示例创建具有相同名称(stackset...)的名称:

"Resources": {
        "S3Bucket": {
            "Type": "AWS::S3::Bucket",
            "DeletionPolicy": "Retain",
            "Properties": {
               "BucketName": "DesiredNameOfBucket" <== 
                },
            "Metadata": {
                "AWS::CloudFormation::Designer": {
                    "id": "bba483af-4ae6-4d3d-b37d-435f66c42e44"
                }
            }
        },

Can I skip Outputs at the end, Not sure what they do

它用于创建存储桶的信息、名称和 ARN,如果需要,您可以从模板中删除输出部分