Skip to content

Commit

Permalink
Merge pull request #293 from ant-media/gcp-jinja-template
Browse files Browse the repository at this point in the history
Add the GCP Jinja template for clustering deployment
  • Loading branch information
Mohit-3196 authored Jun 10, 2024
2 parents 2801a28 + 2ed75c6 commit 04c36fd
Show file tree
Hide file tree
Showing 9 changed files with 416 additions and 0 deletions.
45 changes: 45 additions & 0 deletions gcp-jinja-template/antmedia-firewall-template.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{#
Copyright 2016 Google Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
#}

resources:
- type: compute.v1.firewall
name: ams-mongodb-internal
properties:
network: $(ref.antmedia-vpc-network.selfLink)
sourceRanges:
- 10.0.0.0/16
targetTags:
- antmedia-mongodb
allowed:
- IPProtocol: tcp
ports:
- "27017"
- "22"

- type: compute.v1.firewall
name: ams-antmedia-external
properties:
network: $(ref.antmedia-vpc-network.selfLink)
sourceRanges:
- 0.0.0.0/0
targetTags:
- antmedia
allowed:
- IPProtocol: tcp
ports:
- "5080"
- "22"
- "1935"

52 changes: 52 additions & 0 deletions gcp-jinja-template/antmedia-instance-group-template.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
resources:
- name: origin-instance-group
type: compute.v1.instanceGroupManager
properties:
zone: {{ properties["zone"] }}
targetSize: 1
baseInstanceName: antmedia-origin
instanceTemplate: projects/{{ env["project"] }}/global/instanceTemplates/ams-origin-template
namedPorts:
- name: http
port: 5080
metadata:
dependsOn:
- ams-origin-template

- name: origin-autoscaler
type: compute.v1.autoscaler
properties:
zone: {{ properties["zone"] }}
target: $(ref.origin-instance-group.selfLink)
autoscalingPolicy:
minNumReplicas: 1
maxNumReplicas: 10
coolDownPeriodSec: 60
cpuUtilization:
utilizationTarget: 0.6

- name: edge-instance-group
type: compute.v1.instanceGroupManager
properties:
zone: {{ properties["zone"] }}
targetSize: 1
baseInstanceName: antmedia-edge
instanceTemplate: projects/{{ env["project"] }}/global/instanceTemplates/ams-edge-template
namedPorts:
- name: http
port: 5080
metadata:
dependsOn:
- ams-edge-template

- name: edge-autoscaler
type: compute.v1.autoscaler
properties:
zone: {{ properties["zone"] }}
target: $(ref.edge-instance-group.selfLink)
autoscalingPolicy:
minNumReplicas: 1
maxNumReplicas: 10
coolDownPeriodSec: 60
cpuUtilization:
utilizationTarget: 0.6
65 changes: 65 additions & 0 deletions gcp-jinja-template/antmedia-instance-template.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
resources:
- name: ams-origin-template
type: compute.v1.instanceTemplate
properties:
properties:
zone: {{ properties["zone"] }}
machineType: {{ properties["origin_machine_type"] }}
metadata:
items:
- key: startup-script
value: |-
#!/bin/bash
rm -rf /usr/local/antmedia/conf/instanceId
rm -rf /usr/local/antmedia/*.db.*
rm -rf /usr/local/antmedia/*.db
cd /usr/local/antmedia
./change_server_mode.sh cluster $(ref.{{ env["deployment"] }}-mongodb.networkInterfaces[0].networkIP)
disks:
- deviceName: boot
type: PERSISTENT
boot: true
autoDelete: true
initializeParams:
sourceImage: projects/{{ env["project"] }}/global/images/{{ properties["image_id"] }}
networkInterfaces:
- network: $(ref.antmedia-vpc-network.selfLink)
subnetwork: $(ref.origin-subnet.selfLink)
accessConfigs:
- name: External NAT
type: ONE_TO_ONE_NAT
tags:
items:
- antmedia
- name: ams-edge-template
type: compute.v1.instanceTemplate
properties:
properties:
zone: {{ properties["zone"] }}
machineType: {{ properties["edge_machine_type"] }}
metadata:
items:
- key: startup-script
value: |-
#!/bin/bash
rm -rf /usr/local/antmedia/conf/instanceId
rm -rf /usr/local/antmedia/*.db.*
rm -rf /usr/local/antmedia/*.db
cd /usr/local/antmedia
./change_server_mode.sh cluster $(ref.{{ env["deployment"] }}-mongodb.networkInterfaces[0].networkIP)
disks:
- deviceName: boot
type: PERSISTENT
boot: true
autoDelete: true
initializeParams:
sourceImage: projects/{{ env["project"] }}/global/images/{{ properties["image_id"] }}
networkInterfaces:
- network: $(ref.antmedia-vpc-network.selfLink)
subnetwork: $(ref.edge-subnet.selfLink)
accessConfigs:
- name: External NAT
type: ONE_TO_ONE_NAT
tags:
items:
- antmedia
74 changes: 74 additions & 0 deletions gcp-jinja-template/antmedia-loadbalancer-template.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
{% set scenarios = ['origin', 'edge'] %}


resources:
{% for scenario in scenarios %}
- name: ams-load-balancer-{{ scenario }}
type: compute.v1.globalForwardingRule
properties:
region: {{ properties["region"] }}
loadBalancingScheme: EXTERNAL
target: $(ref.ams-target-proxy-{{ scenario }}.selfLink)
IPAddress: $(ref.lb-ipaddress-{{ scenario }}.address)
IPProtocol: TCP
portRange: 443-443

- name: ams-target-proxy-{{ scenario }}
type: compute.v1.targetHttpsProxy
properties:
urlMap: $(ref.ams-{{ scenario }}.selfLink)
sslCertificates:
- $(ref.ams-ssl-cert-{{ scenario }}.selfLink)

- name: lb-ipaddress-{{ scenario }}
type: compute.v1.globalAddress

- name: ams-{{ scenario }}
type: compute.v1.urlMap
properties:
defaultService: $(ref.ams-backend-{{ scenario }}.selfLink)

- name: ams-ssl-cert-{{ scenario }}
type: compute.v1.sslCertificate
properties:
certificate: |
-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----
privateKey: |
-----BEGIN PRIVATE KEY-----

-----END PRIVATE KEY-----


- name: ams-backend-{{ scenario }}
type: compute.v1.backendService
properties:
port: 5080
portName: http
protocol: HTTP
backends:
- name: backend
balancingMode: UTILIZATION
capacityScaler: 1.0
group: projects/{{ env["project"] }}/zones/{{ properties["zone"] }}/instanceGroups/{{ scenario }}-instance-group

maxUtilization: 0.8
connectionDraining:
drainingTimeoutSec: 300
healthChecks:
- $(ref.ams-health-check-{{ scenario }}.selfLink)
metadata:
dependsOn:
- {{ scenario }}-instance-group
- ams-health-check-{{ scenario }}

- name: ams-health-check-{{ scenario }}
type: compute.v1.healthCheck
properties:
type: HTTP
httpHealthCheck:
port: 5080
requestPath: /

{% endfor %}
47 changes: 47 additions & 0 deletions gcp-jinja-template/antmedia-mongodb-template.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{#
Copyright 2016 Google Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
#}

resources:
- type: compute.v1.instance
name: {{ env["deployment"] }}-mongodb
properties:
zone: {{ properties["zone"] }}
machineType: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/zones/{{ properties["zone"] }}/machineTypes/{{ properties["machine_type"] }}
metadata:
items:
# For more ways to use startup scripts on an instance, see:
# https://cloud.google.com/compute/docs/startupscript
- key: startup-script
value: |
#!/bin/bash
wget https://raw.githubusercontent.com/ant-media/Scripts/master/install_mongodb.sh
bash ./install_mongodb.sh
disks:
- deviceName: boot
type: PERSISTENT
boot: true
autoDelete: true
initializeParams:
sourceImage: https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/family/ubuntu-2204-lts
networkInterfaces:
- network: $(ref.antmedia-vpc-network.selfLink)
subnetwork: $(ref.origin-subnet.selfLink)
# Access Config required to give the instance a public IP address
accessConfigs:
- name: External NAT
type: ONE_TO_ONE_NAT
tags:
items:
- antmedia-mongodb
33 changes: 33 additions & 0 deletions gcp-jinja-template/antmedia-vpc-template.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
resources:
- name: antmedia-vpc-network
type: compute.v1.network
properties:
region: {{ properties["region"] }}
autoCreateSubnetworks: false

- name: origin-subnet
type: compute.v1.subnetwork
properties:
ipCidrRange: 10.0.1.0/24
network: $(ref.antmedia-vpc-network.selfLink)
region: {{ properties["region"] }}

- name: edge-subnet
type: compute.v1.subnetwork
properties:
ipCidrRange: 10.0.2.0/24
network: $(ref.antmedia-vpc-network.selfLink)
region: {{ properties["region"] }}

- name: firewall-rule
type: compute.v1.firewall
properties:
network: $(ref.antmedia-vpc-network.selfLink)
sourceRanges:
- 0.0.0.0/0
allowed:
- IPProtocol: tcp
ports:
- "80"
- "443"
- "22"
58 changes: 58 additions & 0 deletions gcp-jinja-template/antmedia.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
{#
Copyright 2016 Google Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
#}

{% set default_zone = "us-central1-a" %}
{% set default_region = "us-central1" %}
{% set mongodb_machine_type = "e2-standard-2" %}
{% set origin_machine_type = "c2d-standard-4" %}
{% set edge_machine_type = "c2d-standard-4" %}
{% set image_id = "ams-latest" %}



resources:
- name: antmedia-mongodb
type: antmedia-mongodb-template.jinja
properties:
zone: {{ default_zone }}
machine_type: {{ mongodb_machine_type }}
- name: antmedia-instance
type: antmedia-instance-template.jinja
properties:
zone: {{ default_zone }}
origin_machine_type: {{ origin_machine_type }}
edge_machine_type: {{ edge_machine_type }}
image_id: {{ image_id }}

- name: antmedia-instance-group
type: antmedia-instance-group-template.jinja
properties:
zone: {{ default_zone }}
- name: antmedia-loadbalancer
type: antmedia-loadbalancer-template.jinja
properties:
zone: {{ default_zone }}
region: {{ default_region}}
- name: antmedia-firewall
type: antmedia-firewall-template.jinja
properties:
zone: {{ default_zone}}
- name: antmedia-vpc-network
type: antmedia-vpc-template.jinja
properties:
region: {{ default_region}}
autoCreateSubnetworks: false


Loading

0 comments on commit 04c36fd

Please sign in to comment.