AWS Deployment
Deploy jambonz on AWS using EC2 instances and autoscaling
Prerequisites
jambonz is deployed on Amazon Web Services (AWS) using CloudFormation templates. You will need:
- An AWS account with appropriate permissions
- AWS CLI installed and configured with your credentials
- An AWS SSH key pair for your desired region
Generate and run the CloudFormation templates
The CloudFormation templates for deploying jambonz on AWS are available here.
- Clone the repository to your local machine.
- Decide on the AWS region you want to deploy in and the jambonz configuration (mini, medium, large)
- Run the
generate-cf.shscript to copy the EC2 amis to your account and generate the CloudFormation template - Follow the instructions generated to deploy the Cloudformation stack.
- Once the Cloudformation stack is created, follow the post-install steps outlined in the Post-Install Steps article to complete the setup.
- Generate a software license key as described in the Software Licensing article.
Example
Here is an example of generating a Cloudformation template for a jambonz-mini in us-west-1.
$ ./generate-cf.sh $ ================================================ $ jambonz CloudFormation Generator $ ================================================ $ $ Checking AWS credentials... $ ✓ Authenticated successfully $ Account ID: 376029039764 $ User/Role: arn:aws:iam::376029039764:user/dhorton $ $ Select deployment size: $ 1) mini - Single EC2 instance with all components $ 2) medium - Multi-tier deployment (SBC, Feature Server, Web/Monitoring, Recording) $ 3) large - Fully separated architecture (SBC SIP, SBC RTP, FS, Web, Monitoring, Recording) $ $ Enter choice [1-3]: 2 $ Selected: medium $ $ Select AWS region: $ Available regions: $ 1 us-east-1 $ 2 us-east-2 $ 3 us-west-1 $ 4 us-west-2 $ 5 ca-central-1 $ 6 ca-west-1 $ 7 sa-east-1 $ 8 mx-central-1 $ 9 eu-central-1 $ 10 eu-central-2 $ 11 eu-west-1 $ 12 eu-west-2 $ 13 eu-west-3 $ 14 eu-north-1 $ 15 eu-south-1 $ 16 eu-south-2 $ 17 ap-south-1 $ 18 ap-south-2 $ 19 ap-east-1 $ 20 ap-east-2 $ 21 ap-southeast-1 $ 22 ap-southeast-2 $ 23 ap-southeast-3 $ 24 ap-southeast-4 $ 25 ap-southeast-5 $ 26 ap-southeast-6 $ 27 ap-southeast-7 $ 28 ap-northeast-1 $ 29 ap-northeast-2 $ 30 ap-northeast-3 $ 31 me-central-1 $ 32 me-south-1 $ 33 il-central-1 $ 34 af-south-1 $ $ Enter region name (e.g., us-east-1): eu-west-3 $ Selected region: eu-west-3 $ $ ================================================ $ Reading public AMI IDs from mappings... $ ================================================ $ $ $ Querying version tags from public AMIs... $ This will take a moment - querying 4 AMI(s)... $ $ Querying version tag for SbcAmi (ami-0eb29538f92008874)... $ ✓ SbcAmi: ami-0eb29538f92008874 (version: v10.0.2) $ Querying version tag for FsAmi (ami-0e2ee4081c6393519)... $ ✓ FsAmi: ami-0e2ee4081c6393519 (version: v10.0.2) $ Querying version tag for WebMonitoringAmi (ami-0d11651e060e40b7c)... $ ✓ WebMonitoringAmi: ami-0d11651e060e40b7c (version: v10.0.2) $ Querying version tag for RecordingServerAmi (ami-0b0e1c42c96499cf2)... $ ✓ RecordingServerAmi: ami-0b0e1c42c96499cf2 (version: v10.0.2) $ $ ✓ All AMIs verified with proper JambonzVersion tags $ Detected jambonz version: v10.0.2 $ $ ================================================ $ Validating source AMI availability... $ ================================================ $ $ Checking that all source AMIs are ready to be copied... $ $ Checking SbcAmi (ami-0eb29538f92008874)... $ ✓ AMI is available $ Checking FsAmi (ami-0e2ee4081c6393519)... $ ✓ AMI is available $ Checking WebMonitoringAmi (ami-0d11651e060e40b7c)... $ ✓ AMI is available $ Checking RecordingServerAmi (ami-0b0e1c42c96499cf2)... $ ✓ AMI is available $ $ ✓ All source AMIs are available and ready to copy $ $ ================================================ $ Copying AMIs to your account... $ ================================================ $ $ This will take 5-15 minutes for same-region copying. Please be patient. $ $ Note: Keep this script running to automatically generate the CloudFormation template. $ Status updates every 30 seconds. $ $ Initiating 4 AMI copy operation(s) in parallel... $ $ Starting copy: SbcAmi (ami-0eb29538f92008874) version v10.0.2... $ ✓ Copy initiated: ami-0751fc0bf773500d4 $ Tagging AMI... $ ✓ AMI tagged successfully $ Starting copy: FsAmi (ami-0e2ee4081c6393519) version v10.0.2... $ ✓ Copy initiated: ami-0e09b398f9595b24b $ Tagging AMI... $ ✓ AMI tagged successfully $ Starting copy: WebMonitoringAmi (ami-0d11651e060e40b7c) version v10.0.2... $ ✓ Copy initiated: ami-01d01d4eb80b18f29 $ Tagging AMI... $ ✓ AMI tagged successfully $ Starting copy: RecordingServerAmi (ami-0b0e1c42c96499cf2) version v10.0.2... $ ✓ Copy initiated: ami-0b81b0618f98c334b $ Tagging AMI... $ ✓ AMI tagged successfully $ $ ✓ All 4 AMI copy operation(s) started in parallel $ $ ================================================ $ Waiting for AMI copies to complete... $ ================================================ $ $ Status updates every 30 seconds. This typically takes 5-15 minutes. $ Do not close this terminal or interrupt the script while AMI copies are in progress! $ Tip: You can also check progress in another terminal: $ aws ec2 describe-images --region eu-west-3 --image-ids ami-0751fc0bf773500d4 ami-0e09b398f9595b24b ami-01d01d4eb80b18f29 ami-0b81b0618f98c334b --query 'Images[*].[ImageId,Name,State]' --output table $ $ [Check #1] Elapsed: 0m 13s $ SbcAmi (ami-0751fc0bf773500d4): pending $ FsAmi (ami-0e09b398f9595b24b): pending $ WebMonitoringAmi (ami-01d01d4eb80b18f29): pending $ RecordingServerAmi (ami-0b81b0618f98c334b): pending $ Progress: 0/4 AMIs ready $ $ [Check #2] Elapsed: 0m 47s $ SbcAmi (ami-0751fc0bf773500d4): pending $ FsAmi (ami-0e09b398f9595b24b): pending $ WebMonitoringAmi (ami-01d01d4eb80b18f29): pending $ RecordingServerAmi (ami-0b81b0618f98c334b): pending $ Progress: 0/4 AMIs ready $ $ [Check #3] Elapsed: 1m 20s $ ✓ SbcAmi (ami-0751fc0bf773500d4): available $ ✓ FsAmi (ami-0e09b398f9595b24b): available $ ✓ WebMonitoringAmi (ami-01d01d4eb80b18f29): available $ ✓ RecordingServerAmi (ami-0b81b0618f98c334b): available $ Progress: 4/4 AMIs ready $ $ ================================================ $ ✓ All 4 AMI(s) are now available! $ ================================================ $ Total time: 83s (1m 23s) $ $ ================================================ $ Generating CloudFormation template... $ ================================================ $ $ ✓ CloudFormation template generated: /Users/dhorton/beachdog-enterprises/beachdog-networks/git/jambones.org/jambonz-selfhosting/cloudformation/jambonz-medium-eu-west-3.yaml $ $ Validating generated template... $ ✓ Template is valid YAML $ $ ================================================ $ SUCCESS! $ ================================================ $ $ Copied AMI IDs (for your records): $ SbcAmi: ami-0751fc0bf773500d4 $ FsAmi: ami-0e09b398f9595b24b $ WebMonitoringAmi: ami-01d01d4eb80b18f29 $ RecordingServerAmi: ami-0b81b0618f98c334b $ $ Generated CloudFormation template: $ /Users/dhorton/beachdog-enterprises/beachdog-networks/git/jambones.org/jambonz-selfhosting/cloudformation/jambonz-medium-eu-west-3.yaml $ $ Next steps: $ $ Note: This template is 77680 bytes (CloudFormation has a 51,200 byte limit for direct usage). $ $ 1. Upload template to S3 bucket: $ aws s3 cp /Users/dhorton/beachdog-enterprises/beachdog-networks/git/jambones.org/jambonz-selfhosting/cloudformation/jambonz-medium-eu-west-3.yaml s3://<your-bucket>/jambonz-medium-eu-west-3.yaml $ $ 2. Deploy using S3 URL: $ aws cloudformation create-stack \ > --region eu-west-3 \ > --stack-name jambonz-medium \ > --template-url https://<your-bucket>.s3.amazonaws.com/jambonz-medium-eu-west-3.yaml \ > --capabilities CAPABILITY_IAM \ > --parameters \ > ParameterKey=KeyName,ParameterValue=<your-key-name> \ > ParameterKey=URLPortal,ParameterValue=<your-domain> $ $ 3. Or deploy via AWS Console (recommended for large templates): $ - Navigate to CloudFormation service in eu-west-3 $ - Click 'Create stack' $ - Choose 'Upload a template file' and select: /Users/dhorton/beachdog-enterprises/beachdog-networks/git/jambones.org/jambonz-selfhosting/cloudformation/jambonz-medium-eu-west-3.yaml $ - Follow the wizard to configure parameters