无法从CloudFormation Yaml创建多个S3存储桶

时间:2019-10-11 09:55:03

标签: amazon-web-services amazon-cloudformation

我有一个Yaml文件,用于使用CloudFormation创建堆栈。但是,当涉及到创建一些S3存储桶时,脚本失败,在控制台中出现400 Bad Request错误。我尝试运行仅执行此操作的脚本,但结果相同。这是我正在使用的Yaml文件

AWSTemplateFormatVersion: 2010-09-09
Parameters:
    ArtifactsBucket:
        Type: String
        Default: artifacts.bucket
        Description: S3 Bucket Name for CodeBuild Artifacts
    DevBucket:
        Type: String
        Default: dev.bucket
        Description: S3 Bucket Name for Dev environment.
    StagingBucket:
        Type: String
        Default: staging.bucket
        Description: S3 Bucket Name for Staging environment
    ProductionBucket:
        Type: String
        Default: production.bucket
        Description: S3 Bucket Name for Production environment

Resources:

    # S3 Bucket for build artifacts
    BuildArtifactsBucket:
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: Private
          BucketName: !Sub '${ArtifactsBucket}'

    # S3 Bucket for Dev environment
    DevS3Bucket:
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: Private
          BucketName: !Sub '${DevBucket}'

    # S3 Bucket for Staging environment
    StagingS3Bucket:
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: Private
          BucketName: !Sub '${StagingBucket}'

    # S3 Bucket for Production environment
    ProductionS3Bucket:
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: Private
          BucketName: !Sub '${ProductionBucket}'

我真的不明白这是怎么回事,因为如果我只留下一个S3存储桶资源,那么它将起作用

1 个答案:

答案 0 :(得分:3)

您完全有可能在S3控制api中碰到油门。

为避免过多的并行请求,您可以添加一个DependsOn参数来强制按顺序创建存储桶:

AWSTemplateFormatVersion: 2010-09-09
Parameters:
    ArtifactsBucket:
        Type: String
        Default: artifacts.bucket
        Description: S3 Bucket Name for CodeBuild Artifacts
    DevBucket:
        Type: String
        Default: dev.bucket
        Description: S3 Bucket Name for Dev environment.
    StagingBucket:
        Type: String
        Default: staging.bucket
        Description: S3 Bucket Name for Staging environment
    ProductionBucket:
        Type: String
        Default: production.bucket
        Description: S3 Bucket Name for Production environment

Resources:

    # S3 Bucket for build artifacts
    BuildArtifactsBucket:
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: Private
          BucketName: !Sub '${ArtifactsBucket}'

    # S3 Bucket for Dev environment
    DevS3Bucket:
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: Private
          BucketName: !Sub '${DevBucket}'
        DependsOn: "BuildArtifactsBucket"

    # S3 Bucket for Staging environment
    StagingS3Bucket:
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: Private
          BucketName: !Sub '${StagingBucket}'
        DependsOn: "DevS3Bucket"

    # S3 Bucket for Production environment
    ProductionS3Bucket:
        Type: AWS::S3::Bucket
        Properties:
          AccessControl: Private
          BucketName: !Sub '${ProductionBucket}'
        DependsOn: "StagingS3Bucket"

此处所有存储桶将按顺序创建。您可能可以将它们分为几组,而不是一次严格地分组;实验一下,看看有什么用。