AWS CloudFormation导入S3存储桶时配置文件写法及报错咨询
核心前提
CloudFormation 不支持直接导入S3存储桶下的指定文件夹。S3是扁平化对象存储,控制台展示的「文件夹」是基于对象键(Key)前缀生成的虚拟目录,不属于独立云资源。CloudFormation资源导入能力仅支持导入正式的云资源:S3场景下可导入的资源只有两类:整个S3存储桶(AWS::S3::Bucket)、单个S3对象(AWS::S3::Object,需指定完整对象键,不支持前缀通配批量导入某文件夹下所有内容)。如果需要管理指定前缀下的对象,需在成功导入桶资源后,通过自定义资源、批量对象导入等方式实现,无法直接将「文件夹」作为资源导入。
配置文件错误修正
你原有配置存在两处明确错误:
ResourcesToImport.txt的ResourceIdentifier字段格式错误:S3桶的唯一标识符字段为BucketName,不存在resourceName、resourceType这两个标识键;同时文件内填写的LogicalResourceId必须和模板中定义的资源逻辑ID完全一致,你原有两个文件的逻辑ID分别写为myBucket和S3SourceBucket,不匹配会直接触发校验失败。- 不存在冗余配置:两个文件职责不同,txt文件用于指定待导入资源的类型、逻辑ID、实际资源唯一标识,yaml文件是CloudFormation的栈模板,用于定义资源在栈内的配置规则,二者字段不存在重复冗余问题。
正确的ResourcesToImport.txt配置
仅导入目标S3桶的场景配置如下:
[ { "ResourceType": "AWS::S3::Bucket", "LogicalResourceId": "S3SourceBucket", "ResourceIdentifier": { "BucketName": "myBucket" } } ]
如果需要导入控制台手动创建文件夹时生成的零字节占位对象(键为
folder1/folder2/),可在数组中追加对应资源条目,该操作仅会导入这个占位空对象,不会自动导入前缀下的其他文件:{ "ResourceType": "AWS::S3::Object", "LogicalResourceId": "TargetFolderPlaceholder", "ResourceIdentifier": { "Bucket": "myBucket", "Key": "folder1/folder2/" } }
正确的ResourcesToImport.yaml配置
AWSTemplateFormatVersion: '2010-09-09' Description: Import existing S3 bucket Resources: S3SourceBucket: Type: AWS::S3::Bucket DeletionPolicy: Retain BucketName: myBucket # 如需导入文件夹占位对象,取消下方注释 # TargetFolderPlaceholder: # Type: AWS::S3::Object # DeletionPolicy: Retain # Properties: # Bucket: !Ref S3SourceBucket # Key: folder1/folder2/
控制台报错原因
控制台导入S3资源时输入s3://myBucket/folder1/folder2/触发S3 error: Domain name specified in myBucket is not a valid S3 domain报错,是因为S3桶资源导入环节仅支持输入纯桶名,不支持带前缀路径的S3 URI。输入带路径的URI时,系统会将myBucket/folder1/folder2/整体识别为桶名,该名称不符合S3桶的域名命名规则,因此直接报错。桶导入完成后,才可针对桶内对象执行后续操作。
内容的提问来源于stack exchange,提问作者pymat
相关产品推荐
相关产品推荐

