Completing vProfile Deployment on AWS Elastic Beanstalk

A practical walkthrough of connecting the final backend details, deploying the application artifact, verifying the live environment, and securing the Beanstalk setup with HTTPS and a custom domain.

After creating the Elastic Beanstalk environment and allowing the application layer to reach the backend services, the next step was to complete the actual application deployment. This is the stage where the vProfile stack starts behaving like a full working system rather than a collection of separate AWS services.

At this point, the environment, database, cache, and messaging layers already existed. The remaining work was to connect the app to the right backend endpoints, build the deployable artifact, publish it through Elastic Beanstalk, and then secure the public entry point properly.

Main idea: the final deployment step is where infrastructure and application configuration come together. If the endpoints, ports, credentials, or listener setup are wrong, the environment may launch but the application will not work correctly.

Deployment Flow

Backend services ready -> Update application configuration -> Build application artifact -> Deploy application version to Beanstalk -> Verify application behavior -> Add HTTPS and custom domain

Collect Backend Service Information

Before deployment, the application needed the correct connection details for each backend service. These values come from the AWS console pages for RDS, ElastiCache, and Amazon MQ.

RDS endpoint -> your-db.xxxxxx.region.rds.amazonaws.com:3306 Memcached endpoint -> your-cache.xxxxxx.cfg.region.cache.amazonaws.com:11211 RabbitMQ endpoint -> amqps://your-broker.xxxxxx.region.amazonaws.com:5671
Amazon MQ for RabbitMQ uses secure AMQP with TLS on port 5671. That is why the endpoint is different from a plain non-TLS RabbitMQ setup.

Update the Application Configuration

After gathering the endpoints, the application configuration had to be updated so the Beanstalk-hosted app could talk to the right backend services.

In practice, the exact property names depend on the application, but the configuration usually includes values like database host, cache host, broker endpoint, usernames, passwords, and ports.

db.host=RDS-ENDPOINT db.port=3306 db.username=admin db.password=your-password memcached.host=CACHE-ENDPOINT memcached.port=11211 rmq.host=MQ-ENDPOINT rmq.port=5671 rmq.username=your-broker-user rmq.password=your-broker-password
Important: if the application settings are wrong, the deployment may still complete, but the app can fail at runtime when it tries to connect to the database, cache, or broker.

Build the Application Artifact

Once the configuration was ready, the next step was to build the deployable artifact locally. For the Java-based vProfile project, this meant generating the WAR file through Maven.

mvn install

The build output is typically the deployable WAR file inside the target directory.

target/vprofile-v2.war

Deploy the Application Version to Beanstalk

Elastic Beanstalk treats the uploaded artifact as an application version. After the WAR file is ready, it can be uploaded and deployed from the environment dashboard.

  1. Open the Elastic Beanstalk environment
  2. Choose Upload and deploy
  3. Select the generated WAR file
  4. Set a version label
  5. Start the deployment

Beanstalk then distributes that version to the EC2 instances in the environment according to the deployment policy that was chosen earlier.

Deployment Behavior During the Update

In this setup, a rolling deployment with percentage-based batches was used. That means Beanstalk updates one batch of instances at a time instead of replacing everything at once.

Instance batch -> Draining -> Updating -> Health check -> Back in service

This helps reduce disruption during deployment, but it is different from rolling with additional batch or traffic splitting, which are the safer choices when maintaining full capacity or canary-style rollout is critical.

Verify That the Application Works

After deployment completes, the first check is the Beanstalk environment URL.

http://your-app.elasticbeanstalk.com

A successful verification usually means more than simply loading the home page. The important part is confirming that the app can actually communicate with its backend dependencies.

  • The application loads through the Beanstalk URL
  • Authentication or login works as expected
  • Pages that depend on database reads respond correctly
  • No backend connection errors appear in the logs
If the page loads but some actions fail, the issue is often in backend connectivity, credentials, or application properties rather than the Beanstalk platform itself.

Enable HTTPS for the Environment

By default, a new web environment may begin with HTTP access. To secure user traffic properly, the load balancer needs an HTTPS listener and a valid certificate.

  1. Add an HTTPS listener to the load balancer
  2. Use port 443
  3. Attach an ACM certificate for the application domain
HTTPS listener -> Port 443 Certificate -> ACM certificate

This allows TLS termination at the load balancer so the public entry point becomes secure.

Map a Custom Domain

Elastic Beanstalk environments already have a default domain name, but a custom domain makes the deployment feel production-ready and easier to present.

The environment URL is based on an Elastic Beanstalk CNAME, and a custom DNS record can point users to that environment. With Route 53 this is often done as an alias, and with external DNS providers it is commonly done with a CNAME where appropriate.

Environment URL -> your-app.region.elasticbeanstalk.com Custom domain -> app.yourdomain.com

Final Architecture View

User -> HTTPS -> Load Balancer -> Beanstalk EC2 -> RDS -> Memcached -> RabbitMQ

What I Learned

  • Final deployment depends on both infrastructure and application configuration
  • Correct backend endpoints and ports are essential
  • Rolling deployments reduce risk compared with all-at-once updates
  • HTTPS is completed at the load balancer with a certificate
  • A custom domain makes the environment easier to use and present

Conclusion

This step brought the full vProfile environment together. The app was no longer just deployed on Beanstalk in isolation. It became a connected application using a managed database, cache, message broker, load balancer, and secure public access path.

It also showed that successful deployment is not only about uploading a WAR file. Good endpoint management, health checks, secure listeners, and DNS setup are what make the environment feel complete and dependable.