mirror of https://github.com/OpenVidu/openvidu.git
Deployments: move Enterprise AMI to openvidu repo
parent
09d89b2cdb
commit
6e826fcbc3
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,292 @@
|
|||
---
|
||||
AWSTemplateFormatVersion: 2010-09-09
|
||||
Description: Openvidu Server Pro CloudFormation AMI template.
|
||||
|
||||
Mappings:
|
||||
AMIMAP:
|
||||
eu-west-1:
|
||||
AMI: AMIEUWEST1
|
||||
us-east-1:
|
||||
AMI: AMIUSEAST1
|
||||
|
||||
Resources:
|
||||
OpenviduServerPro:
|
||||
Type: 'AWS::EC2::Instance'
|
||||
Metadata:
|
||||
Comment: "Install OpenVidu Server Pro AWS ASG"
|
||||
AWS::CloudFormation::Init:
|
||||
config:
|
||||
files:
|
||||
"/etc/cfn/cfn-hup.conf":
|
||||
content: !Sub |
|
||||
[main]
|
||||
stack=${AWS::StackId}
|
||||
region=${AWS::Region}
|
||||
mode: "000400"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
"/etc/cfn/hooks.d/cfn-auto-reloader.conf":
|
||||
content: !Sub |
|
||||
[cfn-auto-reloader-hook]
|
||||
triggers=post.update
|
||||
path=Resources.OpenviduServerPro.Metadata.AWS::CloudFormation::Init
|
||||
action=/usr/local/bin/cfn-init -v --stack ${AWS::StackName} --resource OpenviduServerPro --region ${AWS::Region}
|
||||
mode: "000400"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
"/usr/local/bin/installDockerAndDockerCompose.sh":
|
||||
content: |
|
||||
#!/bin/bash
|
||||
set -eu -o pipefail
|
||||
|
||||
# Install Docker
|
||||
apt-get update && apt-get install -y \
|
||||
apt-transport-https \
|
||||
ca-certificates \
|
||||
curl \
|
||||
gnupg-agent \
|
||||
software-properties-common
|
||||
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
|
||||
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
|
||||
apt-get update && apt-get install -y \
|
||||
docker-ce \
|
||||
docker-ce-cli \
|
||||
containerd.io
|
||||
|
||||
# Install docker-compose v2
|
||||
LATEST_DOCKER_COMPOSE_VERSION=$(curl -sSL https://api.github.com/repos/docker/compose/tags | grep name | head -n1 | cut -d'"' -f4)
|
||||
|
||||
OS="$(uname -s | awk '{print tolower($0)}')"
|
||||
ARCH="$(uname -m)"
|
||||
|
||||
mkdir -p /usr/local/lib/docker/cli-plugins
|
||||
rm -f /usr/local/lib/docker/cli-plugins/docker-compose
|
||||
curl -SL "https://github.com/docker/compose/releases/download/${LATEST_DOCKER_COMPOSE_VERSION}/docker-compose-${OS}-${ARCH}" \
|
||||
-o /usr/local/lib/docker/cli-plugins/docker-compose
|
||||
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
|
||||
ln -s /usr/local/lib/docker/cli-plugins/docker-compose /usr/local/bin
|
||||
|
||||
mode: "000755"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
"/usr/local/bin/installOpenviduServerPRO.sh":
|
||||
content: |
|
||||
#!/bin/bash
|
||||
set -eu -o pipefail
|
||||
|
||||
# Install openvidu-pro
|
||||
cd /opt
|
||||
curl https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_openvidu_enterprise_master_node_OPENVIDU_VERSION.sh | bash
|
||||
|
||||
if [[ USE_MASTER_DOCKER_IMAGES == "true" ]]; then
|
||||
pushd openvidu
|
||||
|
||||
# docker-compose.yml replace with master version
|
||||
IMAGES="$(cat docker-compose.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
||||
for IMG in $IMAGES
|
||||
do
|
||||
sed -i "s|image: $IMG:.*|image: $IMG:master|g" docker-compose.yml
|
||||
done
|
||||
|
||||
# docker-compose.override.yml replace with master version
|
||||
if [[ -f docker-compose.override.yml ]]; then
|
||||
IMAGES="$(cat docker-compose.override.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
||||
for IMG in $IMAGES
|
||||
do
|
||||
sed -i "s|image: $IMG:.*|image: $IMG:master|g" docker-compose.override.yml
|
||||
done
|
||||
fi
|
||||
|
||||
popd
|
||||
fi
|
||||
mode: "000755"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
"/usr/local/bin/getDockerImages.sh":
|
||||
content: !Sub |
|
||||
#!/bin/bash
|
||||
set -eu -o pipefail
|
||||
|
||||
# AWS cli
|
||||
docker pull amazon/aws-cli:AWS_CLI_DOCKER_TAG
|
||||
|
||||
# Openvidu recording
|
||||
docker pull openvidu/openvidu-recording:OPENVIDU_RECORDING_DOCKER_TAG
|
||||
|
||||
# Openvidu PRO images
|
||||
cd /opt/openvidu
|
||||
docker-compose pull
|
||||
mode: "000755"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
'/usr/local/bin/openvidu-init.sh':
|
||||
content: |
|
||||
#!/bin/bash -x
|
||||
|
||||
WORKINGDIR=/opt/openvidu
|
||||
ASG_DATA=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/user-data)
|
||||
AWS_AVAIL_ZONE=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
|
||||
AWS_REGION="`echo \"$AWS_AVAIL_ZONE\" | sed 's/[a-z]$//'`"
|
||||
AWS_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
|
||||
|
||||
# S3 bucket
|
||||
OPENVIDU_PRO_CONFIG_S3_BUCKET=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_CONFIG_S3_BUCKET=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
|
||||
if [[ ! -f "/var/lib/openvidu/.openvidu-first-run" ]]; then
|
||||
echo "First run of OpenVidu in this machine"
|
||||
mkdir -p /var/lib/openvidu
|
||||
touch "/var/lib/openvidu/.openvidu-first-run"
|
||||
|
||||
# Domain
|
||||
DOMAIN_OR_PUBLIC_IP=$(echo ${ASG_DATA} | grep -Po "(DOMAIN_OR_PUBLIC_IP=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
sed -i "s|DOMAIN_OR_PUBLIC_IP=|DOMAIN_OR_PUBLIC_IP=${DOMAIN_OR_PUBLIC_IP}|" $WORKINGDIR/.env
|
||||
|
||||
# Pro License
|
||||
OPENVIDU_PRO_LICENSE=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_LICENSE=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
sed -i "s|OPENVIDU_PRO_LICENSE=|OPENVIDU_PRO_LICENSE=${OPENVIDU_PRO_LICENSE}|" $WORKINGDIR/.env
|
||||
|
||||
# Secret
|
||||
OPENVIDU_SECRET=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_SECRET=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
sed -i "s|OPENVIDU_SECRET=|OPENVIDU_SECRET=${OPENVIDU_SECRET}|" $WORKINGDIR/.env
|
||||
|
||||
# Media Server
|
||||
OPENVIDU_ENTERPRISE_MEDIA_SERVER=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_ENTERPRISE_MEDIA_SERVER=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
sed -i "s|OPENVIDU_ENTERPRISE_MEDIA_SERVER=|OPENVIDU_ENTERPRISE_MEDIA_SERVER=${OPENVIDU_ENTERPRISE_MEDIA_SERVER}|" $WORKINGDIR/.env
|
||||
|
||||
# ElasticSearch and Kibana
|
||||
OPENVIDU_PRO_ELASTICSEARCH=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_ELASTICSEARCH=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
OPENVIDU_PRO_ELASTICSEARCH_HOST=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_ELASTICSEARCH_HOST=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
OPENVIDU_PRO_KIBANA_HOST=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_KIBANA_HOST=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
ELASTICSEARCH_USERNAME=$(echo ${ASG_DATA} | grep -Po "(ELASTICSEARCH_USERNAME=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
ELASTICSEARCH_PASSWORD=$(echo ${ASG_DATA} | grep -Po "(ELASTICSEARCH_PASSWORD=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
|
||||
OPENVIDU_PRO_CLUSTER_ID=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_CLUSTER_ID=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
|
||||
if [[ "${OPENVIDU_PRO_ELASTICSEARCH}" == "true" ]]; then
|
||||
sed -i "s|#OPENVIDU_PRO_ELASTICSEARCH_HOST=|OPENVIDU_PRO_ELASTICSEARCH_HOST=${OPENVIDU_PRO_ELASTICSEARCH_HOST}|" $WORKINGDIR/.env
|
||||
sed -i "s|#OPENVIDU_PRO_KIBANA_HOST=|OPENVIDU_PRO_KIBANA_HOST=${OPENVIDU_PRO_KIBANA_HOST}|" $WORKINGDIR/.env
|
||||
sed -i "s|ELASTICSEARCH_USERNAME=elasticadmin|ELASTICSEARCH_USERNAME=${ELASTICSEARCH_USERNAME}|" $WORKINGDIR/.env
|
||||
sed -i "s|ELASTICSEARCH_PASSWORD=|ELASTICSEARCH_PASSWORD=${ELASTICSEARCH_PASSWORD}|" $WORKINGDIR/.env
|
||||
else
|
||||
sed -i "s|OPENVIDU_PRO_ELASTICSEARCH=true|OPENVIDU_PRO_ELASTICSEARCH=false|" $WORKINGDIR/.env
|
||||
fi
|
||||
|
||||
sed -i "s|# OPENVIDU_PRO_CLUSTER_ID=|OPENVIDU_PRO_CLUSTER_ID=${OPENVIDU_PRO_CLUSTER_ID}|" $WORKINGDIR/.env
|
||||
|
||||
sed -i "s|OPENVIDU_PRO_CLUSTER_ENVIRONMENT=on_premise|OPENVIDU_PRO_CLUSTER_ENVIRONMENT=aws|" $WORKINGDIR/.env
|
||||
|
||||
# S3 Bucket
|
||||
OPENVIDU_RECORDING=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_RECORDING=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
|
||||
# Recording
|
||||
if [[ "${OPENVIDU_RECORDING}" == "true" ]]; then
|
||||
sed -i "s|OPENVIDU_RECORDING=false|OPENVIDU_RECORDING=true|" $WORKINGDIR/.env
|
||||
fi
|
||||
sed -i "s|#OPENVIDU_PRO_RECORDING_STORAGE=|OPENVIDU_PRO_RECORDING_STORAGE=s3|" $WORKINGDIR/.env
|
||||
sed -i "s|#OPENVIDU_PRO_AWS_S3_BUCKET=|OPENVIDU_PRO_AWS_S3_BUCKET=${OPENVIDU_PRO_CONFIG_S3_BUCKET}/recordings|" $WORKINGDIR/.env
|
||||
|
||||
# Deploy Coturn in media nodes
|
||||
OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
if [ "${OPENVIDU_PRO_COTURN_IN_MEDIA_NODES}" == "true" ]; then
|
||||
sed -i "s|OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=false|OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=true|" $WORKINGDIR/.env
|
||||
fi
|
||||
|
||||
# AWS Instance ID and region
|
||||
sed -i "s|#AWS_INSTANCE_ID=|AWS_INSTANCE_ID=${AWS_INSTANCE_ID}|" $WORKINGDIR/.env
|
||||
|
||||
# AWS ASG
|
||||
RM_REDIS_IP=$(echo ${ASG_DATA} | grep -Po "(RM_REDIS_IP=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
RM_REDIS_PORT=$(echo ${ASG_DATA} | grep -Po "(RM_REDIS_PORT=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
RM_SQS_QUEUE=$(echo ${ASG_DATA} | grep -Po "(RM_SQS_QUEUE=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
RM_CLOUDFORMATION_ARN=$(echo ${ASG_DATA} | grep -Po "(RM_CLOUDFORMATION_ARN=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
# Autoscaling group names
|
||||
RM_MEDIA_NODES_AUTOSCALING_GROUP_NAME=$(echo ${ASG_DATA} | grep -Po "(RM_MEDIA_NODES_AUTOSCALING_GROUP_NAME=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
RM_MASTER_NODES_AUTOSCALING_GROUP_NAME=$(echo ${ASG_DATA} | grep -Po "(RM_MASTER_NODES_AUTOSCALING_GROUP_NAME=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
|
||||
sed -i "s|RM_REDIS_IP=|RM_REDIS_IP=${RM_REDIS_IP}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_REDIS_PORT=|RM_REDIS_PORT=${RM_REDIS_PORT}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_SQS_QUEUE=|RM_SQS_QUEUE=${RM_SQS_QUEUE}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_CLOUDFORMATION_ARN=|RM_CLOUDFORMATION_ARN=${RM_CLOUDFORMATION_ARN}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_S3_CONFIGURATION_BUCKET=|RM_S3_CONFIGURATION_BUCKET=${OPENVIDU_PRO_CONFIG_S3_BUCKET}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_S3_CONFIGURATION_BUCKET_REGION=|RM_S3_CONFIGURATION_BUCKET_REGION=${AWS_REGION}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_MEDIA_NODES_AUTOSCALING_GROUP_NAME=|RM_MEDIA_NODES_AUTOSCALING_GROUP_NAME=${RM_MEDIA_NODES_AUTOSCALING_GROUP_NAME}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_MASTER_NODES_AUTOSCALING_GROUP_NAME=|RM_MASTER_NODES_AUTOSCALING_GROUP_NAME=${RM_MASTER_NODES_AUTOSCALING_GROUP_NAME}|" $WORKINGDIR/.env
|
||||
|
||||
# Autorestart on .env changes in S3
|
||||
OPENVIDU_ENTERPRISE_S3_CONFIG_AUTORESTART=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_ENTERPRISE_S3_CONFIG_AUTORESTART=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
if [[ "${OPENVIDU_ENTERPRISE_S3_CONFIG_AUTORESTART}" == "true" ]]; then
|
||||
echo "OPENVIDU_ENTERPRISE_S3_CONFIG_AUTORESTART=true" >> $WORKINGDIR/.env
|
||||
else
|
||||
echo "OPENVIDU_ENTERPRISE_S3_CONFIG_AUTORESTART=false" >> $WORKINGDIR/.env
|
||||
fi
|
||||
|
||||
# End with newline
|
||||
echo "" >> $WORKINGDIR/.env
|
||||
fi
|
||||
|
||||
# Stop openvidu
|
||||
pushd "${WORKINGDIR}"
|
||||
./openvidu stop
|
||||
./openvidu start
|
||||
popd
|
||||
|
||||
mode: "000755"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
Properties:
|
||||
ImageId: !FindInMap [AMIMAP, !Ref 'AWS::Region', AMI]
|
||||
InstanceType: "t2.2xlarge"
|
||||
KeyName: AWS_KEY_NAME
|
||||
Tags:
|
||||
- Key: Name
|
||||
Value: !Ref AWS::StackName
|
||||
BlockDeviceMappings:
|
||||
- DeviceName: /dev/sda1
|
||||
Ebs:
|
||||
VolumeType: gp2
|
||||
DeleteOnTermination: true
|
||||
VolumeSize: 10
|
||||
UserData:
|
||||
"Fn::Base64":
|
||||
!Sub |
|
||||
#!/bin/bash -x
|
||||
set -eu -o pipefail
|
||||
apt-get update && apt-get install -y \
|
||||
python3-pip \
|
||||
ec2-instance-connect
|
||||
pip3 install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz
|
||||
|
||||
cfn-init --region ${AWS::Region} --stack ${AWS::StackId} --resource OpenviduServerPro
|
||||
|
||||
/usr/local/bin/installDockerAndDockerCompose.sh || { echo "[Openvidu] error installing docker and compose"; exit 1; }
|
||||
|
||||
/usr/local/bin/installOpenviduServerPRO.sh || { echo "[Openvidu] error installing Openvidu Server PRO"; exit 1; }
|
||||
|
||||
/usr/local/bin/getDockerImages.sh || { echo "[Openvidu] error getting docker images"; exit 1; }
|
||||
|
||||
# Launch on reboot
|
||||
echo "@reboot /usr/local/bin/openvidu-init.sh >> /var/log/openvidu-init.log 2>&1" | crontab
|
||||
|
||||
# sending the finish call
|
||||
/usr/local/bin/cfn-signal -e $? --stack ${AWS::StackId} --resource WaitCondition --region ${AWS::Region}
|
||||
|
||||
# Cleaning the house
|
||||
shred -u /var/log/cloud-init-output.log
|
||||
shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
|
||||
shred -u /usr/local/bin/installDockerAndDockerCompose.sh
|
||||
shred -u /usr/local/bin/installOpenviduServerPRO.sh
|
||||
shred -u /usr/local/bin/getDockerImages.sh
|
||||
shred -u /usr/local/bin/installDependencies.sh
|
||||
find /var/lib/cloud/instances/$(curl http://169.254.169.254/latest/meta-data/instance-id) -type f | xargs shred -u
|
||||
rm -rf /var/lib/cloud/instances/$(curl http://169.254.169.254/latest/meta-data/instance-id)
|
||||
|
||||
WaitCondition:
|
||||
Type: AWS::CloudFormation::WaitCondition
|
||||
CreationPolicy:
|
||||
ResourceSignal:
|
||||
Timeout: PT20M
|
||||
Count: 1
|
|
@ -0,0 +1,137 @@
|
|||
#!/bin/bash -x
|
||||
set -eu -o pipefail
|
||||
|
||||
AWS_KEY_NAME=${AWS_KEY_NAME:-}
|
||||
CF_RELEASE=${CF_RELEASE:-false}
|
||||
KMS_AMI_ID=${KMS_AMI_ID:-}
|
||||
|
||||
if [[ $CF_RELEASE == "true" ]]; then
|
||||
git checkout v$OPENVIDU_PRO_VERSION
|
||||
fi
|
||||
|
||||
export AWS_DEFAULT_REGION=eu-west-1
|
||||
|
||||
DATESTAMP=$(date +%s)
|
||||
TEMPJSON=$(mktemp -t cloudformation-XXX --suffix .json)
|
||||
|
||||
# Get Latest Ubuntu AMI id from specified region
|
||||
getUbuntuAmiId() {
|
||||
local AMI_ID=$(
|
||||
aws --region ${1} ec2 describe-images \
|
||||
--filters "Name=name,Values=*ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*" \
|
||||
--query "sort_by(Images, &CreationDate)" |
|
||||
jq -r 'del(.[] | select(.ImageOwnerAlias != null)) | .[-1].ImageId'
|
||||
)
|
||||
echo $AMI_ID
|
||||
}
|
||||
|
||||
AMIEUWEST1=$(getUbuntuAmiId 'eu-west-1')
|
||||
AMIUSEAST1=$(getUbuntuAmiId 'us-east-1')
|
||||
|
||||
# Copy templates to feed
|
||||
cp cfn-crete-ov-aws-asg-ami.yaml.template cfn-crete-ov-aws-asg-ami.yaml
|
||||
|
||||
## Setting Openvidu Version and Ubuntu Latest AMIs
|
||||
if [[ ! -z ${AWS_KEY_NAME} ]]; then
|
||||
sed -i "s/ KeyName: AWS_KEY_NAME/ KeyName: ${AWS_KEY_NAME}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
else
|
||||
sed -i '/ KeyName: AWS_KEY_NAME/d' cfn-crete-ov-aws-asg-ami.yaml
|
||||
fi
|
||||
sed -i "s/AWS_KEY_NAME/${AWS_KEY_NAME}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
sed -i "s/USE_MASTER_DOCKER_IMAGES/${USE_MASTER_DOCKER_IMAGES}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
sed -i "s/AWS_CLI_DOCKER_TAG/${AWS_CLI_DOCKER_TAG}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
sed -i "s/OPENVIDU_RECORDING_DOCKER_TAG/${OPENVIDU_RECORDING_DOCKER_TAG}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
sed -i "s/OPENVIDU_VERSION/${OPENVIDU_PRO_VERSION}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
sed -i "s/AMIEUWEST1/${AMIEUWEST1}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
sed -i "s/AMIUSEAST1/${AMIUSEAST1}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
|
||||
## OpenVidu AMI
|
||||
|
||||
# Copy template to S3
|
||||
aws s3 cp cfn-crete-ov-aws-asg-ami.yaml s3://aws.openvidu.io
|
||||
TEMPLATE_URL=https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/cfn-crete-ov-aws-asg-ami.yaml
|
||||
|
||||
# Update installation script
|
||||
if [[ ${UPDATE_S3_FILES} == "true" ]]; then
|
||||
# Avoid overriding existing versions
|
||||
# Only master and non existing versions can be overriden
|
||||
if [[ ${OPENVIDU_PRO_VERSION} != "master" ]]; then
|
||||
INSTALL_SCRIPT_EXISTS=true
|
||||
aws s3api head-object --bucket aws.openvidu.io --key install_openvidu_enterprise_master_node_$OPENVIDU_PRO_VERSION.sh || INSTALL_SCRIPT_EXISTS=false
|
||||
if [[ ${INSTALL_SCRIPT_EXISTS} == "true" ]]; then
|
||||
echo "Aborting updating s3://aws.openvidu.io/install_openvidu_enterprise_master_node_${OPENVIDU_PRO_VERSION}.sh. File actually exists."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
aws s3 cp ../docker-compose/install_openvidu_enterprise_master_node.sh s3://aws.openvidu.io/install_openvidu_enterprise_master_node_$OPENVIDU_PRO_VERSION.sh --acl public-read
|
||||
fi
|
||||
|
||||
aws cloudformation create-stack \
|
||||
--stack-name openvidu-${DATESTAMP} \
|
||||
--template-url ${TEMPLATE_URL} \
|
||||
"$(if [ "$NIGHTLY" == "false" ]; then echo '--disable-rollback'; fi)"
|
||||
|
||||
aws cloudformation wait stack-create-complete --stack-name openvidu-${DATESTAMP}
|
||||
|
||||
echo "Getting instance ID"
|
||||
INSTANCE_ID=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=openvidu-${DATESTAMP}" | jq -r ' .Reservations[] | .Instances[] | .InstanceId')
|
||||
|
||||
echo "Stopping the instance"
|
||||
aws ec2 stop-instances --instance-ids ${INSTANCE_ID}
|
||||
|
||||
echo "wait for the instance to stop"
|
||||
aws ec2 wait instance-stopped --instance-ids ${INSTANCE_ID}
|
||||
|
||||
echo "Creating AMI"
|
||||
OV_RAW_AMI_ID=$(aws ec2 create-image --instance-id ${INSTANCE_ID} --name OpenViduServerProASG-${OPENVIDU_PRO_VERSION}-${DATESTAMP} --description "Openvidu Server Pro AWS ASG" --output text)
|
||||
|
||||
echo "Cleaning up"
|
||||
aws cloudformation delete-stack --stack-name openvidu-${DATESTAMP}
|
||||
|
||||
echo "Create AMI with ID: ${OV_RAW_AMI_ID}"
|
||||
|
||||
# Wait for the instance
|
||||
# Unfortunately, aws cli does not have a way to increase timeout
|
||||
WAIT_RETRIES=0
|
||||
WAIT_MAX_RETRIES=3
|
||||
until [ "${WAIT_RETRIES}" -ge "${WAIT_MAX_RETRIES}" ]; do
|
||||
aws ec2 wait image-available --image-ids ${OV_RAW_AMI_ID} && break
|
||||
WAIT_RETRIES=$((WAIT_RETRIES + 1))
|
||||
sleep 5
|
||||
done
|
||||
|
||||
if [[ $CF_RELEASE == "true" ]]; then
|
||||
aws ec2 modify-image-attribute --image-id ${OV_RAW_AMI_ID} --launch-permission "Add=[{Group=all}]"
|
||||
aws ec2 describe-images --image-ids ${OV_RAW_AMI_ID} | jq -r '.Images[0].BlockDeviceMappings[0].Ebs.SnapshotId'
|
||||
SNAPSHOT_ID=$(aws ec2 describe-images --image-ids ${OV_RAW_AMI_ID} | jq -r '.Images[0].BlockDeviceMappings[0].Ebs.SnapshotId')
|
||||
aws ec2 modify-snapshot-attribute --snapshot-id ${SNAPSHOT_ID} --create-volume-permission "Add=[{Group=all}]"
|
||||
fi
|
||||
|
||||
if [[ "${USE_MASTER_DOCKER_IMAGES}" == "true" ]]; then
|
||||
KMS_AMI_ID="$(aws ec2 describe-images --filters Name=image-type,Values=machine Name=is-public,Values=false \
|
||||
--query 'Images[?starts_with(Name, `KMS-ov-master`) == `true`][CreationDate, Name, ImageId, Public]' \
|
||||
--output text | sort -r -k1 | head -n1 | awk '{ print $3 }')"
|
||||
fi
|
||||
# Updating the template
|
||||
sed "s/OV_MASTER_REPLICATION_AMI_ID/${OV_RAW_AMI_ID}/" CF-OpenVidu-Enterprise.yaml.template >CF-OpenVidu-Enterprise-${OPENVIDU_PRO_VERSION}.yaml
|
||||
sed -i "s/KMS_AMI_ID/${KMS_AMI_ID}/g" CF-OpenVidu-Enterprise-${OPENVIDU_PRO_VERSION}.yaml
|
||||
sed -i "s/AWS_CLI_DOCKER_TAG/${AWS_CLI_DOCKER_TAG}/g" CF-OpenVidu-Enterprise-${OPENVIDU_PRO_VERSION}.yaml
|
||||
|
||||
# Update CF template
|
||||
if [[ ${UPDATE_S3_FILES} == "true" ]]; then
|
||||
# Avoid overriding existing versions
|
||||
# Only master and non existing versions can be overriden
|
||||
if [[ ${OPENVIDU_PRO_VERSION} != "master" ]]; then
|
||||
CF_EXIST=true
|
||||
aws s3api head-object --bucket aws.openvidu.io --key CF-OpenVidu-Enterprise-${OPENVIDU_PRO_VERSION}.yaml || CF_EXIST=false
|
||||
if [[ ${CF_EXIST} == "true" ]]; then
|
||||
echo "Aborting updating s3://aws.openvidu.io/CF-OpenVidu-Enterprise-${OPENVIDU_PRO_VERSION}.yaml. File actually exists."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
aws s3 cp CF-OpenVidu-Enterprise-${OPENVIDU_PRO_VERSION}.yaml s3://aws.openvidu.io/CF-OpenVidu-Enterprise-${OPENVIDU_PRO_VERSION}.yaml --acl public-read
|
||||
fi
|
||||
|
||||
rm $TEMPJSON
|
||||
rm cfn-crete-ov-aws-asg-ami.yaml
|
||||
aws s3api delete-object --bucket aws.openvidu.io --key cfn-crete-ov-aws-asg-ami.yaml
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,20 @@
|
|||
# Deploy Multi-Master cloudformation
|
||||
|
||||
1. Replace all of the variables of file cf_parameters.conf with the proper values. For example:
|
||||
|
||||
```conf
|
||||
export DOMAIN_NAME="ov-multimaster-2.k8s.codeurjc.es"
|
||||
export OPENVIDU_LICENSE="valid-license"
|
||||
export KIBANA_HOST="https://search-ov-elasticsearch-3gxumtiwg67qp6jplw7rkjshrm.eu-west-1.es.amazonaws.com:443/_plugin/kibana/"
|
||||
export ELASTICSEARCH_HOST="https://search-ov-elasticsearch-3gxumtiwg67qp6jplw7rkjshrm.eu-west-1.es.amazonaws.com:443"
|
||||
export SSH_KEY_NAME="kms-aws-share-key"
|
||||
export VPC="vpc-6bf6a10f"
|
||||
export SUBNETS="subnet-599ebd3d,subnet-f1ed81a9"
|
||||
export LOAD_BALANCER_CERTIFICATE="arn:aws:acm:eu-west-1:849201093595:certificate/01d51580-d8fc-45b0-9c72-e7666ba890d9"
|
||||
export MASTER_NODE_INSTANCE_TYPE="t2.large"
|
||||
export MEDIA_NODE_INSTANCE_TYPE="t2.large"
|
||||
```
|
||||
|
||||
2. Run script `./deploy_cf.sh`
|
||||
|
||||
3. Update Route 53 to link the domain name to the Load Balancer. At [https://console.aws.amazon.com/route53/v2/hostedzones#ListRecordSets/](https://console.aws.amazon.com/route53/v2/hostedzones#ListRecordSets/) edit record of subdomain `ov-multimaster-2.k8s.codeurjc.es`, routing traffic to the Load Balancer (dualstack.ov-pro-multimaster-VAR1-lb-VAR2.eu-west-1.elb.amazonaws.com).
|
|
@ -0,0 +1,296 @@
|
|||
---
|
||||
AWSTemplateFormatVersion: 2010-09-09
|
||||
Description: Openvidu Server Pro CloudFormation AMI template.
|
||||
|
||||
Mappings:
|
||||
AMIMAP:
|
||||
eu-west-1:
|
||||
AMI: AMIEUWEST1
|
||||
us-east-1:
|
||||
AMI: AMIUSEAST1
|
||||
|
||||
Resources:
|
||||
OpenviduServerPro:
|
||||
Type: 'AWS::EC2::Instance'
|
||||
Metadata:
|
||||
Comment: "Install OpenVidu Server Pro AWS ASG"
|
||||
AWS::CloudFormation::Init:
|
||||
config:
|
||||
files:
|
||||
"/etc/cfn/cfn-hup.conf":
|
||||
content: !Sub |
|
||||
[main]
|
||||
stack=${AWS::StackId}
|
||||
region=${AWS::Region}
|
||||
mode: "000400"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
"/etc/cfn/hooks.d/cfn-auto-reloader.conf":
|
||||
content: !Sub |
|
||||
[cfn-auto-reloader-hook]
|
||||
triggers=post.update
|
||||
path=Resources.OpenviduServerPro.Metadata.AWS::CloudFormation::Init
|
||||
action=/usr/local/bin/cfn-init -v --stack ${AWS::StackName} --resource OpenviduServerPro --region ${AWS::Region}
|
||||
mode: "000400"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
"/usr/local/bin/installDockerAndDockerCompose.sh":
|
||||
content: |
|
||||
#!/bin/bash
|
||||
set -eu -o pipefail
|
||||
|
||||
# Install Docker
|
||||
apt-get update && apt-get install -y \
|
||||
apt-transport-https \
|
||||
ca-certificates \
|
||||
curl \
|
||||
gnupg-agent \
|
||||
software-properties-common
|
||||
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
|
||||
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
|
||||
apt-get update && apt-get install -y \
|
||||
docker-ce \
|
||||
docker-ce-cli \
|
||||
containerd.io
|
||||
|
||||
# Install docker-compose v2
|
||||
LATEST_DOCKER_COMPOSE_VERSION=$(curl -sSL https://api.github.com/repos/docker/compose/tags | grep name | head -n1 | cut -d'"' -f4)
|
||||
|
||||
OS="$(uname -s | awk '{print tolower($0)}')"
|
||||
ARCH="$(uname -m)"
|
||||
|
||||
mkdir -p /usr/local/lib/docker/cli-plugins
|
||||
rm -f /usr/local/lib/docker/cli-plugins/docker-compose
|
||||
curl -SL "https://github.com/docker/compose/releases/download/${LATEST_DOCKER_COMPOSE_VERSION}/docker-compose-${OS}-${ARCH}" \
|
||||
-o /usr/local/lib/docker/cli-plugins/docker-compose
|
||||
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
|
||||
ln -s /usr/local/lib/docker/cli-plugins/docker-compose /usr/local/bin
|
||||
|
||||
mode: "000755"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
"/usr/local/bin/installOpenviduServerPRO.sh":
|
||||
content: |
|
||||
#!/bin/bash
|
||||
set -eu -o pipefail
|
||||
|
||||
# Install openvidu-pro
|
||||
cd /opt
|
||||
if [[ "OPENVIDU_VERSION" == "master" ]]; then
|
||||
curl https://raw.githubusercontent.com/OpenVidu/openvidu/master/openvidu-server/deployments/enterprise/master-node/install_openvidu_enterprise_master_node.sh | bash
|
||||
else
|
||||
curl https://raw.githubusercontent.com/OpenVidu/openvidu/vOPENVIDU_VERSION/openvidu-server/deployments/enterprise/master-node/install_openvidu_enterprise_master_node.sh | bash
|
||||
fi
|
||||
|
||||
if [[ USE_MASTER_DOCKER_IMAGES == "true" ]]; then
|
||||
pushd openvidu
|
||||
|
||||
# docker-compose.yml replace with master version
|
||||
IMAGES="$(cat docker-compose.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
||||
for IMG in $IMAGES
|
||||
do
|
||||
sed -i "s|image: $IMG:.*|image: $IMG:master|g" docker-compose.yml
|
||||
done
|
||||
|
||||
# docker-compose.override.yml replace with master version
|
||||
if [[ -f docker-compose.override.yml ]]; then
|
||||
IMAGES="$(cat docker-compose.override.yml | grep 'image: openvidu/' | cut -d':' -f2 | sed -e 's/^[[:space:]]*//')"
|
||||
for IMG in $IMAGES
|
||||
do
|
||||
sed -i "s|image: $IMG:.*|image: $IMG:master|g" docker-compose.override.yml
|
||||
done
|
||||
fi
|
||||
|
||||
popd
|
||||
fi
|
||||
mode: "000755"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
"/usr/local/bin/getDockerImages.sh":
|
||||
content: !Sub |
|
||||
#!/bin/bash
|
||||
set -eu -o pipefail
|
||||
|
||||
# AWS cli
|
||||
docker pull amazon/aws-cli:AWS_DOCKER_TAG
|
||||
|
||||
# Openvidu recording
|
||||
docker pull openvidu/openvidu-recording:OPENVIDU_RECORDING_DOCKER_TAG
|
||||
|
||||
# Openvidu PRO images
|
||||
cd /opt/openvidu
|
||||
docker-compose pull
|
||||
mode: "000755"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
'/usr/local/bin/openvidu-init.sh':
|
||||
content: |
|
||||
#!/bin/bash -x
|
||||
|
||||
WORKINGDIR=/opt/openvidu
|
||||
ASG_DATA=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/user-data)
|
||||
AWS_AVAIL_ZONE=`curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone`
|
||||
AWS_REGION="`echo \"$AWS_AVAIL_ZONE\" | sed 's/[a-z]$//'`"
|
||||
AWS_INSTANCE_ID=$(curl http://169.254.169.254/latest/meta-data/instance-id)
|
||||
|
||||
# S3 bucket
|
||||
OPENVIDU_PRO_CONFIG_S3_BUCKET=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_CONFIG_S3_BUCKET=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
|
||||
if [[ ! -f "/var/lib/openvidu/.openvidu-first-run" ]]; then
|
||||
echo "First run of OpenVidu in this machine"
|
||||
mkdir -p /var/lib/openvidu
|
||||
touch "/var/lib/openvidu/.openvidu-first-run"
|
||||
|
||||
# Domain
|
||||
DOMAIN_OR_PUBLIC_IP=$(echo ${ASG_DATA} | grep -Po "(DOMAIN_OR_PUBLIC_IP=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
sed -i "s|DOMAIN_OR_PUBLIC_IP=|DOMAIN_OR_PUBLIC_IP=${DOMAIN_OR_PUBLIC_IP}|" $WORKINGDIR/.env
|
||||
|
||||
# Pro License
|
||||
OPENVIDU_PRO_LICENSE=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_LICENSE=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
sed -i "s|OPENVIDU_PRO_LICENSE=|OPENVIDU_PRO_LICENSE=${OPENVIDU_PRO_LICENSE}|" $WORKINGDIR/.env
|
||||
|
||||
# Secret
|
||||
OPENVIDU_SECRET=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_SECRET=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
sed -i "s|OPENVIDU_SECRET=|OPENVIDU_SECRET=${OPENVIDU_SECRET}|" $WORKINGDIR/.env
|
||||
|
||||
# Media Server
|
||||
OPENVIDU_ENTERPRISE_MEDIA_SERVER=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_ENTERPRISE_MEDIA_SERVER=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
sed -i "s|OPENVIDU_ENTERPRISE_MEDIA_SERVER=|OPENVIDU_ENTERPRISE_MEDIA_SERVER=${OPENVIDU_ENTERPRISE_MEDIA_SERVER}|" $WORKINGDIR/.env
|
||||
|
||||
# ElasticSearch and Kibana
|
||||
OPENVIDU_PRO_ELASTICSEARCH_HOST=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_ELASTICSEARCH_HOST=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
OPENVIDU_PRO_KIBANA_HOST=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_KIBANA_HOST=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
OPENVIDU_PRO_CLUSTER_ID=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_CLUSTER_ID=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
ELASTICSEARCH_USERNAME=$(echo ${ASG_DATA} | grep -Po "(ELASTICSEARCH_USERNAME=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
ELASTICSEARCH_PASSWORD=$(echo ${ASG_DATA} | grep -Po "(ELASTICSEARCH_PASSWORD=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
|
||||
sed -i "s|#OPENVIDU_PRO_ELASTICSEARCH_HOST=|OPENVIDU_PRO_ELASTICSEARCH_HOST=${OPENVIDU_PRO_ELASTICSEARCH_HOST}|" $WORKINGDIR/.env
|
||||
sed -i "s|#OPENVIDU_PRO_KIBANA_HOST=|OPENVIDU_PRO_KIBANA_HOST=${OPENVIDU_PRO_KIBANA_HOST}|" $WORKINGDIR/.env
|
||||
sed -i "s|# OPENVIDU_PRO_CLUSTER_ID=|OPENVIDU_PRO_CLUSTER_ID=${OPENVIDU_PRO_CLUSTER_ID}|" $WORKINGDIR/.env
|
||||
sed -i "s|ELASTICSEARCH_USERNAME=elasticadmin|ELASTICSEARCH_USERNAME=${ELASTICSEARCH_USERNAME}|" $WORKINGDIR/.env
|
||||
sed -i "s|ELASTICSEARCH_PASSWORD=|ELASTICSEARCH_PASSWORD=${ELASTICSEARCH_PASSWORD}|" $WORKINGDIR/.env
|
||||
|
||||
sed -i "s|OPENVIDU_PRO_CLUSTER_ENVIRONMENT=on_premise|OPENVIDU_PRO_CLUSTER_ENVIRONMENT=aws|" $WORKINGDIR/.env
|
||||
|
||||
# S3 Bucket
|
||||
OPENVIDU_RECORDING=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_RECORDING=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
|
||||
# Recording
|
||||
if [[ "${OPENVIDU_RECORDING}" == "true" ]]; then
|
||||
sed -i "s|OPENVIDU_RECORDING=false|OPENVIDU_RECORDING=true|" $WORKINGDIR/.env
|
||||
fi
|
||||
sed -i "s|#OPENVIDU_PRO_RECORDING_STORAGE=|OPENVIDU_PRO_RECORDING_STORAGE=s3|" $WORKINGDIR/.env
|
||||
sed -i "s|#OPENVIDU_PRO_AWS_S3_BUCKET=|OPENVIDU_PRO_AWS_S3_BUCKET=${OPENVIDU_PRO_CONFIG_S3_BUCKET}/recordings|" $WORKINGDIR/.env
|
||||
|
||||
# Deploy Coturn in media nodes
|
||||
OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
if [ "${OPENVIDU_PRO_COTURN_IN_MEDIA_NODES}" == "true" ]; then
|
||||
sed -i "s|OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=false|OPENVIDU_PRO_COTURN_IN_MEDIA_NODES=true|" $WORKINGDIR/.env
|
||||
fi
|
||||
|
||||
# AWS Instance ID and region
|
||||
sed -i "s|#AWS_INSTANCE_ID=|AWS_INSTANCE_ID=${AWS_INSTANCE_ID}|" $WORKINGDIR/.env
|
||||
|
||||
# AWS ASG
|
||||
RM_REDIS_IP=$(echo ${ASG_DATA} | grep -Po "(RM_REDIS_IP=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
RM_REDIS_PORT=$(echo ${ASG_DATA} | grep -Po "(RM_REDIS_PORT=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
RM_SQS_QUEUE=$(echo ${ASG_DATA} | grep -Po "(RM_SQS_QUEUE=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
RM_CLOUDFORMATION_ARN=$(echo ${ASG_DATA} | grep -Po "(RM_CLOUDFORMATION_ARN=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
# Autoscaling group names
|
||||
RM_MEDIA_NODES_AUTOSCALING_GROUP_NAME=$(echo ${ASG_DATA} | grep -Po "(RM_MEDIA_NODES_AUTOSCALING_GROUP_NAME=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
RM_MASTER_NODES_AUTOSCALING_GROUP_NAME=$(echo ${ASG_DATA} | grep -Po "(RM_MASTER_NODES_AUTOSCALING_GROUP_NAME=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
|
||||
sed -i "s|RM_REDIS_IP=|RM_REDIS_IP=${RM_REDIS_IP}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_REDIS_PORT=|RM_REDIS_PORT=${RM_REDIS_PORT}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_SQS_QUEUE=|RM_SQS_QUEUE=${RM_SQS_QUEUE}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_CLOUDFORMATION_ARN=|RM_CLOUDFORMATION_ARN=${RM_CLOUDFORMATION_ARN}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_S3_CONFIGURATION_BUCKET=|RM_S3_CONFIGURATION_BUCKET=${OPENVIDU_PRO_CONFIG_S3_BUCKET}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_S3_CONFIGURATION_BUCKET_REGION=|RM_S3_CONFIGURATION_BUCKET_REGION=${AWS_REGION}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_MEDIA_NODES_AUTOSCALING_GROUP_NAME=|RM_MEDIA_NODES_AUTOSCALING_GROUP_NAME=${RM_MEDIA_NODES_AUTOSCALING_GROUP_NAME}|" $WORKINGDIR/.env
|
||||
sed -i "s|RM_MASTER_NODES_AUTOSCALING_GROUP_NAME=|RM_MASTER_NODES_AUTOSCALING_GROUP_NAME=${RM_MASTER_NODES_AUTOSCALING_GROUP_NAME}|" $WORKINGDIR/.env
|
||||
|
||||
# Autorestart on .env changes in S3
|
||||
OPENVIDU_ENTERPRISE_S3_CONFIG_AUTORESTART=$(echo ${ASG_DATA} | grep -Po "(OPENVIDU_ENTERPRISE_S3_CONFIG_AUTORESTART=).+?(?=\s*(\||$))" | cut -d"=" -f2)
|
||||
if [[ "${OPENVIDU_ENTERPRISE_S3_CONFIG_AUTORESTART}" == "true" ]]; then
|
||||
echo "OPENVIDU_ENTERPRISE_S3_CONFIG_AUTORESTART=true" >> $WORKINGDIR/.env
|
||||
else
|
||||
echo "OPENVIDU_ENTERPRISE_S3_CONFIG_AUTORESTART=false" >> $WORKINGDIR/.env
|
||||
fi
|
||||
|
||||
# End with newline
|
||||
echo "" >> $WORKINGDIR/.env
|
||||
fi
|
||||
|
||||
# Watch docker tags changes in dockerhub
|
||||
docker run -d \
|
||||
--name watchtower \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
containrrr/watchtower \
|
||||
openvidu-replication-manager-1 openvidu-openvidu-server-1 -i 5 -d
|
||||
|
||||
# Stop openvidu
|
||||
pushd "${WORKINGDIR}"
|
||||
./openvidu stop
|
||||
./openvidu start
|
||||
popd
|
||||
|
||||
mode: "000755"
|
||||
owner: "root"
|
||||
group: "root"
|
||||
Properties:
|
||||
ImageId: !FindInMap [AMIMAP, !Ref 'AWS::Region', AMI]
|
||||
InstanceType: "t2.2xlarge"
|
||||
KeyName: AWS_KEY_NAME
|
||||
Tags:
|
||||
- Key: Name
|
||||
Value: !Ref AWS::StackName
|
||||
BlockDeviceMappings:
|
||||
- DeviceName: /dev/sda1
|
||||
Ebs:
|
||||
VolumeType: gp2
|
||||
DeleteOnTermination: true
|
||||
VolumeSize: 10
|
||||
UserData:
|
||||
"Fn::Base64":
|
||||
!Sub |
|
||||
#!/bin/bash -x
|
||||
set -eu -o pipefail
|
||||
apt-get update && apt-get install -y \
|
||||
python3-pip \
|
||||
ec2-instance-connect
|
||||
pip3 install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz
|
||||
|
||||
cfn-init --region ${AWS::Region} --stack ${AWS::StackId} --resource OpenviduServerPro
|
||||
|
||||
/usr/local/bin/installDockerAndDockerCompose.sh || { echo "[Openvidu] error installing docker and compose"; exit 1; }
|
||||
|
||||
/usr/local/bin/installOpenviduServerPRO.sh || { echo "[Openvidu] error installing Openvidu Server PRO"; exit 1; }
|
||||
|
||||
/usr/local/bin/getDockerImages.sh || { echo "[Openvidu] error getting docker images"; exit 1; }
|
||||
|
||||
# Launch on reboot
|
||||
echo "@reboot /usr/local/bin/openvidu-init.sh >> /var/log/openvidu-init.log 2>&1" | crontab
|
||||
|
||||
# sending the finish call
|
||||
/usr/local/bin/cfn-signal -e $? --stack ${AWS::StackId} --resource WaitCondition --region ${AWS::Region}
|
||||
|
||||
# Cleaning the house
|
||||
shred -u /var/log/cloud-init-output.log
|
||||
shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
|
||||
shred -u /usr/local/bin/installDockerAndDockerCompose.sh
|
||||
shred -u /usr/local/bin/installOpenviduServerPRO.sh
|
||||
shred -u /usr/local/bin/getDockerImages.sh
|
||||
shred -u /usr/local/bin/installDependencies.sh
|
||||
find /var/lib/cloud/instances/$(curl http://169.254.169.254/latest/meta-data/instance-id) -type f | xargs shred -u
|
||||
rm -rf /var/lib/cloud/instances/$(curl http://169.254.169.254/latest/meta-data/instance-id)
|
||||
|
||||
WaitCondition:
|
||||
Type: AWS::CloudFormation::WaitCondition
|
||||
CreationPolicy:
|
||||
ResourceSignal:
|
||||
Timeout: PT20M
|
||||
Count: 1
|
|
@ -0,0 +1,111 @@
|
|||
#!/bin/bash -x
|
||||
set -eu -o pipefail
|
||||
|
||||
AWS_KEY_NAME=${AWS_KEY_NAME:-}
|
||||
CF_RELEASE=${CF_RELEASE:-false}
|
||||
|
||||
if [[ $CF_RELEASE == "true" ]]; then
|
||||
git checkout v$OPENVIDU_PRO_VERSION
|
||||
fi
|
||||
|
||||
export AWS_DEFAULT_REGION=eu-west-1
|
||||
|
||||
DATESTAMP=$(date +%s)
|
||||
TEMPJSON=$(mktemp -t cloudformation-XXX --suffix .json)
|
||||
|
||||
# Get Latest Ubuntu AMI id from specified region
|
||||
getUbuntuAmiId() {
|
||||
local AMI_ID=$(
|
||||
aws --region ${1} ec2 describe-images \
|
||||
--filters "Name=name,Values=*ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*" \
|
||||
--query "sort_by(Images, &CreationDate)" |
|
||||
jq -r 'del(.[] | select(.ImageOwnerAlias != null)) | .[-1].ImageId'
|
||||
)
|
||||
echo $AMI_ID
|
||||
}
|
||||
|
||||
AMIEUWEST1=$(getUbuntuAmiId 'eu-west-1')
|
||||
AMIUSEAST1=$(getUbuntuAmiId 'us-east-1')
|
||||
|
||||
# Copy templates to feed
|
||||
cp cfn-crete-ov-aws-asg-ami.yaml.template cfn-crete-ov-aws-asg-ami.yaml
|
||||
|
||||
## Setting Openvidu Version and Ubuntu Latest AMIs
|
||||
if [[ ! -z ${AWS_KEY_NAME} ]]; then
|
||||
sed -i "s/ KeyName: AWS_KEY_NAME/ KeyName: ${AWS_KEY_NAME}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
else
|
||||
sed -i '/ KeyName: AWS_KEY_NAME/d' cfn-crete-ov-aws-asg-ami.yaml
|
||||
fi
|
||||
sed -i "s/AWS_KEY_NAME/${AWS_KEY_NAME}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
sed -i "s/USE_MASTER_DOCKER_IMAGES/${USE_MASTER_DOCKER_IMAGES}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
sed -i "s/AWS_DOCKER_TAG/${AWS_DOCKER_TAG}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
sed -i "s/OPENVIDU_RECORDING_DOCKER_TAG/${OPENVIDU_RECORDING_DOCKER_TAG}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
sed -i "s/OPENVIDU_VERSION/${OPENVIDU_PRO_VERSION}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
sed -i "s/AMIEUWEST1/${AMIEUWEST1}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
sed -i "s/AMIUSEAST1/${AMIUSEAST1}/g" cfn-crete-ov-aws-asg-ami.yaml
|
||||
|
||||
## OpenVidu AMI
|
||||
|
||||
# Copy template to S3
|
||||
aws s3 cp cfn-crete-ov-aws-asg-ami.yaml s3://aws.openvidu.io
|
||||
TEMPLATE_URL=https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/cfn-crete-ov-aws-asg-ami.yaml
|
||||
|
||||
aws cloudformation create-stack \
|
||||
--stack-name openvidu-${DATESTAMP} \
|
||||
--template-url ${TEMPLATE_URL} \
|
||||
"$(if [ "$NIGHTLY" == "false" ]; then echo '--disable-rollback'; fi)"
|
||||
|
||||
aws cloudformation wait stack-create-complete --stack-name openvidu-${DATESTAMP}
|
||||
|
||||
echo "Getting instance ID"
|
||||
INSTANCE_ID=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=openvidu-${DATESTAMP}" | jq -r ' .Reservations[] | .Instances[] | .InstanceId')
|
||||
|
||||
echo "Stopping the instance"
|
||||
aws ec2 stop-instances --instance-ids ${INSTANCE_ID}
|
||||
|
||||
echo "wait for the instance to stop"
|
||||
aws ec2 wait instance-stopped --instance-ids ${INSTANCE_ID}
|
||||
|
||||
echo "Creating AMI"
|
||||
OV_RAW_AMI_ID=$(aws ec2 create-image --instance-id ${INSTANCE_ID} --name OpenViduServerProASG-${OPENVIDU_PRO_VERSION}-dev-${DATESTAMP} --description "Openvidu Server Pro AWS ASG" --output text)
|
||||
|
||||
echo "Cleaning up"
|
||||
aws cloudformation delete-stack --stack-name openvidu-${DATESTAMP}
|
||||
|
||||
echo "Create AMI with ID: ${OV_RAW_AMI_ID}"
|
||||
|
||||
# Wait for the instance
|
||||
# Unfortunately, aws cli does not have a way to increase timeout
|
||||
WAIT_RETRIES=0
|
||||
WAIT_MAX_RETRIES=3
|
||||
until [ "${WAIT_RETRIES}" -ge "${WAIT_MAX_RETRIES}" ]; do
|
||||
aws ec2 wait image-available --image-ids ${OV_RAW_AMI_ID} && break
|
||||
WAIT_RETRIES=$((WAIT_RETRIES + 1))
|
||||
sleep 5
|
||||
done
|
||||
|
||||
if [[ $CF_RELEASE == "true" ]]; then
|
||||
aws ec2 modify-image-attribute --image-id ${OV_RAW_AMI_ID} --launch-permission "Add=[{Group=all}]"
|
||||
aws ec2 describe-images --image-ids ${OV_RAW_AMI_ID} | jq -r '.Images[0].BlockDeviceMappings[0].Ebs.SnapshotId'
|
||||
SNAPSHOT_ID=$(aws ec2 describe-images --image-ids ${OV_RAW_AMI_ID} | jq -r '.Images[0].BlockDeviceMappings[0].Ebs.SnapshotId')
|
||||
aws ec2 modify-snapshot-attribute --snapshot-id ${SNAPSHOT_ID} --create-volume-permission "Add=[{Group=all}]"
|
||||
fi
|
||||
|
||||
# Updating the template
|
||||
if [[ "${USE_MASTER_DOCKER_IMAGES}" == "true" ]]; then
|
||||
KMS_AMI_ID="$(aws ec2 describe-images --filters Name=image-type,Values=machine Name=is-public,Values=false \
|
||||
--query 'Images[?starts_with(Name, `KMS-ov-master`) == `true`][CreationDate, Name, ImageId, Public]' \
|
||||
--output text | sort -r -k1 | head -n1 | awk '{ print $3 }')"
|
||||
fi
|
||||
cd ..
|
||||
sed "s/OV_MASTER_REPLICATION_AMI_ID/${OV_RAW_AMI_ID}/" CF-OpenVidu-Enterprise.yaml.template >CF-OpenVidu-Enterprise-dev-${OPENVIDU_PRO_VERSION}.yaml
|
||||
sed -i "s/KMS_AMI_ID/${KMS_AMI_ID}/g" CF-OpenVidu-Enterprise-dev-${OPENVIDU_PRO_VERSION}.yaml
|
||||
sed -i "s/AWS_DOCKER_TAG/${AWS_DOCKER_TAG}/g" CF-OpenVidu-Enterprise-dev-${OPENVIDU_PRO_VERSION}.yaml
|
||||
# Update CF template
|
||||
aws s3 cp CF-OpenVidu-Enterprise-dev-${OPENVIDU_PRO_VERSION}.yaml s3://aws.openvidu.io/CF-OpenVidu-Enterprise-dev-${OPENVIDU_PRO_VERSION}.yaml --acl public-read
|
||||
|
||||
cd dev
|
||||
|
||||
rm $TEMPJSON
|
||||
mv cfn-crete-ov-aws-asg-ami.yaml CF-OpenVidu-Enterprise-AMI.yaml
|
||||
aws s3api delete-object --bucket aws.openvidu.io --key cfn-crete-ov-aws-asg-ami.yaml
|
|
@ -0,0 +1,169 @@
|
|||
#!/bin/bash -x
|
||||
set -eu -o pipefail
|
||||
|
||||
export AWS_DEFAULT_REGION=eu-west-1
|
||||
|
||||
fatal_error() {
|
||||
printf "\n =======¡ERROR!======="
|
||||
printf "\n %s" "$1"
|
||||
printf "\n"
|
||||
exit 1
|
||||
}
|
||||
|
||||
TIMESTAMP=$(date +%s)
|
||||
|
||||
[[ -n "${DEPLOY_ELASTICSEARCH_AWS}" ]] || DEPLOY_ELASTICSEARCH_AWS=false
|
||||
|
||||
# Check all required variables
|
||||
[[ -n "${OPENVIDU_LICENSE}" ]] || fatal_error "OPENVIDU_LICENSE must be defined"
|
||||
[[ -n "${SSH_KEY_NAME}" ]] || fatal_error "SSH_KEY_NAME must be defined"
|
||||
[[ -n "${VPC}" ]] || fatal_error "VPC must be defined"
|
||||
[[ -n "${SUBNETS}" ]] || fatal_error "SUBNETS must be defined"
|
||||
[[ -n "${LOAD_BALANCER_CERTIFICATE}" ]] || fatal_error "LOAD_BALANCER_CERTIFICATE must be defined"
|
||||
[[ -n "${AWS_ACCOUNT_ID}" ]] || fatal_error "AWS_ACCOUNT_ID must be defined"
|
||||
|
||||
# Check variables with default values
|
||||
[[ -n "${OPENVIDU_PRO_CLUSTER_ID:-}" ]] || OPENVIDU_PRO_CLUSTER_ID="ov-pro-multimaster-${TIMESTAMP}"
|
||||
[[ -n "${OPENVIDU_SECRET:-}" ]] || OPENVIDU_SECRET="MY_SECRET"
|
||||
[[ -n "${ELASTICSEARCH_USERNAME:-}" ]] || ELASTICSEARCH_USERNAME="elasticadmin"
|
||||
[[ -n "${ELASTICSEARCH_PASSWORD:-}" ]] || ELASTICSEARCH_PASSWORD="My_Secret_123"
|
||||
[[ -n "${MASTER_NODE_INSTANCE_TYPE:-}" ]] || MASTER_NODE_INSTANCE_TYPE="t2.large"
|
||||
[[ -n "${MEDIA_NODE_INSTANCE_TYPE:-}" ]] || MEDIA_NODE_INSTANCE_TYPE="t2.large"
|
||||
|
||||
|
||||
# Start elasticsearch
|
||||
TEMP_JSON_ES_CONF=$(mktemp -t es-conf-XXX --suffix .json)
|
||||
cat > "$TEMP_JSON_ES_CONF"<<EOF
|
||||
{
|
||||
"InstanceType": "t3.medium.elasticsearch",
|
||||
"InstanceCount": 1,
|
||||
"DedicatedMasterEnabled": false,
|
||||
"ZoneAwarenessEnabled": false,
|
||||
"WarmEnabled": false
|
||||
}
|
||||
EOF
|
||||
|
||||
TEMP_JSON_ES_EBS_OPT=$(mktemp -t es-ebs-XXX --suffix .json)
|
||||
cat > "$TEMP_JSON_ES_EBS_OPT"<<EOF
|
||||
{
|
||||
"EBSEnabled": true,
|
||||
"VolumeType": "gp2",
|
||||
"VolumeSize": 10
|
||||
}
|
||||
EOF
|
||||
|
||||
TEMP_ACCESS_POLICY=$(mktemp -t es-acl-XXX --suffix .json)
|
||||
cat > "$TEMP_ACCESS_POLICY"<<EOF
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Principal": {
|
||||
"AWS": "*"
|
||||
},
|
||||
"Action": "es:*",
|
||||
"Resource": "${AWS_ACCOUNT_ID}:domain/ov-elasticsearch-${TIMESTAMP}/*",
|
||||
"Condition": {
|
||||
"IpAddress": {
|
||||
"aws:SourceIp": ["0.0.0.0/0", "::/0"]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
TEMP_MASTER_USER=$(mktemp -t es-user-XXX --suffix .json)
|
||||
cat > "$TEMP_MASTER_USER"<<EOF
|
||||
{
|
||||
"Enabled": true,
|
||||
"InternalUserDatabaseEnabled": true,
|
||||
"MasterUserOptions": {
|
||||
"MasterUserName": "${ELASTICSEARCH_USERNAME}",
|
||||
"MasterUserPassword": "${ELASTICSEARCH_PASSWORD}"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
if [[ "${DEPLOY_ELASTICSEARCH_AWS}" == "true" ]] && [[ -z "${ELASTICSEARCH_HOST}" ]] && [[ -z "${KIBANA_HOST}" ]]; then
|
||||
aws es create-elasticsearch-domain --domain-name "ov-elasticsearch-${TIMESTAMP}" \
|
||||
--domain-endpoint-options EnforceHTTPS=true \
|
||||
--elasticsearch-version 7.10 \
|
||||
--elasticsearch-cluster-config file:///"${TEMP_JSON_ES_CONF}" \
|
||||
--ebs-options file:///"${TEMP_JSON_ES_EBS_OPT}" \
|
||||
--access-policies file:///"${TEMP_ACCESS_POLICY}" \
|
||||
--advanced-security-options file://"${TEMP_MASTER_USER}" \
|
||||
--node-to-node-encryption-options Enabled=true \
|
||||
--encryption-at-rest-options Enabled=true
|
||||
|
||||
# Wait for elasticsearch
|
||||
MAX_SECONDS_WAITING=2000
|
||||
CURRENT_SECONDS=0
|
||||
until [ "${CURRENT_SECONDS}" -ge "${MAX_SECONDS_WAITING}" ]
|
||||
do
|
||||
echo "Waiting for elasticsearch to be deployed..."
|
||||
ELASTICSEARCH_ENDPOINT=$(aws es describe-elasticsearch-domain --domain-name "ov-elasticsearch-${TIMESTAMP}" | jq -r .DomainStatus.Endpoint)
|
||||
if [[ "${ELASTICSEARCH_ENDPOINT}" != null ]]; then
|
||||
break
|
||||
fi
|
||||
CURRENT_SECONDS=$((CURRENT_SECONDS+5))
|
||||
sleep 5
|
||||
done
|
||||
|
||||
if [[ "${ELASTICSEARCH_ENDPOINT}" == "null" ]]; then
|
||||
fatal_error "Elasticsearch was not started correctly"
|
||||
else
|
||||
ELASTICSEARCH_HOST="https://${ELASTICSEARCH_ENDPOINT}:443"
|
||||
KIBANA_HOST="https://${ELASTICSEARCH_ENDPOINT}:443/_plugin/kibana/"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
||||
TEMPJSON=$(mktemp -t cloudformation-XXX --suffix .json)
|
||||
|
||||
cat > "$TEMPJSON"<<EOF
|
||||
[
|
||||
{"ParameterKey":"DomainName","ParameterValue":"${DOMAIN_NAME}"},
|
||||
{"ParameterKey":"KeyName","ParameterValue":"${SSH_KEY_NAME}"},
|
||||
{"ParameterKey":"OpenViduLicense","ParameterValue":"${OPENVIDU_LICENSE}"},
|
||||
{"ParameterKey":"OpenViduSecret","ParameterValue":"${OPENVIDU_SECRET}"},
|
||||
{"ParameterKey":"MediaServer","ParameterValue":"mediasoup"},
|
||||
{"ParameterKey":"OpenViduProClusterId","ParameterValue":"${OPENVIDU_PRO_CLUSTER_ID}"},
|
||||
{"ParameterKey":"ElasticsearchUrl","ParameterValue":"${ELASTICSEARCH_HOST}"},
|
||||
{"ParameterKey":"KibanaUrl","ParameterValue":"${KIBANA_HOST}"},
|
||||
{"ParameterKey":"ElasticsearchUser","ParameterValue":"${ELASTICSEARCH_USERNAME}"},
|
||||
{"ParameterKey":"ElasticsearchPassword","ParameterValue":"${ELASTICSEARCH_PASSWORD}"},
|
||||
{"ParameterKey":"LoadBalancerCertificateARN","ParameterValue":"${LOAD_BALANCER_CERTIFICATE}"},
|
||||
{"ParameterKey":"AwsInstanceTypeOV","ParameterValue":"${MASTER_NODE_INSTANCE_TYPE}"},
|
||||
{"ParameterKey":"AwsInstanceTypeKMS","ParameterValue":"${MEDIA_NODE_INSTANCE_TYPE}"},
|
||||
{"ParameterKey":"OpenViduVPC","ParameterValue":"${VPC}"},
|
||||
{"ParameterKey":"OpenViduSubnets","ParameterValue":"${SUBNETS}"}
|
||||
]
|
||||
EOF
|
||||
|
||||
cat "$TEMPJSON"
|
||||
KMS_AMI_ID="$(aws ec2 describe-images --filters Name=image-type,Values=machine Name=is-public,Values=false \
|
||||
--query 'Images[?starts_with(Name, `KMS-ov-master`) == `true`][CreationDate, Name, ImageId, Public]' \
|
||||
--output text | sort -r -k1 | head -n1 | awk '{ print $3 }')"
|
||||
OV_AMI_ID="$(aws ec2 describe-images --filters Name=image-type,Values=machine Name=is-public,Values=false \
|
||||
--query 'Images[?starts_with(Name, `OpenViduServerProASG-master-dev`) == `true`][CreationDate, Name, ImageId, Public]' \
|
||||
--output text | sort -r -k1 | head -n1 | awk '{ print $3 }')"
|
||||
|
||||
sed -i "s/KMS_AMI_ID/${KMS_AMI_ID}/g" CF-OpenVidu-Enterprise-dev-master.yaml
|
||||
sed -i "s/OV_MASTER_REPLICATION_AMI_ID/${OV_AMI_ID}/g" CF-OpenVidu-Enterprise-dev-master.yaml
|
||||
|
||||
CF_FILE="https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/CF-OpenVidu-Enterprise-dev-master.yaml"
|
||||
aws s3 cp CF-OpenVidu-Enterprise-dev-master.yaml s3://aws.openvidu.io --acl public-read
|
||||
|
||||
echo "Starting Multimaster cloudformation"
|
||||
aws cloudformation create-stack \
|
||||
--template-url "${CF_FILE}" \
|
||||
--stack-name "${OPENVIDU_PRO_CLUSTER_ID}" \
|
||||
--parameters file:///"${TEMPJSON}" \
|
||||
--disable-rollback \
|
||||
--capabilities CAPABILITY_IAM \
|
||||
--capabilities CAPABILITY_NAMED_IAM
|
||||
|
||||
aws cloudformation wait stack-create-complete --stack-name "${OPENVIDU_PRO_CLUSTER_ID}"
|
|
@ -0,0 +1,18 @@
|
|||
#!/bin/bash
|
||||
fatal_error() {
|
||||
printf "\n =======¡ERROR!======="
|
||||
printf "\n %s" "$1"
|
||||
printf "\n"
|
||||
exit 1
|
||||
}
|
||||
|
||||
QUEUE_URL=$1
|
||||
[[ -n ${QUEUE_URL} ]] || fatal_error "No queue url specified. You need to specify a SQS queue URL as first parameter"
|
||||
while true; do
|
||||
TIMESTAMP=$(date +%s)
|
||||
aws sqs send-message \
|
||||
--queue-url "${QUEUE_URL}" \
|
||||
--message-body "{\"source\":\"custom.test\",\"id\":\"$TIMESTAMP\"}" \
|
||||
--message-group-id "test"
|
||||
sleep 0.5
|
||||
done
|
|
@ -56,15 +56,15 @@ new_ov_installation() {
|
|||
# Download necessary files
|
||||
printf '\n => Downloading OpenVidu Pro files:'
|
||||
|
||||
curl --silent ${DOWNLOAD_URL}/openvidu-server/deployments/enterprise/master-node/cluster/aws/openvidu_autodiscover.sh \
|
||||
curl --silent ${DOWNLOAD_URL}/openvidu-server/deployments/enterprise/docker-compose/cluster/aws/openvidu_autodiscover.sh \
|
||||
--output "${AWS_SCRIPTS_FOLDER}/openvidu_autodiscover.sh" || fatal_error "Error when downloading the file 'openvidu_autodiscover.sh'"
|
||||
printf '\n - openvidu_autodiscover.sh'
|
||||
|
||||
curl --silent ${DOWNLOAD_URL}/openvidu-server/deployments/enterprise/master-node/cluster/aws/openvidu_drop.sh \
|
||||
curl --silent ${DOWNLOAD_URL}/openvidu-server/deployments/enterprise/docker-compose/cluster/aws/openvidu_drop.sh \
|
||||
--output "${AWS_SCRIPTS_FOLDER}/openvidu_drop.sh" || fatal_error "Error when downloading the file 'openvidu_drop.sh'"
|
||||
printf '\n - openvidu_drop.sh'
|
||||
|
||||
curl --silent ${DOWNLOAD_URL}/openvidu-server/deployments/enterprise/master-node/cluster/aws/openvidu_launch_kms.sh \
|
||||
curl --silent ${DOWNLOAD_URL}/openvidu-server/deployments/enterprise/docker-compose/cluster/aws/openvidu_launch_kms.sh \
|
||||
--output "${AWS_SCRIPTS_FOLDER}/openvidu_launch_kms.sh" || fatal_error "Error when downloading the file 'openvidu_launch_kms.sh'"
|
||||
printf '\n - openvidu_launch_kms.sh'
|
||||
|
Loading…
Reference in New Issue