@ -1,3 +1,5 @@
import time
import boto3
import boto3
from botocore.exceptions import ClientError
from botocore.exceptions import ClientError
@ -6,27 +8,7 @@ availabilityZone = 'eu-central-1b'
imageId = ' ami-0cc293023f983ed53 '
imageId = ' ami-0cc293023f983ed53 '
instanceType = ' t3.nano '
instanceType = ' t3.nano '
keyName = ' srieger-pub '
keyName = ' srieger-pub '
#userDataDB = ('#!/bin/bash\n'
# '#!/bin/bash\n'
# '# extra repo for RedHat rpms\n'
# 'yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm\n'
# '# essential tools\n'
# 'yum install -y joe htop git\n'
# '# mysql\n'
# 'yum install -y mariadb mariadb-server\n'
# '\n'
# 'service mariadb start\n'
# '\n'
# 'echo "create database cloud_tug_of_war" | mysql -u root\n'
# '\n'
# 'echo "create table clouds ( cloud_id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, value INT, max_value INT, PRIMARY KEY (cloud_id))" | mysql -u root cloud_tug_of_war\n'
# '\n'
# 'echo "CREATE USER \'cloud_tug_of_war\'@\'%\' IDENTIFIED BY \'cloud\';" | mysql -u root\n'
# 'echo "GRANT ALL PRIVILEGES ON cloud_tug_of_war.* TO \'cloud_tug_of_war\'@\'%\';" | mysql -u root\n'
# 'echo "FLUSH PRIVILEGES" | mysql -u root\n'
# )
# convert with: cat install-mysql | sed "s/^/'/; s/$/\\\n'/"
client = boto3 . setup_default_session ( region_name = region )
client = boto3 . setup_default_session ( region_name = region )
ec2Client = boto3 . client ( " ec2 " )
ec2Client = boto3 . client ( " ec2 " )
@ -46,7 +28,7 @@ subnet_id = ec2Client.describe_subnets(
print ( " Deleting old instance... " )
print ( " Deleting old instance... " )
print ( " ------------------------------------ " )
print ( " ------------------------------------ " )
response = ec2Client . describe_instances ( Filters = [ { ' Name ' : ' tag-key ' , ' Values ' : [ ' tug-of-war ' ] } ] )
response = ec2Client . describe_instances ( Filters = [ { ' Name ' : ' tag-key ' , ' Values ' : [ ' tug-of-war-rds ' ] } ] )
print ( response )
print ( response )
reservations = response [ ' Reservations ' ]
reservations = response [ ' Reservations ' ]
for reservation in reservations :
for reservation in reservations :
@ -61,46 +43,46 @@ print("Deleting old DB instance...")
print ( " ------------------------------------ " )
print ( " ------------------------------------ " )
try :
try :
response = rdsClient . delete_db_instance (
DBInstanceIdentifier = ' tug-of-war-db1 ' ,
SkipFinalSnapshot = True ,
DeleteAutomatedBackups = True
)
response = rdsClient . delete_db_instance (
DBInstanceIdentifier = ' tug-of-war-rds -db1 ' ,
SkipFinalSnapshot = True ,
DeleteAutomatedBackups = True
)
except ClientError as e :
except ClientError as e :
print ( e )
print ( e )
waiter = rdsClient . get_waiter ( ' db_instance_deleted ' )
waiter = rdsClient . get_waiter ( ' db_instance_deleted ' )
waiter . wait ( DBInstanceIdentifier = ' tug-of-war-db1 ' )
waiter . wait ( DBInstanceIdentifier = ' tug-of-war-rds-db1 ' )
#time.sleep(5)
print ( " Delete old security group... " )
print ( " Delete old security group... " )
print ( " ------------------------------------ " )
print ( " ------------------------------------ " )
try :
try :
response = ec2Client . delete_security_group ( GroupName = ' tug-of-war ' )
response = ec2Client . delete_security_group ( GroupName = ' tug-of-war-rds ' )
except ClientError as e :
except ClientError as e :
print ( e )
print ( e )
print ( " Create security group... " )
print ( " Create security group... " )
print ( " ------------------------------------ " )
print ( " ------------------------------------ " )
try :
try :
response = ec2Client . create_security_group ( GroupName = ' tug-of-war ' ,
Description = ' tug-of-war ' ,
VpcId = vpc_id )
security_group_id = response [ ' GroupId ' ]
print ( ' Security Group Created %s in vpc %s . ' % ( security_group_id , vpc_id ) )
data = ec2Client . authorize_security_group_ingress (
GroupId = security_group_id ,
IpPermissions = [
{ ' IpProtocol ' : ' tcp ' ,
' FromPort ' : 3306 ,
' ToPort ' : 3306 ,
' IpRanges ' : [ { ' CidrIp ' : ' 0.0.0.0/0 ' } ] } ,
{ ' IpProtocol ' : ' tcp ' ,
' FromPort ' : 22 ,
response = ec2Client . create_security_group ( GroupName = ' tug-of-war-rds ' ,
Description = ' tug-of-war-rds ' ,
VpcId = vpc_id )
security_group_id = response [ ' GroupId ' ]
print ( ' Security Group Created %s in vpc %s . ' % ( security_group_id , vpc_id ) )
data = ec2Client . authorize_security_group_ingress (
GroupId = security_group_id ,
IpPermissions = [
{ ' IpProtocol ' : ' tcp ' ,
' FromPort ' : 3306 ,
' ToPort ' : 3306 ,
' IpRanges ' : [ { ' CidrIp ' : ' 0.0.0.0/0 ' } ] } ,
{ ' IpProtocol ' : ' tcp ' ,
' FromPort ' : 22 ,
' ToPort ' : 22 ,
' ToPort ' : 22 ,
' IpRanges ' : [ { ' CidrIp ' : ' 0.0.0.0/0 ' } ] } ,
' IpRanges ' : [ { ' CidrIp ' : ' 0.0.0.0/0 ' } ] } ,
{ ' IpProtocol ' : ' tcp ' ,
{ ' IpProtocol ' : ' tcp ' ,
@ -119,9 +101,9 @@ except ClientError as e:
print ( " Running new DB instance... " )
print ( " Running new DB instance... " )
print ( " ------------------------------------ " )
print ( " ------------------------------------ " )
response = rdsClient . create_db_instance ( DBInstanceIdentifier = " tug-of-war-db1 " ,
response = rdsClient . create_db_instance ( DBInstanceIdentifier = " tug-of-war-rds- db1 " ,
AllocatedStorage = 20 ,
AllocatedStorage = 20 ,
DBName = ' tug_of_war ' ,
DBName = ' cloud_ tug_of_war' ,
# Engine='mariadb',
# Engine='mariadb',
Engine = ' mysql ' ,
Engine = ' mysql ' ,
# General purpose SSD
# General purpose SSD
@ -131,24 +113,28 @@ response = rdsClient.create_db_instance(DBInstanceIdentifier="tug-of-war-db1",
# Set this to true later?
# Set this to true later?
MultiAZ = False ,
MultiAZ = False ,
MasterUsername = ' cloud_tug_of_war ' ,
MasterUsername = ' cloud_tug_of_war ' ,
MasterUserPassword = ' cloudcloud ' ,
MasterUserPassword = ' cloudpass ' ,
VpcSecurityGroupIds = [ security_group_id ] ,
VpcSecurityGroupIds = [ security_group_id ] ,
#DBInstanceClass='db.m3.2xlarge',
#DBInstanceClass='db.m3.2xlarge',
DBInstanceClass = ' db.t3.micro ' ,
DBInstanceClass = ' db.t3.micro ' ,
Tags = [
Tags = [
{ ' Key ' : ' Name ' , ' Value ' : ' tug-of-war-db1 ' } ,
{ ' Key ' : ' tug-of-war ' , ' Value ' : ' db ' }
{ ' Key ' : ' Name ' , ' Value ' : ' tug-of-war-rds- db1 ' } ,
{ ' Key ' : ' tug-of-war-rds ' , ' Value ' : ' db ' }
] ,
] ,
)
)
waiter = rdsClient . get_waiter ( ' db_instance_available ' )
waiter = rdsClient . get_waiter ( ' db_instance_available ' )
waiter . wait ( DBInstanceIdentifier = ' tug-of-war-db1 ' )
waiter . wait ( DBInstanceIdentifier = ' tug-of-war-rds- db1 ' )
#dbArn = response['DBInstance'][0]['DBInstanceArn']
dbEndpointAddress = response [ ' DBInstance ' ] [ 0 ] [ ' Endpoint ' ] [ ' Address ' ]
dbEndpointPort = response [ ' DBInstance ' ] [ 0 ] [ ' Endpoint ' ] [ ' Port ' ]
response = ec2Client . describe_security_groups ( Filters = [ { ' Name ' : ' group-name ' , ' Values ' : [ ' tug-of-war-rds ' ] } ] )
security_group_id = response . get ( ' SecurityGroups ' , [ { } ] ) [ 0 ] . get ( ' GroupId ' , ' ' )
print ( dbEndpointAddress + " : " + dbEndpointPort )
response = rdsClient . describe_db_instances ( DBInstanceIdentifier = ' tug-of-war-rds-db1 ' )
print ( response )
dbEndpointAddress = response [ ' DBInstances ' ] [ 0 ] [ ' Endpoint ' ] [ ' Address ' ]
dbEndpointPort = response [ ' DBInstances ' ] [ 0 ] [ ' Endpoint ' ] [ ' Port ' ]
print ( str ( dbEndpointAddress ) + " : " + str ( dbEndpointPort ) )
userDataWebServer = ( ' #!/bin/bash \n '
userDataWebServer = ( ' #!/bin/bash \n '
' # extra repo for RedHat rpms \n '
' # extra repo for RedHat rpms \n '
@ -160,14 +146,19 @@ userDataWebServer = ('#!/bin/bash\n'
' \n '
' \n '
' service httpd start \n '
' service httpd start \n '
' \n '
' \n '
' wget http://mmnet.informatik.hs-fulda.de/cloudcomp/tug-of-war-in-the-clouds.tar.gz \n '
' cp tug-of-war-in-the-clouds.tar.gz /var/www/html/ \n '
# 'wget http://mmnet.informatik.hs-fulda.de/cloudcomp/tug-of-war-in-the-clouds.tar.gz\n'
# 'cp tug-of-war-in-the-clouds.tar.gz /var/www/html/\n'
# 'tar zxvf tug-of-war-in-the-clouds.tar.gz\n'
' cd /var/www/html \n '
' cd /var/www/html \n '
' tar zxvf tug-of-war-in-the-clouds.tar.gz \n '
' wget https://gogs.informatik.hs-fulda.de/srieger/cloud-computing-msc-ai-examples/raw/master/example-projects/tug-of-war-in-the-clouds/web-content/index.php \n '
' wget https://gogs.informatik.hs-fulda.de/srieger/cloud-computing-msc-ai-examples/raw/master/example-projects/tug-of-war-in-the-clouds/web-content/cloud.php \n '
' wget https://gogs.informatik.hs-fulda.de/srieger/cloud-computing-msc-ai-examples/raw/master/example-projects/tug-of-war-in-the-clouds/web-content/config.php \n '
' \n '
' \n '
' # change hostname of db connection \n '
' # change hostname of db connection \n '
' sed -i s/localhost/ ' + dbEndpointAddress + ' /g /var/www/html/config.php \n '
' sed -i s/localhost/ ' + dbEndpointAddress + ' /g /var/www/html/config.php \n '
' sed -i s/ \\ \' cloud \\ \' /cloudcloud/g /var/www/html/config.php \n '
' \n '
' # create default table \n '
' echo " create table clouds ( cloud_id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, value INT, max_value INT, PRIMARY KEY (cloud_id)) " | mysql -h ' + dbEndpointAddress + ' -u cloud_tug_of_war -pcloudpass cloud_tug_of_war \n '
)
)
for i in range ( 1 , 2 ) :
for i in range ( 1 , 2 ) :
@ -190,8 +181,8 @@ for i in range(1, 2):
{
{
' ResourceType ' : ' instance ' ,
' ResourceType ' : ' instance ' ,
' Tags ' : [
' Tags ' : [
{ ' Key ' : ' Name ' , ' Value ' : ' tug-of-war-webserver ' + i } ,
{ ' Key ' : ' tug-of-war ' , ' Value ' : ' webserver ' }
{ ' Key ' : ' Name ' , ' Value ' : ' tug-of-war-rds- webserver ' + str ( i ) } ,
{ ' Key ' : ' tug-of-war-rds ' , ' Value ' : ' webserver ' }
] ,
] ,
}
}
] ,
] ,