{"id":20393,"date":"2025-08-13T15:06:49","date_gmt":"2025-08-13T15:06:49","guid":{"rendered":"https:\/\/cloudkul.com\/blog\/?p=20393"},"modified":"2025-08-19T05:05:33","modified_gmt":"2025-08-19T05:05:33","slug":"launch-qloapps-with-aws-cloudformation-user-guide","status":"publish","type":"post","link":"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/","title":{"rendered":"Launch QloApps with AWS CloudFormation \u2013 User Guide"},"content":{"rendered":"\n<p>To launch QloApps via CloudFormation, subscribe to the product and deploy it with the provided template. Follow these steps to set up and configure your stack.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1. Go to AWS Marketplace<\/strong><\/h3>\n\n\n\n<ul>\n<li>Open a browser and navigate to: <a href=\"https:\/\/aws.amazon.com\/marketplace\/\">https:\/\/aws.amazon.com\/marketplace\/<\/a><\/li>\n\n\n\n<li>Make sure you are <strong>logged in<\/strong> with your AWS account.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2. Search for Your Product<\/strong><\/h3>\n\n\n\n<ul>\n<li>In the <strong>search bar<\/strong>, type the name of your product.<\/li>\n\n\n\n<li>Click <strong>Enter<\/strong> to view results.<\/li>\n\n\n\n<li>From the results list, click your product\u2019s name to open its <strong>product detail page<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3. Click &#8220;View purchase options&#8221;<\/strong><\/h3>\n\n\n\n<ul>\n<li>This will take you to the <strong>subscription confirmation<\/strong> page.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>4. Accept Terms<\/strong><\/h3>\n\n\n\n<ul>\n<li>You will see the <strong>Terms and Conditions<\/strong> (including pricing and usage policies).<\/li>\n\n\n\n<li>Click <strong>Accept Terms<\/strong>.<\/li>\n\n\n\n<li>AWS will start the <strong>subscription process<\/strong>.<\/li>\n\n\n\n<li>This step <strong>enables your account<\/strong> to use the product&#8217;s AMI\/CloudFormation template.<br><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>5. Wait for Subscription to Complete<\/strong><\/h3>\n\n\n\n<ul>\n<li>Once the subscription is complete (usually a few seconds to a minute), the page will update.<\/li>\n\n\n\n<li>After that, you will see the <strong>&#8220;Continue to Configuration&#8221;<\/strong> button.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>6. Continue to Configuration<\/strong><\/h3>\n\n\n\n<ul>\n<li>Click <strong>Continue to Configuration<\/strong>.<\/li>\n\n\n\n<li>Here you will see:\n<ul>\n<li>Delivery method (choose <strong>CloudFormation template<\/strong>)<\/li>\n\n\n\n<li>Software version<\/li>\n\n\n\n<li>Region selection<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>7. Launch in CloudFormation<\/strong><\/h3>\n\n\n\n<ul>\n<li>When you chose <strong>Launch CloudFormation<\/strong>, it will redirect you to the AWS <strong>CloudFormation console<\/strong> with:\n<ul>\n<li>Template URL pre-filled<\/li>\n\n\n\n<li>Click <strong>Next<\/strong> to proceed with stack configuration.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/cloudformation-config-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"431\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/cloudformation-config-1-1024x431.png\" alt=\"cloudformation-config-1\" class=\"wp-image-20490\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>8. Specify Stack Details<\/strong><\/h3>\n\n\n\n<p>On this screen, you will provide the configuration details for your CloudFormation stack.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/stack-config1-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"434\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/stack-config1-2-1024x434.png\" alt=\"stack-config1-2\" class=\"wp-image-20492\"\/><\/a><\/figure>\n\n\n\n<ul>\n<li><strong>Stack name<\/strong> \u2014 Enter a name for your stack.\n<ul>\n<li>Example: qloapps<\/li>\n\n\n\n<li>This name helps you identify the stack in the CloudFormation console later.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>VPC ID<\/strong> \u2014 From the dropdown, select the VPC where you want to deploy the resources.\n<ul>\n<li>You can use an existing VPC in your account.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Load Balancer Name<\/strong> \u2014 Enter a name for the Application Load Balancer.\n<ul>\n<li>Example: QloAppsALB<\/li>\n\n\n\n<li>The name must be unique within your AWS account and region.<\/li>\n\n\n\n<li><strong>SSL\/TLS Certificate ARN<\/strong> \u2014 This is required for enabling HTTPS on the load balancer.<br>If you don\u2019t already have an SSL certificate in AWS Certificate Manager (ACM), follow these steps to request one<br><strong>Requesting a Public SSL Certificate in ACM:<\/strong>\n<ul>\n<li>Go to the <strong>AWS Management Console<\/strong> and open <strong>Certificate Manager<\/strong>.<\/li>\n\n\n\n<li>Click <strong>Request<\/strong> \u2192 Select <strong>Request a public certificate<\/strong> \u2192 Click <strong>Next<\/strong>.<\/li>\n\n\n\n<li>In the <strong>Fully qualified domain name (FQDN)<\/strong> field, enter your domain name (e.g., example.com) and, if needed, add www.example.com as an additional name.<\/li>\n\n\n\n<li>Choose <strong>DNS validation<\/strong> (recommended) for domain ownership verification.<\/li>\n\n\n\n<li>Click <strong>Request<\/strong>.<\/li>\n\n\n\n<li>After the request is created, open the certificate details page.<\/li>\n\n\n\n<li>You will see a <strong>CNAME record<\/strong> that needs to be added to your domain\u2019s DNS configuration (via Route 53 or your DNS provider).<\/li>\n\n\n\n<li>Once the DNS record is validated, the certificate status will change to <strong>Issued<\/strong>.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/arncert-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"448\" data-id=\"20495\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/arncert-2-1024x448.png\" alt=\"arncert-2\" class=\"wp-image-20495\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<ul>\n<li><strong>Getting the ARN:<\/strong>\n<ul>\n<li>Once issued, go back to ACM, select your certificate, and copy the <strong>Amazon Resource Name (ARN)<\/strong> from the certificate details page.<\/li>\n\n\n\n<li>Paste this ARN into the <strong>SSL\/TLS Certificate ARN<\/strong> field in the CloudFormation stack.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/sslarn-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"448\" data-id=\"20498\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/sslarn-1-1024x448.png\" alt=\"sslarn-1\" class=\"wp-image-20498\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<ul>\n<li><strong>Selecting the Appropriate Subnets<\/strong>\n<ul>\n<li>After adding the SSL\/TLS certificate ARN, the next step is to select the subnets for your resources. When you click on the subnet selection dropdown in the CloudFormation form, you will see the list of available subnet IDs in your VPC.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/subnets_lists-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"403\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/subnets_lists-1-1024x403.png\" alt=\"subnets_lists-1\" class=\"wp-image-20501\"\/><\/a><\/figure>\n\n\n\n<p>We will start with the subnets for the <strong>Application Load Balancer (ALB)<\/strong>:<\/p>\n\n\n\n<ul>\n<li><strong>Always choose public subnets<\/strong> for the ALB.<\/li>\n\n\n\n<li>This is because the ALB must be accessible from the internet to route traffic to your application. If you accidentally select private subnets for the ALB, it will not be reachable from outside your VPC.<\/li>\n\n\n\n<li>For <strong>high availability<\/strong> of your QloApps, you must select <strong>at least two subnets<\/strong> that are in different Availability Zones (AZs). This ensures that your load balancer can continue to serve traffic even if one AZ experiences downtime.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/subnets-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"433\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/subnets-2-1024x433.png\" alt=\"subnets-2\" class=\"wp-image-20506\"\/><\/a><\/figure>\n\n\n\n<ul>\n<li>Double-check that the selected subnets are in the correct AZs and are indeed public (i.e., associated with a route table that has an internet gateway).<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/availability_zones-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"445\" data-id=\"20508\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/availability_zones-1-1024x445.png\" alt=\"availability_zones-1\" class=\"wp-image-20508\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<ul>\n<li>To ensure which subnets are public and which are private, go to the VPC service.<\/li>\n\n\n\n<li>Click &#8220;Subnets&#8221; to list all subnets in the VPC.<\/li>\n\n\n\n<li>Check each subnet\u2019s &#8220;Details&#8221; tab for its Availability Zone.<\/li>\n\n\n\n<li>Go to the subnet\u2019s &#8220;Route Table&#8221; tab to find the associated route table.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/public_subnet-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"448\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/public_subnet-3-1024x448.png\" alt=\"public_subnet-3\" class=\"wp-image-20517\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/pri_subnet-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"415\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/pri_subnet-2-1024x415.png\" alt=\"pri_subnet-2\" class=\"wp-image-20516\"\/><\/a><\/figure>\n\n\n\n<ul>\n<li>Check the route table\u2019s &#8220;Routes&#8221; tab public subnets have a route to an Internet Gateway (e.g., 0.0.0.0\/0 \u2192 igw-xxxx); private subnets route to a NAT Gateway or lack an internet-bound route.<\/li>\n\n\n\n<li>Repeat for all subnets to verify AZs and subnet types.<\/li>\n\n\n\n<li>Once the ALB subnets are chosen, you will need to select the subnets for the <strong>application resources<\/strong> such as <strong>EC2 instances, RDS database, and NFS server<\/strong>:\n<ul>\n<li>The <strong>recommended<\/strong> approach is to use <strong>private subnets<\/strong> for these resources. Placing them in private subnets adds an extra layer of security since they are not directly exposed to the internet. Access can still be managed via the ALB, bastion hosts, or VPN.<\/li>\n\n\n\n<li>If your use case requires direct internet access for these resources (for example, a test environment), you may choose public subnets. However, this is generally not advisable for production environments.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Benefits of using private subnets<\/strong> include:\n<ul>\n<li>Reduced exposure to external threats.<\/li>\n\n\n\n<li>More controlled inbound and outbound network traffic.<\/li>\n\n\n\n<li>Compliance with best practices for security and network architecture.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Finally, before confirming your subnet selection\u2014whether public or private\u2014<strong>always cross-check the Availability Zones<\/strong>:\n<ul>\n<li>The AZs of your application resource subnets should match the AZs of your ALB subnets.<\/li>\n\n\n\n<li>This alignment ensures low latency between the ALB and your backend resources.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/subnets_ids-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"446\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/subnets_ids-2-1024x446.png\" alt=\"subnets_ids-2\" class=\"wp-image-20519\"\/><\/a><\/figure>\n\n\n\n<ul>\n<li><strong>Monitoring:<\/strong>\n<ul>\n<li>In monitoring section create a new S3 bucket for <strong>ALB Access<\/strong> <strong>logs<\/strong> and <strong>ALB Connection logs<\/strong>, attach a policy mentioned below and replace &#8220;<strong>127311923021<\/strong>&#8221; with the Elastic Load Balancing account ID for the load balancer\u2019s Region (refer to the <a href=\"https:\/\/docs.aws.amazon.com\/elasticloadbalancing\/latest\/application\/enable-access-logging.html\">AWS official documentation<\/a> for the full list of IDs according to regions). <\/li>\n\n\n\n<li>Replace the <strong>bucket name<\/strong> and your <strong>AWS account ID<\/strong> in this policy before attaching it to the S3 bucket policy.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/s3bucketpolicy-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"449\" data-id=\"20525\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/s3bucketpolicy-2-1024x449.png\" alt=\"s3bucketpolicy-2\" class=\"wp-image-20525\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<ul>\n<li>Policies that you need to attach to the S3 bucket policy.<\/li>\n\n\n\n<li>This is the policy for ALB access logs.<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"AWS\": \"arn:aws:iam::127311923021:root\"\n            },\n            \"Action\": \"s3:PutObject\",\n            \"Resource\": \"arn:aws:s3:::alb-access-logs-bucket-name\/AWSLogs\/&lt;your-aws-account-id>\/*\"\n        }\n    ]\n}<\/pre>\n\n\n\n<ul>\n<li>This is the policy for ALB connection logs.<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"AWS\": \"arn:aws:iam::127311923021:root\"\n            },\n            \"Action\": \"s3:PutObject\",\n            \"Resource\": \"arn:aws:s3:::alb-connection-logs-bucket-name\/AWSLogs\/&lt;your-aws-account-id>\/*\"\n        }\n    ]\n}\n<\/pre>\n\n\n\n<ul>\n<li>Update the bucket name, and account id in the bucket policy. Copy the bucket name and enter it in both &#8220;S3 Bucket for ALB Access Logs&#8221; and &#8220;S3 Bucket for ALB Connection Logs&#8221; fields to enable logging; if any field is left empty, the corresponding logs will be disabled.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/buckets-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" data-id=\"20527\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/buckets-1-1024x447.png\" alt=\"buckets-1\" class=\"wp-image-20527\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<ul>\n<li><strong>Auto Scaling Group Settings<\/strong>:\n<ul>\n<li>Enter the <strong>minimum, maximum,<\/strong> and <strong>desired capacities<\/strong> for the Auto Scaling Group (ASG) to configure the scaling range and initial instance count. <\/li>\n\n\n\n<li>Set the minimum count to 1 during QloApps configuration to avoid redirection between servers, then adjust the minimum capacity as needed after setup.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Instance Configurations:<\/strong>\n<ul>\n<li>For instance configuration, specify the <strong>instance type<\/strong> and <strong>EC2 key pair<\/strong> for SSH access to the server. Select the instance type according to your needs and enter it in the cloudformation stack (refer to <a href=\"https:\/\/aws.amazon.com\/ec2\/instance-types\/\">AWS official documentation<\/a> for EC2 instance type selection).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>NFS Server Configuration:<\/strong>\n<ul>\n<li>Select the <strong>instance type<\/strong> for your NFS server (check <a href=\"https:\/\/aws.amazon.com\/ec2\/instance-types\/\">AWS docs<\/a> for selecting instance type). Then choose the <strong>storage size<\/strong> for the shared storage, which will be mounted and accessible by all EC2 instances for QloApps application.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/nfsserver.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"448\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/nfsserver-1024x448.png\" alt=\"nfsserver\" class=\"wp-image-20418\"\/><\/a><\/figure>\n\n\n\n<ul>\n<li><strong>Database Configuration:<\/strong>\n<ul>\n<li>Enter a unique <strong>RDS instance name<\/strong> for QloApps Database.<\/li>\n\n\n\n<li>Select the <strong>RDS instance type<\/strong> (check <a href=\"https:\/\/aws.amazon.com\/rds\/instance-types\/\">AWS docs<\/a> for options, e.g., <code>db.t3.medium<\/code>).<\/li>\n\n\n\n<li>Set the <strong>storage size<\/strong> in GB (minimum 10 GB).<\/li>\n\n\n\n<li>Provide the <strong>master username<\/strong> and <strong>master password<\/strong> for database access.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>AMI ID:<\/strong>\n<ul>\n<li>The AMI ID will be pre-filled and should not be changed. This AMI comes with the <strong>QloApps application pre-installed and pre-configured<\/strong>, ensuring that all necessary dependencies are already in place for smooth deployment.<\/li>\n\n\n\n<li>After this click on next button.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/amiid-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"451\" data-id=\"20531\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/amiid-1-1024x451.png\" alt=\"amiid-1\" class=\"wp-image-20531\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<ul>\n<li>After this, select these checkboxes and click the Next button.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/checkboxes-jpg.webp\"><img data-dominant-color=\"161e29\" data-has-transparency=\"false\" style=\"--dominant-color: #161e29;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"450\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/checkboxes-1024x450.webp\" alt=\"checkboxes\" class=\"not-transparent wp-image-20422\"\/><\/a><\/figure>\n\n\n\n<ul>\n<li>After verifying all the details, click the Submit button.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-7 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/submit_form-jpg.webp\"><img data-dominant-color=\"151e26\" data-has-transparency=\"false\" style=\"--dominant-color: #151e26;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"445\" data-id=\"20423\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/submit_form-1024x445.webp\" alt=\"submit_form\" class=\"not-transparent wp-image-20423\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>9.<\/strong> <strong>Launching the Stack<\/strong><\/h3>\n\n\n\n<p>Once you click <strong>Submit<\/strong>, AWS CloudFormation starts processing your template:<\/p>\n\n\n\n<ol>\n<li><strong>Template Validation<\/strong> \u2013 CloudFormation first checks your YAML\/JSON template for syntax errors and ensures all parameters, mappings, and resources are valid.<\/li>\n\n\n\n<li><strong>Resource Creation<\/strong> \u2013 It begins creating resources in the correct dependency order (e.g., Security Groups before ALB, etc.).<\/li>\n\n\n\n<li><strong>Progress Tracking<\/strong> \u2013 You can monitor the status in the <strong>Events<\/strong> tab of the CloudFormation console, where each resource shows <code>CREATE_IN_PROGRESS<\/code> or <code>CREATE_COMPLETE<\/code>.<\/li>\n\n\n\n<li><strong>Error Handling<\/strong> \u2013 If something fails (e.g., wrong parameter value), CloudFormation will roll back all created resources.<\/li>\n\n\n\n<li><strong>Stack Completion<\/strong> \u2013 Once all resources are created successfully, the stack status changes to <strong>CREATE_COMPLETE<\/strong>. You can then access your deployed application using the output values (like ALB DNS name).<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/stack_creation-jpg.webp\"><img data-dominant-color=\"19202c\" data-has-transparency=\"false\" style=\"--dominant-color: #19202c;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"448\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/stack_creation-1024x448.webp\" alt=\"stack_creation\" class=\"not-transparent wp-image-20427\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>10.<\/strong> <strong>Post-Stack Creation: Configuring Internet Access<\/strong><\/h3>\n\n\n\n<p>After your CloudFormation stack is created, the next step depends on your subnet selection:<\/p>\n\n\n\n<ul>\n<li><strong>If you selected private subnets<\/strong> \u2013 You must create a <strong>NAT Gateway<\/strong> before proceeding. This is essential to provide internet access to your application servers, allowing QloApps to download updates and connect to external services.<\/li>\n\n\n\n<li><strong>If you selected public subnets<\/strong> \u2013 You can skip this step, as your application servers will already have direct internet access.<\/li>\n<\/ul>\n\n\n\n<p>Make sure this network setup is complete before starting the QloApps configuration.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">11. <strong>Create the NAT Gateway<\/strong>:<\/h3>\n\n\n\n<ul>\n<li>In the <strong>VPC dashboard<\/strong>, click on <strong>NAT Gateways<\/strong> under the <strong>Virtual Private Cloud<\/strong> section.<\/li>\n\n\n\n<li>Click the <strong>Create NAT Gateway<\/strong> button and provide the name for NAT Gateway.<\/li>\n\n\n\n<li>Select the <strong>Public Subnet<\/strong> where you want the NAT Gateway to reside.<\/li>\n\n\n\n<li>Click on <strong>Allocate<\/strong> <strong>Elastic IP<\/strong>.<\/li>\n\n\n\n<li>Connectivity type should be <strong>public<\/strong>.<\/li>\n\n\n\n<li>Click <strong>Create a NAT Gateway<\/strong>.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/nate_gateways-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"446\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/nate_gateways-1-1024x446.png\" alt=\"nate_gateways-1\" class=\"wp-image-20429\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-8 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/nat_create-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"446\" data-id=\"20533\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/nat_create-1-1024x446.png\" alt=\"nat_create-1\" class=\"wp-image-20533\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1<\/strong>2. <strong>Wait for the NAT Gateway to be Available<\/strong>:<\/h3>\n\n\n\n<ul>\n<li>It may take a few minutes for the NAT Gateway to be created and become available. You can monitor its status in the <strong>NAT Gateways<\/strong> section of the <strong>VPC dashboard<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1<\/strong>3. <strong>Update Route Tables to Use the NAT Gateway<\/strong>:<\/h3>\n\n\n\n<ul>\n<li>Once your NAT Gateway is created, the next step is to update the route tables for your <strong>private subnets<\/strong>. This ensures that traffic from instances in the private subnet can flow through the NAT Gateway to access the internet.<\/li>\n<\/ul>\n\n\n\n<ol>\n<li><strong>Navigate to Route Tables:<\/strong>\n<ul>\n<li>In the <strong>VPC Dashboard<\/strong>, go to <strong>Route Tables<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Select the Private Subnet&#8217;s Route Table:<\/strong>\n<ul>\n<li>Identify and select the route table that is associated with your private subnet.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-9 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/routetable.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" data-id=\"20536\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/routetable-1024x447.png\" alt=\"routetable\" class=\"wp-image-20536\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<ol>\n<li><strong>Add a Route to the NAT Gateway:<\/strong>\n<ul>\n<li>Click <strong>Edit Routes<\/strong>.<\/li>\n\n\n\n<li>Click <strong>Add Route<\/strong> and configure the following:\n<ul>\n<li><strong>Destination:<\/strong> <code>0.0.0.0\/0<\/code> (to allow all outbound internet traffic).<\/li>\n\n\n\n<li><strong>Target:<\/strong> Select the <strong>NAT Gateway<\/strong> that you created earlier.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Save the Route Table:<\/strong>\n<ul>\n<li>Click <strong>Save Changes<\/strong> to apply the changes.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/attach_natgateway-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/attach_natgateway-1-1024x447.png\" alt=\"attach_natgateway-1\" class=\"wp-image-20539\"\/><\/a><\/figure>\n\n\n\n<ul>\n<li>Now, your private subnet instances can route their internet-bound traffic through the NAT Gateway.<\/li>\n<\/ul>\n\n\n\n<p><strong>14. Pointing Your Domain to the Load Balancer (SSL Enabled)<\/strong><\/p>\n\n\n\n<ul>\n<li>After completing the network setup, navigate to the <strong>EC2<\/strong> service in the AWS Management Console and click on <strong>Load Balancers<\/strong>. You will see a load balancer automatically created by the CloudFormation stack.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config6-1.png\"><img data-dominant-color=\"1b212a\" data-has-transparency=\"false\" style=\"--dominant-color: #1b212a;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"448\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config6-1-1024x448.png\" alt=\"qloapps_config6-1\" class=\"not-transparent wp-image-20542\"\/><\/a><\/figure>\n\n\n\n<ul>\n<li>Copy the load balancer DNS name to your DNS manager as a CNAME, matching the domain\/subdomain in your SSL certificate ARN from ACM, to enable HTTPS for your QloApps site.<\/li>\n<\/ul>\n\n\n\n<p><strong>Example:<\/strong><br>If your load balancer DNS name is: <\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">qloapps-alb-1234567890.ap-south-1.elb.amazonaws.com<\/pre>\n\n\n\n<ul>\n<li>And your ACM certificate is issued for <code>qloapps-server.vachak.com<\/code>, create a CNAME record in your DNS manager like this:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Host\/Name<\/th><th>Type<\/th><th>Value<\/th><\/tr><\/thead><tbody><tr><td>qloapps-server.com<\/td><td>CNAME<\/td><td>qloapps-alb-1234567890.ap-south-1.elb.amazonaws.com<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">After DNS propagation is complete, you will be able to access your QloApps application securely over HTTPS.<\/figcaption><\/figure>\n\n\n\n<p><strong>15. Accessing QloApps for Configuration<\/strong><\/p>\n\n\n\n<ul>\n<li>After DNS propagation, open your browser and enter the domain or subdomain you set earlier, linked to your SSL certificate in AWS Certificate Manager, to access your QloApps site.<\/li>\n<\/ul>\n\n\n\n<p>For example:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">https:\/\/qloapps-server.com\/<\/pre>\n\n\n\n<ul>\n<li>This will open the <strong>QloApps installation wizard<\/strong> in your browser.<\/li>\n\n\n\n<li>Follow the on-screen instructions to configure your store, database connection, and administrator account.<\/li>\n\n\n\n<li>First, click the Next button.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-10 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"523\" data-id=\"20559\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config-2-1024x523.png\" alt=\"qloapps_config-2\" class=\"wp-image-20559\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<ul>\n<li>After this you need to accept the term &amp; conditions. Then click next.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config_checkbox-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"524\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config_checkbox-2-1024x524.png\" alt=\"qloapps_config_checkbox-2\" class=\"wp-image-20562\"\/><\/a><\/figure>\n\n\n\n<ul>\n<li><strong>After this, Configuring Website Information in QloApps Installation Wizard<\/strong><\/li>\n<\/ul>\n\n\n\n<ol>\n<li><strong>Website Name<\/strong>\n<ul>\n<li>Enter the name of your website in this field.<\/li>\n\n\n\n<li>Example: <code>QloApps<\/code> or your hotel\/business name.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Country<\/strong>\n<ul>\n<li>Select your country from the drop-down list.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Website Timezone<\/strong>\n<ul>\n<li>Choose the timezone for your website from the list.<\/li>\n\n\n\n<li>Example: <code>US\/Eastern<\/code> if your business is based on the US East Coast.<\/li>\n\n\n\n<li>This ensures booking times and schedules match your local business hours.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-11 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config2-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"522\" data-id=\"20565\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config2-2-1024x522.png\" alt=\"qloapps_config2-2\" class=\"wp-image-20565\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<ul>\n<li><strong>Now moving forword to Creating Your Admin Account in QloApps Installation Wizard<\/strong><\/li>\n<\/ul>\n\n\n\n<ol>\n<li><strong>First Name<\/strong>\n<ul>\n<li>Enter your first name.<\/li>\n\n\n\n<li>Example: <code>John<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Last Name<\/strong>\n<ul>\n<li>Enter your last name.<\/li>\n\n\n\n<li>Example: <code>Alexander<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>E-mail Address<\/strong>\n<ul>\n<li>Provide a valid email address that will be used as your login username for the website\u2019s back office.<\/li>\n\n\n\n<li>Example: <code>admin@example.com<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Password<\/strong>\n<ul>\n<li>Create a strong password.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Re-type to Confirm<\/strong>\n<ul>\n<li>Enter the same password again to confirm it.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Newsletter Subscription (Optional)<\/strong>\n<ul>\n<li>Tick this checkbox if you want to receive newsletters and promotional offers from QloApps.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Proceed to Next Step<\/strong>\n<ul>\n<li>Click the <strong>Next<\/strong> button to move forward with the installation process.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config3-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"522\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config3-1-1024x522.png\" alt=\"qloapps_config3-1\" class=\"wp-image-20556\"\/><\/a><\/figure>\n\n\n\n<ul>\n<li><strong>Now, Configuring Database for QloApps Installation<\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">1. Get the RDS Endpoint from AWS<\/h2>\n\n\n\n<ul>\n<li>Go to the <strong>AWS Management Console<\/strong>.<\/li>\n\n\n\n<li>Navigate to <strong>RDS<\/strong> \u2192 <strong>Databases<\/strong>.<\/li>\n\n\n\n<li>Select the database instance you created for QloApps using cloudformation stack.<\/li>\n\n\n\n<li>Under the <strong>Connectivity &amp; security<\/strong> tab, look for <strong>Endpoint<\/strong> <\/li>\n\n\n\n<li>Copy this endpoint.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-12 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/rdsendpoint-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" data-id=\"20568\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/rdsendpoint-1-1024x447.png\" alt=\"rdsendpoint-1\" class=\"wp-image-20568\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Fill in Database Details in QloApps Installer<\/strong><\/h2>\n\n\n\n<ol>\n<li><strong>Database Server Address<\/strong>\n<ul>\n<li>Paste the RDS endpoint you copied from AWS.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Database Name<\/strong>\n<ul>\n<li>Enter the name of the database you created in RDS.<\/li>\n\n\n\n<li>Example: <code>qloapps<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Database Login<\/strong>\n<ul>\n<li>Enter the master username or the specific database user you created.<\/li>\n\n\n\n<li>Example: <code>qloappsuser<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Database Password<\/strong>\n<ul>\n<li>Enter the password for the above database user.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Tables Prefix<\/strong>\n<ul>\n<li>Keep the default <code>qlo_<\/code> unless you want to change it for customization.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Test the Connection<\/strong><\/h2>\n\n\n\n<ul>\n<li>Click <strong>Test your database connection now!<\/strong><\/li>\n\n\n\n<li>If the connection is successful, you can proceed to the next installation step.<\/li>\n\n\n\n<li>If it fails, double-check:\n<ul>\n<li>Correct database name, username, and password.<\/li>\n\n\n\n<li>After this click on next button.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config4-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"525\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config4-1-1024x525.png\" alt=\"qloapps_config4-1\" class=\"wp-image-20571\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-13 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/rdsconnectiontest-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"524\" data-id=\"20574\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/rdsconnectiontest-1-1024x524.png\" alt=\"rdsconnectiontest-1\" class=\"wp-image-20574\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<p>Once the QloApps installation is complete, you will see a message asking you to <strong>delete the \u201cinstall\u201d folder<\/strong> for security purposes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Here, you will have one of these cases:<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Case 1 \u2013 Your EC2 Instance is in a Private Subnet<\/strong><\/h3>\n\n\n\n<p>If your QloApps EC2 instance is in a private subnet, you cannot connect directly from your local machine. In this case, you must <strong>create a Bastion Host<\/strong> in a public subnet to act as a bridge.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Steps to Create a Bastion Host and Connect to Your Private EC2 Instance:<\/strong><\/h3>\n\n\n\n<ol>\n<li><strong>Launch a Bastion Host EC2 Instance<\/strong>\n<ul>\n<li>In AWS Console, go to <strong>EC2<\/strong> \u2192 <strong>Launch Instances<\/strong>.<\/li>\n\n\n\n<li>Select an Amazon Linux 2 or Ubuntu AMI.<\/li>\n\n\n\n<li>Place it in the <strong>public subnet<\/strong> of the same VPC as your private EC2.<\/li>\n\n\n\n<li>Assign a <strong>public IP<\/strong>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Allow SSH (Port 22) Access to the Bastion Host<\/strong>\n<ul>\n<li>Go to <strong>EC2<\/strong> \u2192 <strong>Security Groups<\/strong>.<\/li>\n\n\n\n<li>Edit inbound rules and allow:\n<ul>\n<li><strong>Port<\/strong>: 22 (SSH)<\/li>\n\n\n\n<li><strong>Source<\/strong>: Private IP of your bastion host (e.g., 172.31.22.163)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Connect to Bastion Host<\/strong>\n<ul>\n<li>From your local machine, SSH into the bastion host:<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ssh -i your-key.pem ec2-user@&lt;BastionHostPublicIP><\/pre>\n\n\n\n<ol>\n<li><strong>SSH from Bastion Host to Private EC2<\/strong>\n<ul>\n<li>From the bastion host, connect to your private EC2 instance: <\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ssh -i your-key.pem ec2-user@&lt;PrivateEC2PrivateIP><\/pre>\n\n\n\n<ol>\n<li><strong>Delete the Install Folder on Private EC2<\/strong>\n<ul>\n<li>Once you are inside your private EC2, then run:<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">cd \/var\/www\/html\/QloApps \nsudo rm -rf install\/<\/pre>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-14 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config7-2.png\"><img data-dominant-color=\"36122b\" data-has-transparency=\"false\" style=\"--dominant-color: #36122b;\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"484\" data-id=\"20447\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config7-2-1024x484.png\" alt=\"qloapps_config7-2\" class=\"not-transparent wp-image-20447\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<p>Previously, we used a Bastion Host to access private EC2 instances. However, AWS provides another, more secure and preferred option \u2014 Session Manager. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Steps to Use Session Manager and Connect to Your Private EC2 Instance<\/strong><\/h3>\n\n\n\n<ul>\n<li>Go to <strong>EC2 console<\/strong> \u2192 Select the private EC2 instance.<\/li>\n\n\n\n<li>Click <strong>Connect<\/strong> (top right).<\/li>\n\n\n\n<li>In the pop-up, choose <strong>Session Manager<\/strong> tab.<\/li>\n\n\n\n<li>Click <strong>Connect<\/strong> \u2192 You\u2019ll get a terminal session directly in your browser.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Case 2 \u2013 Your EC2 Instance is in a Public Subnet<\/strong><\/h2>\n\n\n\n<ul>\n<li>If your EC2 instance is in a public subnet with port 22 already open to your IP, you can directly SSH into it from your local machine and delete the <code>install<\/code> folder using the above command.<\/li>\n<\/ul>\n\n\n\n<p>After deleting the install folder, QloApps setup is complete. You can now use, customize, and export your hotel booking platform data as needed.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config8-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"520\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config8-1-1024x520.png\" alt=\"qloapps_config8-1\" class=\"wp-image-20577\"\/><\/a><\/figure>\n\n\n\n<p>After completing the installation and deleting the install folder, <strong>you can now<\/strong> access the QloApps back office (admin panel) using the credentials you created during setup.<\/p>\n\n\n\n<p>To access the admin panel:<\/p>\n\n\n\n<ol start=\"1\">\n<li>Open your web browser.<\/li>\n\n\n\n<li>Then, navigate to the following URL:<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">http:\/\/Your-Domain-or-Public-IP\/admin<\/pre>\n\n\n\n<ol start=\"1\">\n<li><em>(Replace <\/em><code><em>&lt;Your-Domain-or-Public-IP&gt;<\/em><\/code><em> with your actual domain name or server&#8217;s public IP address.)<\/em><\/li>\n\n\n\n<li>Next, enter the email and password you set during the installation process.<\/li>\n<\/ol>\n\n\n\n<p>After you log in, you will therefore have full access to manage your QloApps store from the back office.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config9-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"521\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config9-1-1024x521.png\" alt=\"qloapps_config9-1\" class=\"wp-image-20580\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-15 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config10-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"522\" data-id=\"20583\" src=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/qloapps_config10-1-1024x522.png\" alt=\"qloapps_config10-1\" class=\"wp-image-20583\"\/><\/a><\/figure>\n<\/figure>\n\n\n\n<p>\ud83c\udf89 Congratulations! Your QloApps setup is complete. Explore the front office for your booking site and manage hotels, bookings, and settings from the back office in a secure, scalable environment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Need Help? Contact Unopim Support<\/strong><\/h3>\n\n\n\n<p>If you need assistance, please reach out to the QloApps provider\u2019s support team for expert guidance and troubleshooting.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>To launch QloApps via CloudFormation, subscribe to the product and deploy it with the provided <a class=\"text-primary\" title=\"read more\" href=\"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":61,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[1],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Launch QloApps with AWS CloudFormation \u2013 User Guide - Cloudkul<\/title>\n<meta name=\"description\" content=\"Step-by-step guide to set up QloApps using AWS CloudFormation. Learn how to subscribe, deploy, and configure your QloApps stack easily.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Launch QloApps with AWS CloudFormation \u2013 User Guide - Cloudkul\" \/>\n<meta property=\"og:description\" content=\"Step-by-step guide to set up QloApps using AWS CloudFormation. Learn how to subscribe, deploy, and configure your QloApps stack easily.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloudkul\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-13T15:06:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-19T05:05:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/cloudformation-config-1-1024x431.png\" \/>\n<meta name=\"author\" content=\"Saurabh Kumar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/\",\"url\":\"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/\",\"name\":\"Launch QloApps with AWS CloudFormation \u2013 User Guide - Cloudkul\",\"isPartOf\":{\"@id\":\"https:\/\/cloudkul.com\/blog\/#website\"},\"datePublished\":\"2025-08-13T15:06:49+00:00\",\"dateModified\":\"2025-08-19T05:05:33+00:00\",\"author\":{\"@id\":\"https:\/\/cloudkul.com\/blog\/#\/schema\/person\/4393fade2ed50c43c8acd020240beded\"},\"description\":\"Step-by-step guide to set up QloApps using AWS CloudFormation. Learn how to subscribe, deploy, and configure your QloApps stack easily.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudkul.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Launch QloApps with AWS CloudFormation \u2013 User Guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudkul.com\/blog\/#website\",\"url\":\"https:\/\/cloudkul.com\/blog\/\",\"name\":\"Cloudkul\",\"description\":\"Host your eCommerce Store on AWS with Optimized Performance\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudkul.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/cloudkul.com\/blog\/#\/schema\/person\/4393fade2ed50c43c8acd020240beded\",\"name\":\"Saurabh Kumar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudkul.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/62e13a91bdbd834be39569e433f77921?s=96&d=https%3A%2F%2Fs.gravatar.com%2Favatar%2F6148c37469011bc2f8e491ca8f5de495%3Fs%3D80&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/62e13a91bdbd834be39569e433f77921?s=96&d=https%3A%2F%2Fs.gravatar.com%2Favatar%2F6148c37469011bc2f8e491ca8f5de495%3Fs%3D80&r=g\",\"caption\":\"Saurabh Kumar\"},\"url\":\"https:\/\/cloudkul.com\/blog\/author\/saurabhkumar-ck797\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Launch QloApps with AWS CloudFormation \u2013 User Guide - Cloudkul","description":"Step-by-step guide to set up QloApps using AWS CloudFormation. Learn how to subscribe, deploy, and configure your QloApps stack easily.","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:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/","og_locale":"en_US","og_type":"article","og_title":"Launch QloApps with AWS CloudFormation \u2013 User Guide - Cloudkul","og_description":"Step-by-step guide to set up QloApps using AWS CloudFormation. Learn how to subscribe, deploy, and configure your QloApps stack easily.","og_url":"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/","og_site_name":"Cloudkul","article_published_time":"2025-08-13T15:06:49+00:00","article_modified_time":"2025-08-19T05:05:33+00:00","og_image":[{"url":"https:\/\/cloudkul.com\/blog\/wp-content\/uploads\/2025\/08\/cloudformation-config-1-1024x431.png"}],"author":"Saurabh Kumar","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/","url":"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/","name":"Launch QloApps with AWS CloudFormation \u2013 User Guide - Cloudkul","isPartOf":{"@id":"https:\/\/cloudkul.com\/blog\/#website"},"datePublished":"2025-08-13T15:06:49+00:00","dateModified":"2025-08-19T05:05:33+00:00","author":{"@id":"https:\/\/cloudkul.com\/blog\/#\/schema\/person\/4393fade2ed50c43c8acd020240beded"},"description":"Step-by-step guide to set up QloApps using AWS CloudFormation. Learn how to subscribe, deploy, and configure your QloApps stack easily.","breadcrumb":{"@id":"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/cloudkul.com\/blog\/launch-qloapps-with-aws-cloudformation-user-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudkul.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Launch QloApps with AWS CloudFormation \u2013 User Guide"}]},{"@type":"WebSite","@id":"https:\/\/cloudkul.com\/blog\/#website","url":"https:\/\/cloudkul.com\/blog\/","name":"Cloudkul","description":"Host your eCommerce Store on AWS with Optimized Performance","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudkul.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/cloudkul.com\/blog\/#\/schema\/person\/4393fade2ed50c43c8acd020240beded","name":"Saurabh Kumar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudkul.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/62e13a91bdbd834be39569e433f77921?s=96&d=https%3A%2F%2Fs.gravatar.com%2Favatar%2F6148c37469011bc2f8e491ca8f5de495%3Fs%3D80&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/62e13a91bdbd834be39569e433f77921?s=96&d=https%3A%2F%2Fs.gravatar.com%2Favatar%2F6148c37469011bc2f8e491ca8f5de495%3Fs%3D80&r=g","caption":"Saurabh Kumar"},"url":"https:\/\/cloudkul.com\/blog\/author\/saurabhkumar-ck797\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/cloudkul.com\/blog\/wp-json\/wp\/v2\/posts\/20393"}],"collection":[{"href":"https:\/\/cloudkul.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudkul.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudkul.com\/blog\/wp-json\/wp\/v2\/users\/61"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudkul.com\/blog\/wp-json\/wp\/v2\/comments?post=20393"}],"version-history":[{"count":63,"href":"https:\/\/cloudkul.com\/blog\/wp-json\/wp\/v2\/posts\/20393\/revisions"}],"predecessor-version":[{"id":20637,"href":"https:\/\/cloudkul.com\/blog\/wp-json\/wp\/v2\/posts\/20393\/revisions\/20637"}],"wp:attachment":[{"href":"https:\/\/cloudkul.com\/blog\/wp-json\/wp\/v2\/media?parent=20393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudkul.com\/blog\/wp-json\/wp\/v2\/categories?post=20393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudkul.com\/blog\/wp-json\/wp\/v2\/tags?post=20393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}