Blog

How to create multiple S3 buckets using Cloudformation template

Published on: May 24, 2023 by TECH

How to create multiple S3 buckets using Cloudformation template

Scenario:

AWS CloudFormation provides you with a simple way to create and manage a collection of AWS resources by provisioning and updating them in an orderly and predictable way. In simple terms, it allows you to create and model your infrastructure and applications without having to perform actions manually.

AWS CloudFormation enables you to manage your complete infrastructure or AWS resources in a text file, or template. A collection of AWS resources is called a stack. AWS resources can be created or updated by using a stack.

The following guide will go through the steps involved in setting up a cloudformation template to create multiple S3 buckets.

Create a new template or use an existing CloudFormation template using the JSON or YAML format.

Here, I’m using a new template in YAML format, copy and paste the following code to make the YAML template.

AWSTemplateFormatVersion: 2010-09-09
 
Description: AWS CloudFormation template - to create S3 buckets.
 
Parameters:
  BucketNameParameter1:
    Type: String
    Description: Bucket Name
  BucketNameParameter2:
    Type: String
    Description: Bucket Name
  BucketNameParameter3:
    Type: String
    Description: Bucket Name
 
  EnvironmentType:
    Description: 'Specify the Environment type of the stack.'
    Type: String
    Default: SupportSages-Test
    AllowedValues:
      - SupportSages-Test
      - SupportSages-Prod
      - SupportSages-Dev
    ConstraintDescription: 'Specify either SupportSages-Test or SupportSages-Prod.'
 
Resources:
  S3Bucket1:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      BucketName: !Ref BucketNameParameter1
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256
      VersioningConfiguration:
        Status: Enabled
  S3Bucket2:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      BucketName: !Ref BucketNameParameter2
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256
      VersioningConfiguration:
        Status: Enabled
   
  S3Bucket3:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      BucketName: !Ref BucketNameParameter3
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256
      VersioningConfiguration:
        Status: Enabled
 
  BucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      PolicyDocument:
        Id: MyPolicy
        Version: 2012-10-17
        Statement:
          - Sid: PublicReadForGetBucketObjects
            Effect: Allow
            Principal: '*'
            Action: 's3:GetObject'
            Resource: !Join
              - ''
              - - 'arn:aws:s3:::'
                - !Ref S3Bucket1
                - /*
      Bucket: !Ref S3Bucket1
  BucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      PolicyDocument:
        Id: MyPolicy
        Version: 2012-10-17
        Statement:
          - Sid: PublicReadForGetBucketObjects
            Effect: Allow
            Principal: '*'
            Action: 's3:GetObject'
            Resource: !Join
              - ''
              - - 'arn:aws:s3:::'
                - !Ref S3Bucket2
                - /*
      Bucket: !Ref S3Bucket2
 
  BucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      PolicyDocument:
        Id: MyPolicy
        Version: 2012-10-17
        Statement:
          - Sid: PublicReadForGetBucketObjects
            Effect: Allow
            Principal: '*'
            Action: 's3:GetObject'
            Resource: !Join
              - ''
              - - 'arn:aws:s3:::'
                - !Ref S3Bucket3
                - /*
      Bucket: !Ref S3Bucket3
 
Outputs:
  BucketName1:
    Value: !Ref S3Bucket1
  WebsiteURL1:
    Value: !GetAtt [S3Bucket1, WebsiteURL]
    Description: URL for website hosted on S3
  BucketName2:
    Value: !Ref S3Bucket2
  WebsiteURL2:
    Value: !GetAtt [S3Bucket2, WebsiteURL]
    Description: URL for website hosted on S3
  BucketName3:
    Value: !Ref S3Bucket3
  WebsiteURL3:
    Value: !GetAtt [S3Bucket3, WebsiteURL]
    Description: URL for website hosted on S3

Choose Cloudformation from AWS and click on Create stack and follow:

  • Open the AWS CloudFormation link in a new tab and log in to your AWS account.
  • Click on Create stack (With new resources (Standard) if you have clicked in the top right corner).
  • In Prepare template, choose Template is ready.
  • In Template source, choose Upload a template file.
  • Click on Choose file button and select the file template, Here, I’m using my template with the filename

`S3_bucket_template.yaml` and click Next.

  • Provide a Stack name. For example `MultipleS3`.
  • The Stack name identifies the stack. Use a name to help you distinguish the purpose of this stack.
  • Give in the names of the S3 buckets and click Next.
  • You can leave Configure stack options default, click Next.
  • On the Review page, scroll down to the bottom and click on Create stack.
  • You can click the refresh button a few times until you see in the status CREATE_COMPLETE

  • You can leave Configure stack options default, click Next.
  • On the Review page, scroll down to the bottom and click on Create stack.
  • You can click the refresh button a few times until you see in the status CREATE_COMPLETE.

Category : AWS

TECH

TECH

You may also read:

Comments

Add new commentSIGN IN

Let's Connect

Categories

Your Cart

Cart is empty.

Subtotal
₹0.00
APPLY
0
Send this to a friend