{"id":1231,"date":"2021-05-28T12:55:49","date_gmt":"2021-05-28T11:55:49","guid":{"rendered":"https:\/\/www.easydeploy.io\/blog\/?p=1231"},"modified":"2023-08-29T13:43:56","modified_gmt":"2023-08-29T12:43:56","slug":"building-single-tenant-saas-application-in-aws-fully-automated-part3","status":"publish","type":"post","link":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/","title":{"rendered":"Building Single Tenant SAAS application in AWS (Fully automated): Part3"},"content":{"rendered":"<p>This is part 3 and final section on &#8220;Building Single Tenant SAAS application in AWS&#8221; if you have not read part 1 and part2. Please refer <a href=\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-platform-in-aws-fully-automated-part1\/\">Building Single Single SAAS application in AWS (Fully automated): Part1<\/a> and <a href=\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part2\/\">Building Single Tenant SAAS application in AWS (Fully automated): Part2<\/a> before proceeding further.<\/p>\n<h3><b>Cloudformation Script for resource creation<\/b>:<\/h3>\n<p><b>Cloudformation template: <\/b><\/p>\n<p>So instead of having to write script with a bunch of AWS API calls, wait loops, and retry logic, you just tell describe what you want and tell CloudFormation to do it for you\u00a0 and our<\/p>\n<p>Client requirement based we write the\u00a0 cloudformation template in yaml format<\/p>\n<p>Let\u2019s go through a launching a CloudFormation stack. We are going to spin up a\u00a0 EC2,Route53, Elastic Load Balancer,RDS,VPC and a Security Groups.<\/p>\n<pre>AWSTemplateFormatVersion: 2010-09-09\r\nDescription: The CloudFormation template for the EC2,ALB,S3.\r\n\r\nParameters:\r\n  company:\r\n    Type: String\r\n  KeyName:\r\n    Description: EC2 Key Pair for SSH Access, you must have created these prior to running this.\r\n    Type: String\r\n    Default: sshkey-cloudformation-demo\r\n  InstanceType:\r\n    Description: WebServer EC2 instance type\r\n    Type: String\r\n    Default: t2.micro\r\n    AllowedValues:\r\n    - t1.micro\r\n    - t2.nano\r\n    - t2.micro\r\n    - t2.small\r\n    - t2.medium\r\n  CodedeployRole :\r\n    Description : Role description\r\n    Type : String\r\n    Default : EC2-Codedeploy  \r\n  Tags:\r\n    Description: EC2 tag name of launch instance\r\n    Type: String\r\n    Default: codedeploy\r\n  SSLCertificateId:\r\n    Description: ssl certificateid name\r\n    Type: String\r\n    Default: arn:aws:acm:ap-south-1:465517521296:certificate\/9c8ac069-2b37-479c-ab05-b25abdb98988\r\n  SSlpolicy:\r\n    Description: ssl policy\r\n    Type: String\r\n    Default: ELBSecurityPolicy-2016-08\r\n  RecordSetDomainName:\r\n    Description: create a sub domain name\r\n    Type: String\r\n    Default: aimcrest.com.  \r\n    \r\n     \r\n  VPC:\r\n    Type: AWS::EC2::VPC::Id\r\n    Default: vpc-0259580badc65cb70\r\n  PublicSubnetA:\r\n    Type: String\r\n    Default: subnet-04f3e3ec5b678c217\r\n  PublicSubnetB:\r\n    Type: String\r\n    Default: subnet-08b26124041951e4c\r\n  PublicSubnetC:\r\n    Type: String\r\n    Default: subnet-00875dca857741667\r\n  PrivatesubnetA:\r\n    Type: String\r\n    Default: subnet-0fa2012ad2698bf34\r\n  PrivatesubnetB:\r\n    Type: String\r\n    Default: subnet-08478c64d665c7068\r\n  PrivatesubnetC:\r\n    Type: String\r\n    Default: subnet-023cd8927c87f3885\r\n\r\n\r\nResources:\r\n# Create a  Amazon Linux Instance and attach a security group\r\n  EC2Instance:\r\n    Type: AWS::EC2::Instance\r\n    Properties:\r\n      KeyName: !Ref KeyName\r\n      InstanceType: !Ref  InstanceType\r\n      ImageId: ami-01d9a41cf34ae4c84\r\n      IamInstanceProfile: !Ref   ListS3BucketsInstanceProfile\r\n      NetworkInterfaces:\r\n        - GroupSet:\r\n            - !Ref InstanceSg\r\n          AssociatePublicIpAddress: 'true'\r\n          DeviceIndex: '0'\r\n          DeleteOnTermination: 'true'\r\n          SubnetId: !Ref PrivatesubnetA\r\n      Tags:\r\n        - Key: Name\r\n          Value: !Ref Tags\r\n  ListS3BucketsInstanceProfile:\r\n    Type: \"AWS::IAM::InstanceProfile\"\r\n    Properties:\r\n      Path: \"\/\"\r\n      Roles:\r\n        - !Ref CodedeployRole      \r\n\r\n# Create an S3 Bucket to store build artifacts\r\n  S3Bucket:\r\n    Type: AWS::S3::Bucket\r\n    Properties:\r\n      BucketName: !Join ['-', [!Ref company, !Ref 'AWS::AccountId', 's3bucket']]\r\n\r\n\r\n# Creat a security group for Ec2 instance and open port 80 in bound from internet\r\n  InstanceSg:\r\n     Type: AWS::EC2::SecurityGroup\r\n     Properties:\r\n       GroupDescription: Enable SSH access via port 22\r\n       VpcId: !Ref VPC\r\n       SecurityGroupIngress:\r\n         - IpProtocol: tcp\r\n           FromPort: '22'\r\n           ToPort: '22'\r\n           CidrIp: 0.0.0.0\/0\r\n         - IpProtocol: tcp\r\n           FromPort: '80'\r\n           ToPort: '80'\r\n           CidrIp: 0.0.0.0\/0\r\n\r\n  # Creat a security group for load balancer and open port 80 in bound from internet\r\n  LoadBalancerSecurityGroup:\r\n    Type: AWS::EC2::SecurityGroup\r\n    Properties:\r\n      GroupDescription: !Join ['-', [!Ref company, !Ref 'AWS::AccountId', 'LoadBalancerSecurityGroup']]\r\n      VpcId: !Ref VPC\r\n      SecurityGroupIngress:\r\n        - IpProtocol: tcp\r\n          FromPort: 80\r\n          ToPort: 80\r\n          CidrIp: 0.0.0.0\/0\r\n        - IpProtocol: tcp\r\n          FromPort: 443\r\n          ToPort: 443\r\n          CidrIp: 0.0.0.0\/0  \r\n\r\n  # Create a LoadBalancer and attach the Security group and Subnets\r\n  LoadBalancer:\r\n    Type: AWS::ElasticLoadBalancingV2::LoadBalancer\r\n    Properties:\r\n      IpAddressType: ipv4\r\n      Name: !Join ['-', [!Ref company, !Ref 'AWS::AccountId', 'LoadBalancer']]\r\n      Scheme: internet-facing\r\n      SecurityGroups:\r\n        - !Ref LoadBalancerSecurityGroup\r\n      Subnets:\r\n        - !Ref PublicSubnetA\r\n        - !Ref PublicSubnetB\r\n        - !Ref PublicSubnetC\r\n      Type: application\r\n  # Create a Route53 sub domain alias with ELB      \r\n  Route53DNS:\r\n    Type: AWS::Route53::RecordSetGroup\r\n    Properties:\r\n     HostedZoneName: aimcrest.com.\r\n     Comment: Zone apex alias targeted to myELB LoadBalancer.\r\n     RecordSets:\r\n     - Name: !Join ['', [!Ref 'company', ., !Ref 'RecordSetDomainName']]\r\n       Type: A\r\n       AliasTarget:\r\n         HostedZoneId: !GetAtt 'LoadBalancer.CanonicalHostedZoneID'\r\n         DNSName: !GetAtt 'LoadBalancer.DNSName'    \r\n\r\n\r\n  # Create a TargetGroup for HTTP port 80\r\n  TargetGroup:\r\n    Type: AWS::ElasticLoadBalancingV2::TargetGroup\r\n    Properties:\r\n      Name: !Join ['-', [!Ref company, !Ref 'AWS::AccountId', 'TargetGroup']]\r\n      HealthCheckIntervalSeconds: 30\r\n      HealthCheckProtocol: HTTP\r\n      HealthCheckTimeoutSeconds: 15\r\n      HealthyThresholdCount: 5\r\n      Matcher:\r\n        HttpCode: '200'\r\n      Port: 80\r\n      Protocol: HTTP\r\n      TargetGroupAttributes:\r\n      - Key: deregistration_delay.timeout_seconds\r\n        Value: '20'\r\n      Targets:\r\n      - Id: !Ref EC2Instance\r\n        Port: 80\r\n      UnhealthyThresholdCount: 3\r\n      VpcId: !Ref VPC\r\n\r\n  # Create a LoadBalancerListener and attach the TargetGroup and LoadBalancer\r\n  LoadBalancerHttpsListener:\r\n    Type: AWS::ElasticLoadBalancingV2::Listener\r\n    Properties:\r\n      LoadBalancerArn: !Ref LoadBalancer\r\n      Port: 443\r\n      Protocol: HTTPS\r\n      Certificates:\r\n      - CertificateArn: !Ref  SSLCertificateId\r\n      SslPolicy: 'ELBSecurityPolicy-2016-08'\r\n      DefaultActions:\r\n        - Type: forward\r\n          TargetGroupArn: !Ref TargetGroup\r\n  LoadBalancerHttpListener:\r\n     Type : AWS::ElasticLoadBalancingV2::Listener\r\n     Properties:\r\n      DefaultActions:\r\n        - RedirectConfig:\r\n            Host: \"#{host}\"\r\n            Path: \"\/#{path}\"\r\n            Port: 443\r\n            Protocol: \"HTTPS\"\r\n            Query: \"#{query}\"\r\n            StatusCode: HTTP_301\r\n          Type: redirect\r\n      LoadBalancerArn: !Ref LoadBalancer\r\n      Port: 80\r\n      Protocol: HTTP\r\n\r\n  # create a database security group    \r\n  DBSecurityGroup:\r\n    Type: AWS::EC2::SecurityGroup\r\n    Properties:\r\n      GroupDescription: \"DB instances security group\"\r\n      GroupName: \"test-db-instance-SG\"\r\n      VpcId: !Ref VPC\r\n      SecurityGroupIngress:\r\n      - IpProtocol: tcp\r\n        FromPort: '3306'\r\n        ToPort: '3306'\r\n        CidrIp: \"0.0.0.0\/0\"\r\n    \r\n  #  SourceSecurityGroupName: !Ref 'EC2SecurityGroup'\r\n  DBSubnetGroup:\r\n   Type: AWS::RDS::DBSubnetGroup\r\n   Properties:\r\n      DBSubnetGroupDescription: \"test  db subnet group\"\r\n      DBSubnetGroupName: \"test-dbtier-subnet-group\"\r\n      SubnetIds:\r\n        - !Ref PrivatesubnetA\r\n        - !Ref PrivatesubnetB\r\n      Tags:\r\n        - Key: Name\r\n          Value: us-east-1-test-dbtier-subnet-group\r\n        - Key: createdBy\r\n          Value: Niyaz\r\n        - Key: Project\r\n          Value: test-db\r\n        - Key: Environment\r\n          Value: test            \r\n\r\n  # Create a RDS serverless DB\r\n  RDSCluster:\r\n    Type: AWS::RDS::DBCluster\r\n    Properties:\r\n      BackupRetentionPeriod : 1\r\n      DBClusterIdentifier : test-db-cluster\r\n      MasterUsername:\r\n        Ref: DBUsername\r\n      MasterUserPassword:\r\n        Ref: DBPassword\r\n      DatabaseName: !Ref DBName\r\n      Engine: aurora\r\n      EngineMode: serverless\r\n      EngineVersion: !Ref EngineVersion\r\n      ScalingConfiguration:\r\n        AutoPause: true\r\n        MaxCapacity: 2\r\n        MinCapacity: 1\r\n        SecondsUntilAutoPause: 300\r\n      DBSubnetGroupName:\r\n        Ref: DBSubnetGroup\r\n      VpcSecurityGroupIds:\r\n        - !Ref DBSecurityGroup\r\n<\/pre>\n<p>You have to run the command in your terminal below given:<\/p>\n<p>Please make sure which directory in a cloudforamtion stack you saved mention in the file path. in my case we saved (\/home\/ec2-user\/public_html\/user\/EC2-instance.yml)<\/p>\n<pre>aws cloudformation create-stack --template-body file:\/\/\/home\/ec2-user\/public_html\/user\/EC2-instance.yml--stack-name \"\" --capabilities CAPABILITY_NAMED_IAM --parameters ParameterKey=KeyName,ParameterValue=sshkey-cloudformation-demo ParameterKey=InstanceType,ParameterValue=t2.micro ParameterKey=company,ParameterValue=\"\" ParameterKey=RecordSetDomainName,ParameterValue=\"\" ParameterKey=Tags,ParameterValue=codedeploy\r\n<\/pre>\n<p>The above command you need to use it in your application codes to run the automation process. You can either use a web form where the client inputs all the information that is needed by the ParameterValue. The above command will create the stack that composes of EC2 instance, Elastic load balancer, S3 bucket, RDS serverless instance, security groups.<\/p>\n<p>Once the stack creation is complete you can have the application ready at company.maindomain.com.<\/p>\n<p>We have\u00a0 cloudformation stack that also runs using ECS Fargate, Lambda, and many other AWS services that combines to support a fully automated SAAS application deployment .<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is part 3 and final section on &#8220;Building Single Tenant SAAS application in AWS&#8221; if you have not read part 1 and part2. Please refer Building Single Single SAAS application in AWS (Fully automated): Part1 and Building Single Tenant SAAS application in AWS (Fully automated): Part2 before proceeding further. Cloudformation Script for resource creation: [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":1447,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[2,128,26],"tags":[12,305,306,307,308,309,303,304],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Building Single Tenant SAAS application in AWS (Fully automated): Part3<\/title>\n<meta name=\"description\" content=\"Steps on how to build an automated SAAS application on AWS with cloudformation, EC2, RDS, ALB, S3, CodeCommit, CodeDeploy and Codepipelines.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building Single Tenant SAAS application in AWS (Fully automated): Part3\" \/>\n<meta property=\"og:description\" content=\"Steps on how to build an automated SAAS application on AWS with cloudformation, EC2, RDS, ALB, S3, CodeCommit, CodeDeploy and Codepipelines.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/\" \/>\n<meta property=\"og:site_name\" content=\"easydeploy.io\" \/>\n<meta property=\"article:published_time\" content=\"2021-05-28T11:55:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-29T12:43:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2021\/05\/Untitled-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"779\" \/>\n\t<meta property=\"og:image:height\" content=\"422\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Siranjeevi R\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Siranjeevi R\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/\"},\"author\":{\"name\":\"Siranjeevi R\",\"@id\":\"https:\/\/www.easydeploy.io\/blog\/#\/schema\/person\/0e7f79e0cd26f6446f7a76d9d2d3b20c\"},\"headline\":\"Building Single Tenant SAAS application in AWS (Fully automated): Part3\",\"datePublished\":\"2021-05-28T11:55:49+00:00\",\"dateModified\":\"2023-08-29T12:43:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/\"},\"wordCount\":282,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.easydeploy.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2021\/05\/Untitled-2.png\",\"keywords\":[\"AWS\",\"cloudformation\",\"CodeCommit\",\"CodeDeploy\",\"Codepipelines\",\"SAAS\",\"SAAS application\",\"SAAS application in AWS\"],\"articleSection\":[\"Amazon Web Services\",\"Cloud Computing\",\"DevOps\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/\",\"url\":\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/\",\"name\":\"Building Single Tenant SAAS application in AWS (Fully automated): Part3\",\"isPartOf\":{\"@id\":\"https:\/\/www.easydeploy.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2021\/05\/Untitled-2.png\",\"datePublished\":\"2021-05-28T11:55:49+00:00\",\"dateModified\":\"2023-08-29T12:43:56+00:00\",\"description\":\"Steps on how to build an automated SAAS application on AWS with cloudformation, EC2, RDS, ALB, S3, CodeCommit, CodeDeploy and Codepipelines.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#primaryimage\",\"url\":\"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2021\/05\/Untitled-2.png\",\"contentUrl\":\"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2021\/05\/Untitled-2.png\",\"width\":779,\"height\":422,\"caption\":\"Multi Tenant SAAS application in AWS\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.easydeploy.io\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building Single Tenant SAAS application in AWS (Fully automated): Part3\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.easydeploy.io\/blog\/#website\",\"url\":\"https:\/\/www.easydeploy.io\/blog\/\",\"name\":\"easydeploy.io\",\"description\":\"A Cloud Architect Company\",\"publisher\":{\"@id\":\"https:\/\/www.easydeploy.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.easydeploy.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.easydeploy.io\/blog\/#organization\",\"name\":\"EasyDeploy Technologies Pvt Ltd\",\"url\":\"https:\/\/www.easydeploy.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.easydeploy.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2019\/02\/easydeploy.png\",\"contentUrl\":\"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2019\/02\/easydeploy.png\",\"width\":536,\"height\":100,\"caption\":\"EasyDeploy Technologies Pvt Ltd\"},\"image\":{\"@id\":\"https:\/\/www.easydeploy.io\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.easydeploy.io\/blog\/#\/schema\/person\/0e7f79e0cd26f6446f7a76d9d2d3b20c\",\"name\":\"Siranjeevi R\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.easydeploy.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/353661218917699fcc292e9bc0da9081?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/353661218917699fcc292e9bc0da9081?s=96&d=mm&r=g\",\"caption\":\"Siranjeevi R\"},\"url\":\"https:\/\/www.easydeploy.io\/blog\/author\/siru\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building Single Tenant SAAS application in AWS (Fully automated): Part3","description":"Steps on how to build an automated SAAS application on AWS with cloudformation, EC2, RDS, ALB, S3, CodeCommit, CodeDeploy and Codepipelines.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/","og_locale":"en_GB","og_type":"article","og_title":"Building Single Tenant SAAS application in AWS (Fully automated): Part3","og_description":"Steps on how to build an automated SAAS application on AWS with cloudformation, EC2, RDS, ALB, S3, CodeCommit, CodeDeploy and Codepipelines.","og_url":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/","og_site_name":"easydeploy.io","article_published_time":"2021-05-28T11:55:49+00:00","article_modified_time":"2023-08-29T12:43:56+00:00","og_image":[{"width":779,"height":422,"url":"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2021\/05\/Untitled-2.png","type":"image\/png"}],"author":"Siranjeevi R","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Siranjeevi R","Estimated reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#article","isPartOf":{"@id":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/"},"author":{"name":"Siranjeevi R","@id":"https:\/\/www.easydeploy.io\/blog\/#\/schema\/person\/0e7f79e0cd26f6446f7a76d9d2d3b20c"},"headline":"Building Single Tenant SAAS application in AWS (Fully automated): Part3","datePublished":"2021-05-28T11:55:49+00:00","dateModified":"2023-08-29T12:43:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/"},"wordCount":282,"commentCount":0,"publisher":{"@id":"https:\/\/www.easydeploy.io\/blog\/#organization"},"image":{"@id":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2021\/05\/Untitled-2.png","keywords":["AWS","cloudformation","CodeCommit","CodeDeploy","Codepipelines","SAAS","SAAS application","SAAS application in AWS"],"articleSection":["Amazon Web Services","Cloud Computing","DevOps"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/","url":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/","name":"Building Single Tenant SAAS application in AWS (Fully automated): Part3","isPartOf":{"@id":"https:\/\/www.easydeploy.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#primaryimage"},"image":{"@id":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#primaryimage"},"thumbnailUrl":"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2021\/05\/Untitled-2.png","datePublished":"2021-05-28T11:55:49+00:00","dateModified":"2023-08-29T12:43:56+00:00","description":"Steps on how to build an automated SAAS application on AWS with cloudformation, EC2, RDS, ALB, S3, CodeCommit, CodeDeploy and Codepipelines.","breadcrumb":{"@id":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#primaryimage","url":"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2021\/05\/Untitled-2.png","contentUrl":"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2021\/05\/Untitled-2.png","width":779,"height":422,"caption":"Multi Tenant SAAS application in AWS"},{"@type":"BreadcrumbList","@id":"https:\/\/www.easydeploy.io\/blog\/building-single-tenant-saas-application-in-aws-fully-automated-part3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.easydeploy.io\/blog\/"},{"@type":"ListItem","position":2,"name":"Building Single Tenant SAAS application in AWS (Fully automated): Part3"}]},{"@type":"WebSite","@id":"https:\/\/www.easydeploy.io\/blog\/#website","url":"https:\/\/www.easydeploy.io\/blog\/","name":"easydeploy.io","description":"A Cloud Architect Company","publisher":{"@id":"https:\/\/www.easydeploy.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.easydeploy.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/www.easydeploy.io\/blog\/#organization","name":"EasyDeploy Technologies Pvt Ltd","url":"https:\/\/www.easydeploy.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.easydeploy.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2019\/02\/easydeploy.png","contentUrl":"https:\/\/www.easydeploy.io\/blog\/wp-content\/uploads\/2019\/02\/easydeploy.png","width":536,"height":100,"caption":"EasyDeploy Technologies Pvt Ltd"},"image":{"@id":"https:\/\/www.easydeploy.io\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.easydeploy.io\/blog\/#\/schema\/person\/0e7f79e0cd26f6446f7a76d9d2d3b20c","name":"Siranjeevi R","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.easydeploy.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/353661218917699fcc292e9bc0da9081?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/353661218917699fcc292e9bc0da9081?s=96&d=mm&r=g","caption":"Siranjeevi R"},"url":"https:\/\/www.easydeploy.io\/blog\/author\/siru\/"}]}},"_links":{"self":[{"href":"https:\/\/www.easydeploy.io\/blog\/wp-json\/wp\/v2\/posts\/1231"}],"collection":[{"href":"https:\/\/www.easydeploy.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.easydeploy.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.easydeploy.io\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.easydeploy.io\/blog\/wp-json\/wp\/v2\/comments?post=1231"}],"version-history":[{"count":6,"href":"https:\/\/www.easydeploy.io\/blog\/wp-json\/wp\/v2\/posts\/1231\/revisions"}],"predecessor-version":[{"id":1446,"href":"https:\/\/www.easydeploy.io\/blog\/wp-json\/wp\/v2\/posts\/1231\/revisions\/1446"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.easydeploy.io\/blog\/wp-json\/wp\/v2\/media\/1447"}],"wp:attachment":[{"href":"https:\/\/www.easydeploy.io\/blog\/wp-json\/wp\/v2\/media?parent=1231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.easydeploy.io\/blog\/wp-json\/wp\/v2\/categories?post=1231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.easydeploy.io\/blog\/wp-json\/wp\/v2\/tags?post=1231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}