Deploy an Embedded Cluster to AWS
Paramify can be deployed in an embedded cluster or "virtual appliance" mode, as an alternative to deploying into an existing Kubernetes cluster.
The following instructions are an example of how to deploy into AWS.
Prerequisites
- AWS SSO login with sufficient permissions to create resources
- Terraform CLI installed
- An available subdomain planned to access the application (e.g., paramify.company.com)
- An AWS key pair to assign to the EC2 instance for SSH
- A Paramify license file
- (Recommended) Credentials for an SMTP server to send email
- (Recommended) Access to configure Okta or Google Cloud Console for SSO
NOTE
You'll need to configure at least one authentication method (e.g., SMTP, Google, Okta) to be able to login to Paramify.
1. Create Infrastructure
Paramify will use the following infrastructure in AWS:
- EC2 instance to run Paramify
- RDS PostgreSQL database
- S3 bucket for generated documentation
- Load balancer to access installer and application
To simplify creation of the infrastructure you can use the example Terraform file aws-paramify-embedded-infra.tf to create everything in an isolated VPC. Be sure to update the variables at the top of the file according to your environment.
Follow these steps to create the infrastructure:
- Create an AWS SSL certificate for the desired subdomain (e.g., paramify.company.com)
- Update and apply the terraform example (or similar):
- In an empty directory, save and edit the example
aws-paramify-embedded-infra.tf
file to set the variables for your environment (including the ARN to the SSL certificate) - Init and check the configuration:
bashterraform init terraform plan
terraform init terraform plan
- Apply the configuration to create AWS resources:
bashterraform apply
terraform apply
INFO
This will usually take a few minutes.
- Copy the convenience output values (or run
terraform output
) that look something like:
db_dns = "paramify-company-db.abc123abc123.us-west-2.rds.amazonaws.com" ec2_id = "i-0123456789example" lb_dns = "paramify-company-lb-1234567890.us-west-2.elb.amazonaws.com" region = "us-west-2" s3_bucket = "paramify-company-s3"
db_dns = "paramify-company-db.abc123abc123.us-west-2.rds.amazonaws.com" ec2_id = "i-0123456789example" lb_dns = "paramify-company-lb-1234567890.us-west-2.elb.amazonaws.com" region = "us-west-2" s3_bucket = "paramify-company-s3"
- In an empty directory, save and edit the example
- Add an AWS Route 53 DNS record (or equivalent) for the desired domain as an alias to the new LB (lookup the
lb_dns
from terraform output when setting alias target)
2. Prepare Installer
Follow these steps to prepare the installer:
SSH using AWS EC2 Instance Connect to the EC2 instance:
- For example, using the
ec2_id
from terraform output as the instance ID execute the following:
bashssh -i my-key-pair.pem ec2-user@i-0123456789example \ -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id i-0123456789example'
ssh -i my-key-pair.pem ec2-user@i-0123456789example \ -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id i-0123456789example'
- For example, using the
Update the EC2 instance (then reboot, if applicable):
bashsudo yum update -y
sudo yum update -y
Download and prepare the installer:
bashcurl -sSL https://kurl.sh/paramify | sudo bash
curl -sSL https://kurl.sh/paramify | sudo bash
INFO
This step usually takes about 10 minutes. If there are preflight warnings then correct, if needed, and proceed (e.g., you can ignore a UTC timezone warning).
Copy and save the output after “Installation Complete” (specifically the admin password, which is required later)
TIP
You can reset the admin password manually with
kubectl kots reset-password default
if needed.
3. Deploy Paramify
At this point the configuration and deployment will be similar to other Paramify deployment methods.
- Open the installer URL at the configured subdomain on port 8443 (e.g., https://paramify.company.com:8443)
- Login using the admin password previously copied from installation output
- Upload your Paramify License file
- Enter your Paramify configuration information then continue
- The "Application Base URL" should match the DNS subdomain you chose (e.g., https://paramify.company.com)
- For "Database" select "External Postgres"
- As "Database Host" enter the
db_dns
from terraform output of the created RDS database. - Set "User" to "postgres" and "Password" to the DB password you set in the
.tf
file variable. - The other settings can be left at default (e.g., port is 5432, database is "postgres").
- As "Database Host" enter the
- "S3 Bucket" name will be the
s3_bucket
from terraform output of the created bucket- "S3 Region" should also match
region
from terraform output
- "S3 Region" should also match
- Wait for Preflight checks to complete
- Deploy the application and wait for the "Ready" status
Now you should be ready to access Paramify at the desired domain (e.g., https://paramify.company.com) and login using one of your configured methods. Enjoy!