Skip to main content
Glama

MCP Project Orchestrator

ec2.tf5.49 kB
""" EC2 Instance Configuration for Asterisk SIP Server """ # IAM Role for EC2 Instance resource "aws_iam_role" "asterisk" { name = "${var.project_name}-asterisk-role" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [ { Action = "sts:AssumeRole" Effect = "Allow" Principal = { Service = "ec2.amazonaws.com" } } ] }) tags = local.common_tags } # IAM Policy for CloudWatch, S3, and Parameter Store resource "aws_iam_role_policy" "asterisk" { name = "${var.project_name}-asterisk-policy" role = aws_iam_role.asterisk.id policy = jsonencode({ Version = "2012-10-17" Statement = [ { Effect = "Allow" Action = [ "cloudwatch:PutMetricData", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ] Resource = "*" }, { Effect = "Allow" Action = [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ] Resource = [ aws_s3_bucket.recordings.arn, "${aws_s3_bucket.recordings.arn}/*" ] }, { Effect = "Allow" Action = [ "ssm:GetParameter", "ssm:GetParameters", "ssm:GetParametersByPath" ] Resource = "arn:aws:ssm:${var.aws_region}:*:parameter/${var.project_name}/*" }, { Effect = "Allow" Action = [ "ec2:DescribeInstances", "ec2:DescribeAddresses", "ec2:AssociateAddress" ] Resource = "*" } ] }) } # IAM Instance Profile resource "aws_iam_instance_profile" "asterisk" { name = "${var.project_name}-asterisk-profile" role = aws_iam_role.asterisk.name tags = local.common_tags } # User Data Script for Asterisk Installation data "template_file" "user_data" { template = file("${path.module}/../scripts/user-data.sh") vars = { aws_region = var.aws_region elastic_ip = aws_eip.asterisk.public_ip elevenlabs_phone_e164 = var.elevenlabs_phone_e164 project_name = var.project_name enable_call_recordings = var.enable_call_recordings s3_bucket_recordings = aws_s3_bucket.recordings.id asterisk_log_level = var.asterisk_log_level rtp_port_start = local.rtp_port_start rtp_port_end = local.rtp_port_end enable_cloudwatch = var.enable_cloudwatch_monitoring } } # Primary Asterisk EC2 Instance resource "aws_instance" "asterisk" { ami = data.aws_ami.amazon_linux_2.id instance_type = var.instance_type subnet_id = aws_subnet.public[0].id vpc_security_group_ids = [aws_security_group.asterisk.id] iam_instance_profile = aws_iam_instance_profile.asterisk.name key_name = var.ssh_key_name user_data = data.template_file.user_data.rendered associate_public_ip_address = true monitoring = var.enable_cloudwatch_monitoring root_block_device { volume_type = "gp3" volume_size = 30 delete_on_termination = true encrypted = true tags = merge(local.common_tags, { Name = "${var.project_name}-root-volume" }) } # Additional volume for call recordings (if enabled) dynamic "ebs_block_device" { for_each = var.enable_call_recordings ? [1] : [] content { device_name = "/dev/sdf" volume_type = "gp3" volume_size = 100 delete_on_termination = false encrypted = true tags = merge(local.common_tags, { Name = "${var.project_name}-recordings-volume" }) } } tags = merge(local.common_tags, { Name = "${var.project_name}-asterisk-primary" Role = "Primary" }) lifecycle { create_before_destroy = true } } # Associate Elastic IP resource "aws_eip_association" "asterisk" { instance_id = aws_instance.asterisk.id allocation_id = aws_eip.asterisk.id } # Standby Asterisk Instance (for HA) resource "aws_instance" "asterisk_standby" { count = var.enable_high_availability ? 1 : 0 ami = data.aws_ami.amazon_linux_2.id instance_type = var.instance_type subnet_id = aws_subnet.public[1].id vpc_security_group_ids = [aws_security_group.asterisk.id] iam_instance_profile = aws_iam_instance_profile.asterisk.name key_name = var.ssh_key_name user_data = data.template_file.user_data.rendered associate_public_ip_address = true monitoring = var.enable_cloudwatch_monitoring root_block_device { volume_type = "gp3" volume_size = 30 delete_on_termination = true encrypted = true } tags = merge(local.common_tags, { Name = "${var.project_name}-asterisk-standby" Role = "Standby" }) lifecycle { create_before_destroy = true } } # CloudWatch Log Group for Asterisk resource "aws_cloudwatch_log_group" "asterisk" { name = "/aws/ec2/${var.project_name}/asterisk" retention_in_days = 30 tags = local.common_tags }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sparesparrow/mcp-project-orchestrator'

If you have feedback or need assistance with the MCP directory API, please join our Discord server