final version

This commit is contained in:
s464953 2025-01-15 09:21:01 +01:00
parent 671ec841a7
commit 5b65d9d480
40 changed files with 4945 additions and 254 deletions

View File

@ -0,0 +1,103 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 13,
"id": "1b1c4049-4305-482f-8257-fbb92654b094",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Pobieranie danych AWS CLI...\n",
"Uruchamianie main.py...\n",
"Czyszczenie istniejących zasobów...\n",
"Usuwam Key Pair: s464953-key\n",
"Tworzenie zasobów...\n",
"Traceback (most recent call last):\n",
" File \"/home/students/s464953/praktyczne zastosowanie chmury/aws/main.py\", line 269, in <module>\n",
" main(args.aws_access_key_id, args.aws_secret_access_key, args.aws_session_token)\n",
" File \"/home/students/s464953/praktyczne zastosowanie chmury/aws/main.py\", line 118, in main\n",
" vpc_response = ec2_client.create_vpc(CidrBlock=vpc_cidr)\n",
"UnboundLocalError: local variable 'ec2_client' referenced before assignment\n"
]
},
{
"ename": "",
"evalue": "1",
"output_type": "error",
"traceback": []
}
],
"source": [
"#!/bin/bash\n",
"\n",
"chmod +x main.py\n",
"\n",
"pip install boto3 os load_dotenv base64\n",
"\n",
"python3 main.py"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "63193145-a21b-4d0d-8473-196c9a89011e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"bash: !pip: event not found\n"
]
}
],
"source": [
"!pip install python-dotenv"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "fceeae88-9f3a-4211-9f21-c04ec526bfbf",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"bash: !aws: event not found\n"
]
}
],
"source": [
"!aws configure set region us-east-1\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1bbd1a2d-2e9a-4074-b026-a9afc46fe439",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Bash",
"language": "bash",
"name": "bash"
},
"language_info": {
"codemirror_mode": "shell",
"file_extension": ".sh",
"mimetype": "text/x-sh",
"name": "bash"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -0,0 +1,230 @@
import boto3
import base64
from USER_DATA import user_data
import json
import time
import random
import string
PREFIX = "s464953"
AMI_ID = "ami-0b5eea76982371e91"
INSTANCE_TYPE = "t2.micro"
SECURITY_GROUP_NAME = f"{PREFIX}-sg"
REGION = "us-east-1"
with open("aws_credentials.json", 'r') as file:
creds = json.load(file)
client_ec2 = boto3.client('ec2', region_name=REGION,
aws_access_key_id=creds["aws_access_key_id"],
aws_secret_access_key=creds["aws_secret_access_key"],
aws_session_token=creds["aws_session_token"])
client_elb = boto3.client('elbv2', region_name=REGION,
aws_access_key_id=creds["aws_access_key_id"],
aws_secret_access_key=creds["aws_secret_access_key"],
aws_session_token=creds["aws_session_token"])
autoscaling_client = boto3.client('autoscaling', region_name=REGION,
aws_access_key_id=creds["aws_access_key_id"],
aws_secret_access_key=creds["aws_secret_access_key"],
aws_session_token=creds["aws_session_token"])
cloudwatch_client = boto3.client('cloudwatch', region_name=REGION,
aws_access_key_id=creds["aws_access_key_id"],
aws_secret_access_key=creds["aws_secret_access_key"],
aws_session_token=creds["aws_session_token"])
def create_vpc():
vpc_id = client_ec2.create_vpc(CidrBlock='10.0.0.0/16')['Vpc']['VpcId']
client_ec2.modify_vpc_attribute(VpcId=vpc_id, EnableDnsSupport={'Value': True})
client_ec2.modify_vpc_attribute(VpcId=vpc_id, EnableDnsHostnames={'Value': True})
return vpc_id
def create_subnet(vpc_id, cidr, az):
subnet_id = client_ec2.create_subnet(VpcId=vpc_id, CidrBlock=cidr, AvailabilityZone=az)['Subnet']['SubnetId']
client_ec2.modify_subnet_attribute(SubnetId=subnet_id, MapPublicIpOnLaunch={'Value': True})
return subnet_id
def create_igw(vpc_id):
igw_id = client_ec2.create_internet_gateway()['InternetGateway']['InternetGatewayId']
client_ec2.attach_internet_gateway(InternetGatewayId=igw_id, VpcId=vpc_id)
return igw_id
def create_route_table(vpc_id, subnet_id, igw_id):
rt_id = client_ec2.create_route_table(VpcId=vpc_id)['RouteTable']['RouteTableId']
client_ec2.create_route(
RouteTableId=rt_id,
DestinationCidrBlock='0.0.0.0/0',
GatewayId=igw_id
)
client_ec2.associate_route_table(RouteTableId=rt_id, SubnetId=subnet_id)
return rt_id
def create_key_pair(name):
random_suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))
unique_name = f"{name}-{random_suffix}"
key_material = client_ec2.create_key_pair(KeyName=unique_name)['KeyMaterial']
with open(f"{unique_name}.pem", 'w') as file:
file.write(key_material)
return unique_name
def create_sg(vpc_id):
sg_id = client_ec2.create_security_group(GroupName=SECURITY_GROUP_NAME, Description="Security group", VpcId=vpc_id)['GroupId']
client_ec2.authorize_security_group_ingress(
GroupId=sg_id,
IpPermissions=[
{
'IpProtocol': 'tcp',
'FromPort': 8080,
'ToPort': 8080,
'IpRanges': [
{
'CidrIp': '0.0.0.0/0'
}
]
}
])
return sg_id
def create_launch_template(key_name, sg_id):
lt_id = client_ec2.create_launch_template(
LaunchTemplateName=f"{PREFIX}-lt",
LaunchTemplateData=
{
'ImageId': AMI_ID,
'InstanceType': INSTANCE_TYPE,
'SecurityGroupIds': [sg_id],
'KeyName': key_name,
'UserData': base64.b64encode(user_data.encode('utf-8')).decode('utf-8')
}
)['LaunchTemplate']['LaunchTemplateId']
return lt_id
def create_target_group(vpc_id):
tg_arn = client_elb.create_target_group(
Name=f"{PREFIX}-tg",
Protocol='HTTP',
Port=8080,
VpcId=vpc_id,
TargetType='instance',
IpAddressType='ipv4',
HealthCheckProtocol='HTTP',
HealthCheckPort='8080',
HealthCheckPath='/factors/6',
HealthCheckIntervalSeconds=30,
HealthCheckTimeoutSeconds=5,
HealthyThresholdCount=3,
UnhealthyThresholdCount=3
)['TargetGroups'][0]['TargetGroupArn']
return tg_arn
def create_lb(subnets, sg_id):
lb_arn = client_elb.create_load_balancer(
Name=f"{PREFIX}-lb",
Subnets=subnets,
SecurityGroups=[sg_id],
Scheme='internet-facing',
Type='application',
IpAddressType='ipv4'
)['LoadBalancers'][0]['LoadBalancerArn']
return lb_arn
def create_listener(lb_arn, tg_arn):
listener_arn = client_elb.create_listener(
LoadBalancerArn=lb_arn,
Protocol='HTTP',
Port=8080,
DefaultActions=[
{
'Type': 'forward',
'TargetGroupArn': tg_arn
}
]
)['Listeners'][0]['ListenerArn']
return listener_arn
def create_auto_scaling_group(launch_template_id, target_group_arn, subnet_id_1, subnet_id_2):
autoscaling_client.create_auto_scaling_group(
AutoScalingGroupName=f"{PREFIX}-asg",
LaunchTemplate={
'LaunchTemplateId': launch_template_id,
'Version': '$Latest'
},
MinSize=2,
MaxSize=5,
DesiredCapacity=2,
TargetGroupARNs=[target_group_arn],
AvailabilityZones=[f"{REGION}a", f"{REGION}b"],
HealthCheckType='EC2',
HealthCheckGracePeriod=90,
VPCZoneIdentifier=f"{subnet_id_1},{subnet_id_2}",
Tags=[
{
'Key': 'Name',
'Value': f"{PREFIX}-asg",
'PropagateAtLaunch': True
}
]
)
describe_response = autoscaling_client.describe_auto_scaling_groups(
AutoScalingGroupNames=[f"{PREFIX}-asg"]
)
asg_arn = describe_response['AutoScalingGroups'][0]['AutoScalingGroupARN']
return asg_arn
def put_scaling_policy():
policy = autoscaling_client.put_scaling_policy(
AutoScalingGroupName=f"{PREFIX}-asg",
PolicyName=f"{PREFIX}-scale-policy-cpu",
PolicyType='SimpleScaling',
AdjustmentType='ChangeInCapacity',
ScalingAdjustment=1,
Cooldown=180
)
return policy['PolicyARN']
def create_cloudwatch_alarm(sp_arn):
cloudwatch_client.put_metric_alarm(
AlarmName=f"{PREFIX}-cpu-utilization-alarm",
ComparisonOperator='GreaterThanOrEqualToThreshold',
EvaluationPeriods=1,
MetricName='CPUUtilization',
Namespace='AWS/EC2',
Period=60,
Statistic='Average',
Threshold=30.0,
ActionsEnabled=True,
AlarmActions=[sp_arn],
AlarmDescription='Alarm to scale out/in based on CPU utilization',
Dimensions=[{
'Name': 'AutoScalingGroupName',
'Value': f"{PREFIX}-asg"
}]
)
def main():
vpc = create_vpc()
subnet = create_subnet(vpc, '10.0.1.0/24', f"{REGION}a")
subnet2 = create_subnet(vpc, '10.0.2.0/24', f"{REGION}b")
igw = create_igw(vpc)
create_route_table(vpc, subnet, igw)
key = create_key_pair(f"{PREFIX}-key")
sg = create_sg(vpc)
lt = create_launch_template(key, sg)
tg = create_target_group(vpc)
lb = create_lb([subnet, subnet2], sg)
listener = create_listener(lb, tg)
asg_arn = create_auto_scaling_group(lt, tg, subnet, subnet2)
sp = put_scaling_policy()
create_cloudwatch_alarm(sp)
dns = client_elb.describe_load_balancers(LoadBalancerArns=[lb])['LoadBalancers'][0]['DNSName']
print(dns)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,72 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 6,
"id": "dfd09c32-c2f2-431d-9bef-25616b4195e3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Defaulting to user installation because normal site-packages is not writeable\n",
"Requirement already satisfied: boto3 in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 1)) (1.35.81)\n",
"Requirement already satisfied: python-dotenv in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 2)) (1.0.1)\n",
"Requirement already satisfied: paramiko in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 3)) (3.5.0)\n",
"Requirement already satisfied: requests in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 4)) (2.32.3)\n",
"Requirement already satisfied: botocore<1.36.0,>=1.35.81 in /home/students/s464953/.local/lib/python3.9/site-packages (from boto3->-r requirements.txt (line 1)) (1.35.81)\n",
"Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /home/students/s464953/.local/lib/python3.9/site-packages (from boto3->-r requirements.txt (line 1)) (1.0.1)\n",
"Requirement already satisfied: s3transfer<0.11.0,>=0.10.0 in /home/students/s464953/.local/lib/python3.9/site-packages (from boto3->-r requirements.txt (line 1)) (0.10.4)\n",
"Requirement already satisfied: bcrypt>=3.2 in /home/students/s464953/.local/lib/python3.9/site-packages (from paramiko->-r requirements.txt (line 3)) (4.2.1)\n",
"Requirement already satisfied: cryptography>=3.3 in /usr/local/lib/python3.9/dist-packages (from paramiko->-r requirements.txt (line 3)) (38.0.1)\n",
"Requirement already satisfied: pynacl>=1.5 in /home/students/s464953/.local/lib/python3.9/site-packages (from paramiko->-r requirements.txt (line 3)) (1.5.0)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (2.1.1)\n",
"Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (3.4)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (1.26.12)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (2022.9.14)\n",
"Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /usr/local/lib/python3.9/dist-packages (from botocore<1.36.0,>=1.35.81->boto3->-r requirements.txt (line 1)) (2.8.2)\n",
"Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.9/dist-packages (from cryptography>=3.3->paramiko->-r requirements.txt (line 3)) (1.15.1)\n",
"Requirement already satisfied: pycparser in /usr/local/lib/python3.9/dist-packages (from cffi>=1.12->cryptography>=3.3->paramiko->-r requirements.txt (line 3)) (2.21)\n",
"Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.36.0,>=1.35.81->boto3->-r requirements.txt (line 1)) (1.16.0)\n",
"\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.3.1\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3 -m pip install --upgrade pip\u001b[0m\n",
"Auto Scaling Group created with ARN: arn:aws:autoscaling:us-east-1:304199018171:autoScalingGroup:91d82aae-1256-44d9-ac62-f9db2492c65f:autoScalingGroupName/s464953-asg\n",
"CPU Utilization alarm created\n",
"s464953-lb-500026741.us-east-1.elb.amazonaws.com\n"
]
}
],
"source": [
"#!/bin/bash\n",
"chmod +x autoscaling3.py\n",
"pip3 install -r requirements.txt\n",
"python3 autoscaling3.py\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b0e3f3c0-47c6-4676-9ada-72520abc8481",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Bash",
"language": "bash",
"name": "bash"
},
"language_info": {
"codemirror_mode": "shell",
"file_extension": ".sh",
"mimetype": "text/x-sh",
"name": "bash"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -0,0 +1,127 @@
import boto3
import base64
from USER_DATA import user_data
import json
import time
import random
import string
PREFIX = "s464953"
AMI_ID = "ami-0b5eea76982371e91"
INSTANCE_TYPE = "t2.micro"
SECURITY_GROUP_NAME = f"{PREFIX}-sg"
REGION = "us-east-1"
with open("aws_credentials.json", 'r') as file:
creds = json.load(file)
client_ec2 = boto3.client('ec2', region_name=REGION,
aws_access_key_id=creds["aws_access_key_id"],
aws_secret_access_key=creds["aws_secret_access_key"],
aws_session_token=creds["aws_session_token"])
client_elb = boto3.client('elbv2', region_name=REGION,
aws_access_key_id=creds["aws_access_key_id"],
aws_secret_access_key=creds["aws_secret_access_key"],
aws_session_token=creds["aws_session_token"])
def create_vpc():
vpc_id = client_ec2.create_vpc(CidrBlock='10.0.0.0/16')['Vpc']['VpcId']
client_ec2.modify_vpc_attribute(VpcId=vpc_id, EnableDnsSupport={'Value': True})
client_ec2.modify_vpc_attribute(VpcId=vpc_id, EnableDnsHostnames={'Value': True})
return vpc_id
def create_subnet(vpc_id, cidr, az):
subnet_id = client_ec2.create_subnet(VpcId=vpc_id, CidrBlock=cidr, AvailabilityZone=az)['Subnet']['SubnetId']
client_ec2.modify_subnet_attribute(SubnetId=subnet_id, MapPublicIpOnLaunch={'Value': True})
return subnet_id
def create_igw(vpc_id):
igw_id = client_ec2.create_internet_gateway()['InternetGateway']['InternetGatewayId']
client_ec2.attach_internet_gateway(InternetGatewayId=igw_id, VpcId=vpc_id)
return igw_id
def create_route_table(vpc_id, subnet_id, igw_id):
rt_id = client_ec2.create_route_table(VpcId=vpc_id)['RouteTable']['RouteTableId']
client_ec2.create_route(RouteTableId=rt_id, DestinationCidrBlock='0.0.0.0/0', GatewayId=igw_id)
client_ec2.associate_route_table(RouteTableId=rt_id, SubnetId=subnet_id)
return rt_id
def create_key_pair(name):
random_suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))
unique_name = f"{name}-{random_suffix}"
key_material = client_ec2.create_key_pair(KeyName=unique_name)['KeyMaterial']
with open(f"{unique_name}.pem", 'w') as file:
file.write(key_material)
return unique_name
def create_sg(vpc_id):
sg_id = client_ec2.create_security_group(GroupName=SECURITY_GROUP_NAME, Description="Security group", VpcId=vpc_id)['GroupId']
client_ec2.authorize_security_group_ingress(GroupId=sg_id, IpPermissions=[
{'IpProtocol': 'tcp', 'FromPort': 22, 'ToPort': 22, 'IpRanges': [{'CidrIp': '0.0.0.0/0'}]},
{'IpProtocol': 'tcp', 'FromPort': 8080, 'ToPort': 8080, 'IpRanges': [{'CidrIp': '0.0.0.0/0'}]}
])
return sg_id
def create_launch_template(key_name, sg_id):
lt_id = client_ec2.create_launch_template(
LaunchTemplateName=f"{PREFIX}-lt", LaunchTemplateData={
'ImageId': AMI_ID, 'InstanceType': INSTANCE_TYPE,
'SecurityGroupIds': [sg_id], 'KeyName': key_name,
'UserData': base64.b64encode(user_data.encode('utf-8')).decode('utf-8')
})['LaunchTemplate']['LaunchTemplateId']
return lt_id
def create_target_group(vpc_id):
tg_arn = client_elb.create_target_group(
Name=f"{PREFIX}-tg", Protocol='HTTP', Port=8080, VpcId=vpc_id, TargetType='instance',
HealthCheckProtocol='HTTP', HealthCheckPort='8080', HealthCheckPath='/factors/6'
)['TargetGroups'][0]['TargetGroupArn']
return tg_arn
def create_lb(subnets, sg_id):
lb_arn = client_elb.create_load_balancer(
Name=f"{PREFIX}-lb", Subnets=subnets, SecurityGroups=[sg_id], Scheme='internet-facing',
Type='application', IpAddressType='ipv4'
)['LoadBalancers'][0]['LoadBalancerArn']
return lb_arn
def create_listener(lb_arn, tg_arn):
listener_arn = client_elb.create_listener(
LoadBalancerArn=lb_arn, Protocol='HTTP', Port=8080,
DefaultActions=[{'Type': 'forward', 'TargetGroupArn': tg_arn}]
)['Listeners'][0]['ListenerArn']
return listener_arn
def create_instances(lt_id, subnet_id):
ids = [i['InstanceId'] for i in client_ec2.run_instances(
LaunchTemplate={'LaunchTemplateId': lt_id, 'Version': '$Latest'},
MinCount=2, MaxCount=2, SubnetId=subnet_id)['Instances']]
while True:
states = [r['Instances'][0]['State']['Name'] for r in client_ec2.describe_instances(InstanceIds=ids)['Reservations']]
if all(s == 'running' for s in states):
break
time.sleep(10)
return ids
def main():
vpc = create_vpc()
subnet1 = create_subnet(vpc, '10.0.1.0/24', 'us-east-1a')
subnet2 = create_subnet(vpc, '10.0.2.0/24', 'us-east-1b')
igw = create_igw(vpc)
create_route_table(vpc, subnet1, igw)
key = create_key_pair(f"{PREFIX}-key")
sg = create_sg(vpc)
lt = create_launch_template(key, sg)
tg = create_target_group(vpc)
lb = create_lb([subnet1, subnet2], sg)
listener = create_listener(lb, tg)
instances = create_instances(lt, subnet1)
client_elb.register_targets(TargetGroupArn=tg, Targets=[{'Id': i} for i in instances])
dns = client_elb.describe_load_balancers(LoadBalancerArns=[lb])['LoadBalancers'][0]['DNSName']
print(dns)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,70 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "6781ce95-c6ad-42cd-bcb5-ac1cda3a56cc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Defaulting to user installation because normal site-packages is not writeable\n",
"Requirement already satisfied: boto3 in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 1)) (1.35.81)\n",
"Requirement already satisfied: python-dotenv in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 2)) (1.0.1)\n",
"Requirement already satisfied: paramiko in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 3)) (3.5.0)\n",
"Requirement already satisfied: requests in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 4)) (2.32.3)\n",
"Requirement already satisfied: botocore<1.36.0,>=1.35.81 in /home/students/s464953/.local/lib/python3.9/site-packages (from boto3->-r requirements.txt (line 1)) (1.35.81)\n",
"Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /home/students/s464953/.local/lib/python3.9/site-packages (from boto3->-r requirements.txt (line 1)) (1.0.1)\n",
"Requirement already satisfied: s3transfer<0.11.0,>=0.10.0 in /home/students/s464953/.local/lib/python3.9/site-packages (from boto3->-r requirements.txt (line 1)) (0.10.4)\n",
"Requirement already satisfied: bcrypt>=3.2 in /home/students/s464953/.local/lib/python3.9/site-packages (from paramiko->-r requirements.txt (line 3)) (4.2.1)\n",
"Requirement already satisfied: cryptography>=3.3 in /usr/local/lib/python3.9/dist-packages (from paramiko->-r requirements.txt (line 3)) (38.0.1)\n",
"Requirement already satisfied: pynacl>=1.5 in /home/students/s464953/.local/lib/python3.9/site-packages (from paramiko->-r requirements.txt (line 3)) (1.5.0)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (2.1.1)\n",
"Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (3.4)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (1.26.12)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (2022.9.14)\n",
"Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /usr/local/lib/python3.9/dist-packages (from botocore<1.36.0,>=1.35.81->boto3->-r requirements.txt (line 1)) (2.8.2)\n",
"Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.9/dist-packages (from cryptography>=3.3->paramiko->-r requirements.txt (line 3)) (1.15.1)\n",
"Requirement already satisfied: pycparser in /usr/local/lib/python3.9/dist-packages (from cffi>=1.12->cryptography>=3.3->paramiko->-r requirements.txt (line 3)) (2.21)\n",
"Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.36.0,>=1.35.81->boto3->-r requirements.txt (line 1)) (1.16.0)\n",
"\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.3.1\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3 -m pip install --upgrade pip\u001b[0m\n",
"s464953-lb-29746609.us-east-1.elb.amazonaws.com\n"
]
}
],
"source": [
"#!/bin/bash\n",
"chmod +x lb2.py\n",
"pip3 install -r requirements.txt\n",
"python3 lb2.py\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e807cccb-cb8e-4b25-91f1-43a72cda214f",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Bash",
"language": "bash",
"name": "bash"
},
"language_info": {
"codemirror_mode": "shell",
"file_extension": ".sh",
"mimetype": "text/x-sh",
"name": "bash"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

View File

@ -0,0 +1,218 @@
import boto3
import base64
import os
from dotenv import load_dotenv
load_dotenv()
# Konfiguracja
PREFIX = "464953"
REGION = "us-east-1"
AMI_ID = "ami-0b5eea76982371e91"
REPO_URL = "https://git.wmi.amu.edu.pl/464953/aws.git"
INSTANCE_TYPE = "t2.micro"
USER_DATA = f"""#!/bin/bash
sudo yum update -y
sudo yum install -y git
cd /home/ec2-user
git clone {REPO_URL}
cd aws
chmod +x webservice
./webservice
"""
aws_credentials = {
'region_name': REGION,
'aws_access_key_id': "ASIAUNU5MU25US5ZA3TT",
'aws_secret_access_key': "Ca1K+Wo2JkWSFb3njIUYPYuhSCNjnJj7a/azLKzw",
'aws_session_token':"IQoJb3JpZ2luX2VjEP///////////wEaCXVzLXdlc3QtMiJGMEQCIC8cXrkVu9cE6ByMrA2YhQeEYLnRgqr4G63MpYiwlcy5AiB7HyJ8nVKH06oISMnvzP93WU0KIUM7QAF30qK/1eYwcyq2AgjI//////////8BEAAaDDMwNDE5OTAxODE3MSIM3kxLqz5/wuHN0dzfKooCk+k5uJH7GvDsgxxxlcwEouefn3TuUYq88q2WESMgkOdvS7j2qxmghwydSpIlvsaYiyHUSMEo8xUjGGLTm62CZGxILf2383A2VU3adThLfXkf/qn9CxRcmFw7tqP4oDJYMN/CqMPGw+Nc3g3Uc87eHUsSqMDuib84SOIT6Uv5UyCIAXC5akdIf8vxLsfn9r9kXS+3mcWBNi3igUnv2v2c4J3ceFmsVCWvw8hfa5Bx4HomXMNTM85KMGHY/PyNgyO0yl4vnDgpXuB0iojXnotrtuqde0ybNZWuZjfAmageEpCQCusqqhcCF2M4nv4MPt5rdWx68jk9bsOkSfcffJTV6qNELRq82ZKxdrowmayiuwY6ngGmsuWmdUYkAlfCt7GsOiOMNvYbeZFY7rLfhNIHxIzIYGZCXXqO5k0GrxutUxPD2ZChWGEQKrEAsjT7JZhiL063/bk15AUKt69+3X4uchzaxjV68lO4lvrgj2pkwzb/PuYas+ntYTd9wRhrY3Q3tk08qHZhBh8N+pkxQBklfsT86at78/32GV8+JpPO/0uRNV1plxAWXyqDnCiSYbemag==",
}
# Klienci AWS
ec2_client = boto3.client('ec2', **aws_credentials)
elbv2_client = boto3.client('elbv2', **aws_credentials)
autoscaling_client = boto3.client('autoscaling', **aws_credentials)
cloudwatch_client = boto3.client('cloudwatch', **aws_credentials)
# Tworzenie VPC
def create_vpc():
vpc = ec2_client.create_vpc(CidrBlock='10.0.0.0/16')['Vpc']
ec2_client.modify_vpc_attribute(VpcId=vpc['VpcId'], EnableDnsSupport={'Value': True})
ec2_client.modify_vpc_attribute(VpcId=vpc['VpcId'], EnableDnsHostnames={'Value': True})
ec2_client.create_tags(Resources=[vpc['VpcId']], Tags=[{'Key': 'Name', 'Value': f"{PREFIX}-vpc"}])
return vpc['VpcId']
# Tworzenie dwóch subnetów w różnych Availability Zones
def create_subnets(vpc_id):
# Pobierz dostępne Availability Zones
availability_zones = ec2_client.describe_availability_zones()['AvailabilityZones']
# Wybierz pierwsze dwie dostępne strefy (zakładając, że co najmniej dwie są dostępne)
az_1 = availability_zones[0]['ZoneName']
az_2 = availability_zones[1]['ZoneName']
# Tworzenie subnetu w pierwszej Availability Zone
subnet_1 = ec2_client.create_subnet(CidrBlock='10.0.1.0/24', VpcId=vpc_id, AvailabilityZone=az_1)['Subnet']
ec2_client.modify_subnet_attribute(SubnetId=subnet_1['SubnetId'], MapPublicIpOnLaunch={'Value': True})
ec2_client.create_tags(Resources=[subnet_1['SubnetId']], Tags=[{'Key': 'Name', 'Value': f"{PREFIX}-subnet-az1"}])
# Tworzenie subnetu w drugiej Availability Zone
subnet_2 = ec2_client.create_subnet(CidrBlock='10.0.2.0/24', VpcId=vpc_id, AvailabilityZone=az_2)['Subnet']
ec2_client.modify_subnet_attribute(SubnetId=subnet_2['SubnetId'], MapPublicIpOnLaunch={'Value': True})
ec2_client.create_tags(Resources=[subnet_2['SubnetId']], Tags=[{'Key': 'Name', 'Value': f"{PREFIX}-subnet-az2"}])
return [subnet_1['SubnetId'], subnet_2['SubnetId']]
# Tworzenie Security Group
def create_security_group(vpc_id):
sg = ec2_client.create_security_group(
Description=f"{PREFIX}-sg",
GroupName=f"{PREFIX}-sg",
VpcId=vpc_id
)['GroupId']
ec2_client.authorize_security_group_ingress(
GroupId=sg,
IpPermissions=[{
'IpProtocol': 'tcp',
'FromPort': 8080,
'ToPort': 8080,
'IpRanges': [{'CidrIp': '0.0.0.0/0'}]
}])
return sg
def get_target_group_by_name(name):
try:
response = elbv2_client.describe_target_groups(Names=[name])
return response['TargetGroups'][0] # Jeśli istnieje, zwróci grupę
except elbv2_client.exceptions.ClientError:
return None # Grupa nie istnieje
# Tworzenie ALB i grupy docelowej
def create_alb_and_target_group(subnet_ids, vpc_id):
# Dodanie unikalnego identyfikatora do nazwy grupy docelowej
target_group_name = f"{PREFIX}-TG-{os.urandom(4).hex()}" # Dodaje losowy ciąg do nazwy, aby uniknąć duplikacji
tg = elbv2_client.create_target_group(
Name=target_group_name,
Protocol='HTTP',
Port=8080,
VpcId=vpc_id,
TargetType='instance'
)['TargetGroups'][0]
# Jeśli chcesz przypisać więcej niż jeden subnet, zaktualizuj ten fragment:
alb = elbv2_client.create_load_balancer(
Name=f"{PREFIX}-ALB",
Subnets=[subnet_ids[0], subnet_ids[1]], # Drugi subnet
Scheme='internet-facing',
Type='application',
IpAddressType='ipv4'
)['LoadBalancers'][0]
elbv2_client.create_listener(
LoadBalancerArn=alb['LoadBalancerArn'],
Protocol='HTTP',
Port=8080,
DefaultActions=[{'Type': 'forward', 'TargetGroupArn': tg['TargetGroupArn']}]
)
return alb['DNSName'], tg['TargetGroupArn']
# Tworzenie Launch Template
def create_launch_template(sg_id):
lt = ec2_client.create_launch_template(
LaunchTemplateName=f"{PREFIX}-LT",
LaunchTemplateData={
'ImageId': AMI_ID,
'InstanceType': INSTANCE_TYPE,
'SecurityGroupIds': [sg_id],
'UserData': base64.b64encode(USER_DATA.encode('utf-8')).decode('utf-8'),
}
)['LaunchTemplate']
return lt['LaunchTemplateId']
# Tworzenie Auto Scaling Group
def create_auto_scaling_group(lt_id, subnet_ids, tg_arn):
autoscaling_client.create_auto_scaling_group(
AutoScalingGroupName=f"{PREFIX}-ASG",
LaunchTemplate={
'LaunchTemplateId': lt_id,
'Version': '$Latest'
},
MinSize=2,
MaxSize=5,
DesiredCapacity=2,
VPCZoneIdentifier=','.join(subnet_ids),
TargetGroupARNs=[tg_arn],
HealthCheckType='ELB',
HealthCheckGracePeriod=90,
Tags=[{'Key': 'Name', 'Value': f"{PREFIX}-instance", 'PropagateAtLaunch': True}]
)
# Tworzenie Internet Gateway i przypisanie do VPC
def create_internet_gateway(vpc_id):
igw = ec2_client.create_internet_gateway()['InternetGateway']
ec2_client.attach_internet_gateway(InternetGatewayId=igw['InternetGatewayId'], VpcId=vpc_id)
# Zaktualizowanie tablicy routingu VPC, aby umożliwić ruch do internetu
route_table_id = ec2_client.describe_route_tables(Filters=[{'Name': 'vpc-id', 'Values': [vpc_id]}])['RouteTables'][0]['RouteTableId']
ec2_client.create_route(
RouteTableId=route_table_id,
DestinationCidrBlock='0.0.0.0/0',
GatewayId=igw['InternetGatewayId']
)
print(f"Internet Gateway {igw['InternetGatewayId']} został przypisany do VPC {vpc_id}")
return igw['InternetGatewayId']
# Funkcja czyszcząca
def cleanup_previous_infrastructure():
# Usuwanie Auto Scaling Group
try:
autoscaling_client.delete_auto_scaling_group(
AutoScalingGroupName=f"{PREFIX}-ASG",
ForceDelete=True
)
print("Usunięto Auto Scaling Group.")
except Exception as e:
print(f"Nie udało się usunąć Auto Scaling Group: {e}")
# Usuwanie Load Balancer
try:
lb = elbv2_client.describe_load_balancers(
Names=[f"{PREFIX}-ALB"]
)['LoadBalancers']
for lb_instance in lb:
elbv2_client.delete_load_balancer(
LoadBalancerArn=lb_instance['LoadBalancerArn']
)
print("Usunięto Load Balancer.")
except Exception as e:
print(f"Nie udało się usunąć Load Balancer: {e}")
# Usuwanie VPC i Subnetu
try:
vpcs = ec2_client.describe_vpcs(Filters=[{'Name': 'tag:Name', 'Values': [f"{PREFIX}-vpc"]}])['Vpcs']
for vpc in vpcs:
ec2_client.delete_vpc(VpcId=vpc['VpcId'])
print("Usunięto VPC.")
except Exception as e:
print(f"Nie udało się usunąć VPC: {e}")
# Główna funkcja
if __name__ == "__main__":
cleanup_previous_infrastructure()
vpc_id = create_vpc()
create_internet_gateway(vpc_id)
subnet_ids = create_subnets(vpc_id) # Tworzymy dwa subnets w różnych AZ
sg_id = create_security_group(vpc_id)
alb_dns, tg_arn = create_alb_and_target_group(subnet_ids, vpc_id)
lt_id = create_launch_template(sg_id)
create_auto_scaling_group(lt_id, subnet_ids, tg_arn)
print(f"Application Load Balancer dostępny pod: {alb_dns}")

View File

@ -0,0 +1,198 @@
import boto3
import base64
from dotenv import load_dotenv
import os
load_dotenv()
PREFIX = "464979"
REGION = "us-east-1"
AMI_ID = "ami-0b5eea76982371e91"
REPO_URL = "https://git.wmi.amu.edu.pl/s464979/chmury-aws.git"
INSTANCE_TYPE = "t2.micro"
aws_access_key_id = "ASIAUNU5MU2542JCCSKK"
aws_secret_access_key = "uzSGWv+bLCFGU7l0RHsVNMGw6GlCWFdSqCHmLyS+"
aws_session_token = "IQoJb3JpZ2luX2VjEAAaCXVzLXdlc3QtMiJGMEQCIAjblub+EcrjBbnzOGqXxlv+to92hc35n/wnAQ0cONTSAiAOcwdqv6wu6k9rFj1PUv09Q4XdcdDH/S9gF9DK5LqmqCq2AgjJ//////////8BEAAaDDMwNDE5OTAxODE3MSIMDEvO7EWHcq0rbT+OKooCRGVhD+L5kky7svHxzS5kBbfk8zw6Or0zl+yYSmo3OKS7PLVSK35r+cvn6AGsljGbP1i5klpvQNYHAkCkdJWr+1sFV2P70aU9pgyxGP9bURONuPnLsCZv7F4wpEvBNa865UEsF28HbnL3lIp0h5fMsXqs/Ll7D7Fog6zs2r+QGC42oyLV42NH8vYzHKYmd9QYhxIOtTgdir9/YCCcD5fZN0W1YR6B6zyRL4bTGsSHnzsYiEh6AzWsGD6QaMih0Zf7Lz8uvVY/q3wSBUsUqslanVS2bs+EcGMUBj+NquPhde/zYI2PwJIpB5+8O5sGLZbU8fKXpd7iLcphooF+FAGLqvVNvvVbDH83GiUwqMKiuwY6ngGoVvsHH3yvPl/CAsEkHnYgqZdxpOR0CMZ1VDz5htERwjC045uyTP/8txLItP5B0b9P63S9cgd4vDGb9bjr1KREJl18A5chhicKJK7HMhWl9wopKwOsCAqMZtyB4+OMfTc+hZjAoRibHiUKAmqrvy7lQHTGKW/xLTk+S2orC6devIUHJ38FNxcvggPQ58yksCgy6/K1nvaEigt/Qnso1A=="
user_data_script = f"""#!/bin/bash
sudo yum update -y
sudo yum install -y git
cd /home/ec2-user
git clone {REPO_URL}
cd chmury-aws
chmod +x webservice
./webservice
"""
ec2_client = boto3.client(
'ec2',
region_name=REGION,
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
aws_session_token=aws_session_token,
)
elbv2 = boto3.client(
'elbv2',
region_name=REGION,
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
aws_session_token=aws_session_token,
)
autoscaling = boto3.client(
'autoscaling',
region_name=REGION,
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
aws_session_token=aws_session_token,
)
cloudwatch = boto3.client(
'cloudwatch',
region_name=REGION,
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
aws_session_token=aws_session_token,
)
vpc_cidr = '10.0.0.0/16'
vpc_response = ec2_client.create_vpc(CidrBlock=vpc_cidr)
vpc_id = vpc_response['Vpc']['VpcId']
ec2_client.modify_vpc_attribute(VpcId=vpc_id, EnableDnsSupport={'Value': True})
ec2_client.modify_vpc_attribute(VpcId=vpc_id, EnableDnsHostnames={'Value': True})
ec2_client.create_tags(Resources=[vpc_id], Tags=[{'Key': 'Name', 'Value': PREFIX + '-vpc'}])
ig_response = ec2_client.create_internet_gateway()
ig_id = ig_response['InternetGateway']['InternetGatewayId']
ec2_client.attach_internet_gateway(InternetGatewayId=ig_id, VpcId=vpc_id)
subnet_cidr = '10.0.1.0/24'
subnet_response = ec2_client.create_subnet(CidrBlock=subnet_cidr, VpcId=vpc_id)
subnet_id = subnet_response['Subnet']['SubnetId']
ec2_client.modify_subnet_attribute(SubnetId=subnet_id, MapPublicIpOnLaunch={'Value': True})
ec2_client.create_tags(Resources=[subnet_id], Tags=[{'Key': 'Name', 'Value': PREFIX + '-subnet'}])
rt_response = ec2_client.create_route_table(VpcId=vpc_id)
rt_id = rt_response['RouteTable']['RouteTableId']
ec2_client.create_route(RouteTableId=rt_id, DestinationCidrBlock='0.0.0.0/0', GatewayId=ig_id)
ec2_client.associate_route_table(RouteTableId=rt_id, SubnetId=subnet_id)
key_pair = ec2_client.create_key_pair(KeyName=PREFIX + '-key', KeyType='ed25519')
sg_response = ec2_client.create_security_group(
Description=PREFIX + '-sg',
GroupName=PREFIX + '-sg',
VpcId=vpc_id
)
sg_id = sg_response['GroupId']
ec2_client.authorize_security_group_ingress(
GroupId=sg_id,
IpPermissions=[{
'IpProtocol': 'tcp',
'FromPort': 8080,
'ToPort': 8080,
'IpRanges': [{'CidrIp': '0.0.0.0/0'}]
}]
)
tg_response = elbv2.create_target_group(
Name=PREFIX + '-TargetGroup',
Protocol='TCP',
Port=8080,
VpcId=vpc_id,
TargetType='instance',
IpAddressType='ipv4',
)
tg_arn = tg_response['TargetGroups'][0]['TargetGroupArn']
alloc_response = ec2_client.allocate_address(Domain='vpc')
allocation_id = alloc_response['AllocationId']
nlb_response = elbv2.create_load_balancer(
Name=PREFIX + '-LoadBalancer',
SubnetMappings=[{'SubnetId': subnet_id, 'AllocationId': allocation_id}],
Scheme='internet-facing',
Type='network',
IpAddressType='ipv4',
)
lb_arn = nlb_response['LoadBalancers'][0]['LoadBalancerArn']
lb_dns = nlb_response['LoadBalancers'][0]['DNSName']
elbv2.create_listener(
LoadBalancerArn=lb_arn,
Protocol='TCP',
Port=8080,
DefaultActions=[{
'Type': 'forward',
'TargetGroupArn': tg_arn,
}],
)
lt_response = ec2_client.create_launch_template(
LaunchTemplateName=PREFIX + '-LT',
LaunchTemplateData={
'ImageId': AMI_ID,
'InstanceType': INSTANCE_TYPE,
'KeyName': PREFIX + '-key',
'SecurityGroupIds': [sg_id],
'UserData': base64.b64encode(user_data_script.encode('utf-8')).decode('utf-8'),
}
)
asg_name = PREFIX + '-ASG'
autoscaling.create_auto_scaling_group(
AutoScalingGroupName=asg_name,
LaunchTemplate={
'LaunchTemplateId': lt_response['LaunchTemplate']['LaunchTemplateId'],
'Version': '$Latest'
},
MinSize=2,
MaxSize=5,
DesiredCapacity=2,
VPCZoneIdentifier=subnet_id,
TargetGroupARNs=[tg_arn],
HealthCheckType='EC2',
HealthCheckGracePeriod=90,
Tags=[
{
'Key': 'Name',
'Value': PREFIX + '-instance',
'PropagateAtLaunch': True
}
]
)
scale_out_response = autoscaling.put_scaling_policy(
AutoScalingGroupName=asg_name,
PolicyName= PREFIX + '-ScaleOutPolicy',
PolicyType='SimpleScaling',
AdjustmentType='ChangeInCapacity',
ScalingAdjustment=1,
Cooldown=180
)
scale_out_policy_arn = scale_out_response['PolicyARN']
cloudwatch.put_metric_alarm(
AlarmName= PREFIX + '-HighCPU-Alarm',
ComparisonOperator='GreaterThanThreshold',
EvaluationPeriods=2,
MetricName='CPUUtilization',
Namespace='AWS/EC2',
Period=60,
Statistic='Average',
Threshold=30.0, # Zmienić jeśli potrzeba późniejszego skalowania
ActionsEnabled=True,
AlarmActions=[scale_out_policy_arn],
Dimensions=[
{
'Name': 'AutoScalingGroupName',
'Value': asg_name
},
],
Unit='Percent'
)
print(f"Load Balancer DNS: {lb_dns}")

View File

@ -0,0 +1,541 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "c67c0078-3051-4383-be30-30d930a48bf5",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Exception in thread Thread-5:\n",
"Traceback (most recent call last):\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 174, in _new_conn\n",
" conn = connection.create_connection(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py\", line 95, in create_connection\n",
" raise err\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py\", line 85, in create_connection\n",
" sock.connect(sa)\n",
"TimeoutError: [Errno 110] Connection timed out\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 703, in urlopen\n",
" httplib_response = self._make_request(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 398, in _make_request\n",
" conn.request(method, url, **httplib_request_kw)\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 239, in request\n",
" super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1259, in request\n",
" self._send_request(method, url, body, headers, encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1305, in _send_request\n",
" self.endheaders(body, encode_chunked=encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1254, in endheaders\n",
" self._send_output(message_body, encode_chunked=encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1014, in _send_output\n",
" self.send(msg)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 954, in send\n",
" self.connect()\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 205, in connect\n",
" conn = self._new_conn()\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 186, in _new_conn\n",
" raise NewConnectionError(\n",
"urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7fdbeaf438b0>: Failed to establish a new connection: [Errno 110] Connection timed out\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/adapters.py\", line 667, in send\n",
" resp = conn.urlopen(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 787, in urlopen\n",
" retries = retries.increment(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/retry.py\", line 592, in increment\n",
" raise MaxRetryError(_pool, url, error or ResponseError(cause))\n",
"urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='s464953-loadbalancer-905735492.us-east-1.elb.amazonaws.com', port=8080): Max retries exceeded with url: /factors/12578151695852263809562421383 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fdbeaf438b0>: Failed to establish a new connection: [Errno 110] Connection timed out'))\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/usr/lib/python3.9/threading.py\", line 954, in _bootstrap_inner\n",
" self.run()\n",
" File \"/usr/lib/python3.9/threading.py\", line 892, in run\n",
" self._target(*self._args, **self._kwargs)\n",
" File \"/tmp/ipykernel_34689/934420013.py\", line 103, in thread_function\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/api.py\", line 73, in get\n",
" return request(\"get\", url, params=params, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/api.py\", line 59, in request\n",
" return session.request(method=method, url=url, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/sessions.py\", line 589, in request\n",
" resp = self.send(prep, **send_kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/sessions.py\", line 703, in send\n",
" r = adapter.send(request, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/adapters.py\", line 700, in send\n",
" raise ConnectionError(e, request=request)\n",
"requests.exceptions.ConnectionError: HTTPConnectionPool(host='s464953-loadbalancer-905735492.us-east-1.elb.amazonaws.com', port=8080): Max retries exceeded with url: /factors/12578151695852263809562421383 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fdbeaf438b0>: Failed to establish a new connection: [Errno 110] Connection timed out'))\n",
"Exception in thread Thread-6:\n",
"Traceback (most recent call last):\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 174, in _new_conn\n",
" conn = connection.create_connection(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py\", line 95, in create_connection\n",
" raise err\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py\", line 85, in create_connection\n",
" sock.connect(sa)\n",
"TimeoutError: [Errno 110] Connection timed out\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 703, in urlopen\n",
" httplib_response = self._make_request(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 398, in _make_request\n",
" conn.request(method, url, **httplib_request_kw)\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 239, in request\n",
" super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1259, in request\n",
" self._send_request(method, url, body, headers, encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1305, in _send_request\n",
" self.endheaders(body, encode_chunked=encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1254, in endheaders\n",
" self._send_output(message_body, encode_chunked=encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1014, in _send_output\n",
" self.send(msg)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 954, in send\n",
" self.connect()\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 205, in connect\n",
" conn = self._new_conn()\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 186, in _new_conn\n",
" raise NewConnectionError(\n",
"urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7fdbeaf5d550>: Failed to establish a new connection: [Errno 110] Connection timed out\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/adapters.py\", line 667, in send\n",
" resp = conn.urlopen(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 787, in urlopen\n",
" retries = retries.increment(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/retry.py\", line 592, in increment\n",
" raise MaxRetryError(_pool, url, error or ResponseError(cause))\n",
"urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='s464953-loadbalancer-905735492.us-east-1.elb.amazonaws.com', port=8080): Max retries exceeded with url: /factors/10755062748042505837733273510040277 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fdbeaf5d550>: Failed to establish a new connection: [Errno 110] Connection timed out'))\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/usr/lib/python3.9/threading.py\", line 954, in _bootstrap_inner\n",
" self.run()\n",
" File \"/usr/lib/python3.9/threading.py\", line 892, in run\n",
" self._target(*self._args, **self._kwargs)\n",
" File \"/tmp/ipykernel_34689/934420013.py\", line 103, in thread_function\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/api.py\", line 73, in get\n",
" return request(\"get\", url, params=params, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/api.py\", line 59, in request\n",
" return session.request(method=method, url=url, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/sessions.py\", line 589, in request\n",
" resp = self.send(prep, **send_kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/sessions.py\", line 703, in send\n",
" r = adapter.send(request, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/adapters.py\", line 700, in send\n",
" raise ConnectionError(e, request=request)\n",
"requests.exceptions.ConnectionError: HTTPConnectionPool(host='s464953-loadbalancer-905735492.us-east-1.elb.amazonaws.com', port=8080): Max retries exceeded with url: /factors/10755062748042505837733273510040277 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fdbeaf5d550>: Failed to establish a new connection: [Errno 110] Connection timed out'))\n",
"Exception in thread Thread-7:\n",
"Traceback (most recent call last):\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 174, in _new_conn\n",
" conn = connection.create_connection(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py\", line 95, in create_connection\n",
" raise err\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py\", line 85, in create_connection\n",
" sock.connect(sa)\n",
"TimeoutError: [Errno 110] Connection timed out\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 703, in urlopen\n",
" httplib_response = self._make_request(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 398, in _make_request\n",
" conn.request(method, url, **httplib_request_kw)\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 239, in request\n",
" super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1259, in request\n",
" self._send_request(method, url, body, headers, encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1305, in _send_request\n",
" self.endheaders(body, encode_chunked=encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1254, in endheaders\n",
" self._send_output(message_body, encode_chunked=encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1014, in _send_output\n",
" self.send(msg)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 954, in send\n",
" self.connect()\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 205, in connect\n",
" conn = self._new_conn()\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 186, in _new_conn\n",
" raise NewConnectionError(\n",
"urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7fdbeaf6b190>: Failed to establish a new connection: [Errno 110] Connection timed out\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/adapters.py\", line 667, in send\n",
" resp = conn.urlopen(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 787, in urlopen\n",
" retries = retries.increment(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/retry.py\", line 592, in increment\n",
" raise MaxRetryError(_pool, url, error or ResponseError(cause))\n",
"urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='s464953-loadbalancer-905735492.us-east-1.elb.amazonaws.com', port=8080): Max retries exceeded with url: /factors/21712524942360319596925132967051749 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fdbeaf6b190>: Failed to establish a new connection: [Errno 110] Connection timed out'))\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/usr/lib/python3.9/threading.py\", line 954, in _bootstrap_inner\n",
" self.run()\n",
" File \"/usr/lib/python3.9/threading.py\", line 892, in run\n",
" self._target(*self._args, **self._kwargs)\n",
" File \"/tmp/ipykernel_34689/934420013.py\", line 103, in thread_function\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/api.py\", line 73, in get\n",
" return request(\"get\", url, params=params, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/api.py\", line 59, in request\n",
" return session.request(method=method, url=url, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/sessions.py\", line 589, in request\n",
" resp = self.send(prep, **send_kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/sessions.py\", line 703, in send\n",
" r = adapter.send(request, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/adapters.py\", line 700, in send\n",
" raise ConnectionError(e, request=request)\n",
"requests.exceptions.ConnectionError: HTTPConnectionPool(host='s464953-loadbalancer-905735492.us-east-1.elb.amazonaws.com', port=8080): Max retries exceeded with url: /factors/21712524942360319596925132967051749 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fdbeaf6b190>: Failed to establish a new connection: [Errno 110] Connection timed out'))\n",
"Exception in thread Thread-8:\n",
"Traceback (most recent call last):\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 174, in _new_conn\n",
" conn = connection.create_connection(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py\", line 95, in create_connection\n",
" raise err\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py\", line 85, in create_connection\n",
" sock.connect(sa)\n",
"TimeoutError: [Errno 110] Connection timed out\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 703, in urlopen\n",
" httplib_response = self._make_request(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 398, in _make_request\n",
" conn.request(method, url, **httplib_request_kw)\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 239, in request\n",
" super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1259, in request\n",
" self._send_request(method, url, body, headers, encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1305, in _send_request\n",
" self.endheaders(body, encode_chunked=encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1254, in endheaders\n",
" self._send_output(message_body, encode_chunked=encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1014, in _send_output\n",
" self.send(msg)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 954, in send\n",
" self.connect()\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 205, in connect\n",
" conn = self._new_conn()\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 186, in _new_conn\n",
" raise NewConnectionError(\n",
"urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7fdbeaf6bc40>: Failed to establish a new connection: [Errno 110] Connection timed out\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/adapters.py\", line 667, in send\n",
" resp = conn.urlopen(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 787, in urlopen\n",
" retries = retries.increment(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/retry.py\", line 592, in increment\n",
" raise MaxRetryError(_pool, url, error or ResponseError(cause))\n",
"urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='s464953-loadbalancer-905735492.us-east-1.elb.amazonaws.com', port=8080): Max retries exceeded with url: /factors/4987140891830491993798117809920291 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fdbeaf6bc40>: Failed to establish a new connection: [Errno 110] Connection timed out'))\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/usr/lib/python3.9/threading.py\", line 954, in _bootstrap_inner\n",
" self.run()\n",
" File \"/usr/lib/python3.9/threading.py\", line 892, in run\n",
" self._target(*self._args, **self._kwargs)\n",
" File \"/tmp/ipykernel_34689/934420013.py\", line 103, in thread_function\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/api.py\", line 73, in get\n",
" return request(\"get\", url, params=params, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/api.py\", line 59, in request\n",
" return session.request(method=method, url=url, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/sessions.py\", line 589, in request\n",
" resp = self.send(prep, **send_kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/sessions.py\", line 703, in send\n",
" r = adapter.send(request, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/adapters.py\", line 700, in send\n",
" raise ConnectionError(e, request=request)\n",
"requests.exceptions.ConnectionError: HTTPConnectionPool(host='s464953-loadbalancer-905735492.us-east-1.elb.amazonaws.com', port=8080): Max retries exceeded with url: /factors/4987140891830491993798117809920291 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fdbeaf6bc40>: Failed to establish a new connection: [Errno 110] Connection timed out'))\n",
"Exception in thread Thread-9:\n",
"Traceback (most recent call last):\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 174, in _new_conn\n",
" conn = connection.create_connection(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py\", line 95, in create_connection\n",
" raise err\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/connection.py\", line 85, in create_connection\n",
" sock.connect(sa)\n",
"TimeoutError: [Errno 110] Connection timed out\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 703, in urlopen\n",
" httplib_response = self._make_request(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 398, in _make_request\n",
" conn.request(method, url, **httplib_request_kw)\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 239, in request\n",
" super(HTTPConnection, self).request(method, url, body=body, headers=headers)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1259, in request\n",
" self._send_request(method, url, body, headers, encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1305, in _send_request\n",
" self.endheaders(body, encode_chunked=encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1254, in endheaders\n",
" self._send_output(message_body, encode_chunked=encode_chunked)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 1014, in _send_output\n",
" self.send(msg)\n",
" File \"/usr/lib/python3.9/http/client.py\", line 954, in send\n",
" self.connect()\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 205, in connect\n",
" conn = self._new_conn()\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connection.py\", line 186, in _new_conn\n",
" raise NewConnectionError(\n",
"urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7fdbeaf7c700>: Failed to establish a new connection: [Errno 110] Connection timed out\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/adapters.py\", line 667, in send\n",
" resp = conn.urlopen(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/connectionpool.py\", line 787, in urlopen\n",
" retries = retries.increment(\n",
" File \"/usr/local/lib/python3.9/dist-packages/urllib3/util/retry.py\", line 592, in increment\n",
" raise MaxRetryError(_pool, url, error or ResponseError(cause))\n",
"urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='s464953-loadbalancer-905735492.us-east-1.elb.amazonaws.com', port=8080): Max retries exceeded with url: /factors/5164540761011900013294631892241683 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fdbeaf7c700>: Failed to establish a new connection: [Errno 110] Connection timed out'))\n",
"\n",
"During handling of the above exception, another exception occurred:\n",
"\n",
"Traceback (most recent call last):\n",
" File \"/usr/lib/python3.9/threading.py\", line 954, in _bootstrap_inner\n",
" self.run()\n",
" File \"/usr/lib/python3.9/threading.py\", line 892, in run\n",
" self._target(*self._args, **self._kwargs)\n",
" File \"/tmp/ipykernel_34689/934420013.py\", line 103, in thread_function\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/api.py\", line 73, in get\n",
" return request(\"get\", url, params=params, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/api.py\", line 59, in request\n",
" return session.request(method=method, url=url, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/sessions.py\", line 589, in request\n",
" resp = self.send(prep, **send_kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/sessions.py\", line 703, in send\n",
" r = adapter.send(request, **kwargs)\n",
" File \"/home/students/s464953/.local/lib/python3.9/site-packages/requests/adapters.py\", line 700, in send\n",
" raise ConnectionError(e, request=request)\n",
"requests.exceptions.ConnectionError: HTTPConnectionPool(host='s464953-loadbalancer-905735492.us-east-1.elb.amazonaws.com', port=8080): Max retries exceeded with url: /factors/5164540761011900013294631892241683 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fdbeaf7c700>: Failed to establish a new connection: [Errno 110] Connection timed out'))\n"
]
}
],
"source": [
"import requests\n",
"import random\n",
"import math\n",
"import time\n",
"import threading\n",
"import logging\n",
"logging.getLogger().setLevel(logging.INFO)\n",
"\n",
"\n",
"API_URL=\"http://464953-alb-399012912.us-east-1.elb.amazonaws.com:8080/\"\n",
"\n",
"\n",
"UNIT = 30.0 # secs\n",
"\n",
"# Pre generated primes\n",
"first_primes_list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29,\n",
" 31, 37, 41, 43, 47, 53, 59, 61, 67,\n",
" 71, 73, 79, 83, 89, 97, 101, 103,\n",
" 107, 109, 113, 127, 131, 137, 139,\n",
" 149, 151, 157, 163, 167, 173, 179,\n",
" 181, 191, 193, 197, 199, 211, 223,\n",
" 227, 229, 233, 239, 241, 251, 257,\n",
" 263, 269, 271, 277, 281, 283, 293,\n",
" 307, 311, 313, 317, 331, 337, 347, 349]\n",
"\n",
"\n",
"def nBitRandom(n):\n",
" return random.randrange(2**(n-1)+1, 2**n - 1)\n",
" \n",
"def getLowLevelPrime(n):\n",
" '''Generate a prime candidate divisible\n",
" by first primes'''\n",
" while True:\n",
" # Obtain a random number\n",
" pc = nBitRandom(n)\n",
" \n",
" # Test divisibility by pre-generated\n",
" # primes\n",
" for divisor in first_primes_list:\n",
" if pc % divisor == 0 and divisor**2 <= pc:\n",
" break\n",
" else: return pc\n",
"\n",
"def isMillerRabinPassed(mrc):\n",
" '''Run 20 iterations of Rabin Miller Primality test'''\n",
" maxDivisionsByTwo = 0\n",
" ec = mrc-1\n",
" while ec % 2 == 0:\n",
" ec >>= 1\n",
" maxDivisionsByTwo += 1\n",
" assert(2**maxDivisionsByTwo * ec == mrc-1)\n",
" \n",
" def trialComposite(round_tester):\n",
" if pow(round_tester, ec, mrc) == 1:\n",
" return False\n",
" for i in range(maxDivisionsByTwo):\n",
" if pow(round_tester, 2**i * ec, mrc) == mrc-1:\n",
" return False\n",
" return True\n",
" \n",
" # Set number of trials here\n",
" numberOfRabinTrials = 20\n",
" for i in range(numberOfRabinTrials):\n",
" round_tester = random.randrange(2, mrc)\n",
" if trialComposite(round_tester):\n",
" return False\n",
" return True\n",
" \n",
"def random_large_prime(bits):\n",
" while True:\n",
" prime_candidate = getLowLevelPrime(bits)\n",
" if not isMillerRabinPassed(prime_candidate):\n",
" continue\n",
" else:\n",
" return prime_candidate\n",
"\n",
"def thread_function(i, fast, timeout):\n",
" start = time.time()\n",
"\n",
" c = 5 # bits: 20: 200ms; 21: 350ms; 22: 700ms 23: 1.5s; 25: 6s; 26: 10s; 27: 24s\n",
" bits = 19 if fast else 23\n",
" last_report = time.time()\n",
" processing_time = 0.0\n",
" reqs = 0\n",
" while True:\n",
" iter_start = time.time()\n",
" if iter_start - start > timeout:\n",
" logging.info(\"Thread: %d\\treqs: %d\\tmean time: %.3fs\\t%s\"%(i, reqs, processing_time/reqs if reqs>0 else 0.0, \"fast\\t\" if fast else \"\"))\n",
" results[i][iter_start] = processing_time/reqs if reqs>0 else 0.0\n",
" return\n",
" if iter_start - last_report > UNIT/2:\n",
" if len(results[i])%2 == 0:\n",
" logging.info(\"Thread: %d\\treqs: %d\\tmean time: %.3fs\\t%s\"%(i, reqs, processing_time/reqs if reqs>0 else 0.0, \"fast\\t\" if fast else \"\"))\n",
" results[i][iter_start] = processing_time/reqs if reqs>0 else 0.0\n",
" processing_time = 0.0\n",
" reqs = 0\n",
" last_report=iter_start\n",
"\n",
" factors = [random_large_prime(bits) for i in range(c)]\n",
" factors.sort()\n",
" n=math.prod(factors)\n",
"\n",
" r = requests.get(API_URL+'/factors/%d'%(n))\n",
" if r.status_code != 200:\n",
" logging.error(\"wrong status code from webservice\")\n",
" else:\n",
" result = r.json()\n",
" if result != factors:\n",
" logging.error(\"Wrong factors\")\n",
"\n",
" processing_time+=time.time() - iter_start\n",
" reqs+=1\n",
" time.sleep(0.5)\n",
"\n",
"START = time.time()\n",
"slow_threads = 4\n",
"\n",
"results = [ {} for i in range(slow_threads+1)]\n",
"\n",
"t0 = threading.Thread(target=thread_function, args=(0, True, (5 + slow_threads*3) * UNIT))\n",
"t0.start()\n",
"time.sleep(2 * UNIT)\n",
"for i in range(slow_threads):\n",
" t = threading.Thread(target=thread_function, args=(i+1, False, (slow_threads-i) * 3 * UNIT))\n",
" t.start()\n",
" time.sleep(2 * UNIT)\n",
"\n",
"t0.join()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3cd8887b-9fa2-44db-9d05-26b23b9e2609",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import scipy.stats as stats\n",
"mu = 0\n",
"std = 1\n",
"for i, result in enumerate(results):\n",
" x = [(x - START)/UNIT for x in result.keys()]\n",
" y = result.values()\n",
" plt.plot(x, y, label=\"t%d\"%(i,))\n",
"\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "619bfa73-05e1-4a10-9853-1e132a0377bf",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Defaulting to user installation because normal site-packages is not writeable\n",
"Collecting python-dotenv\n",
" Downloading python_dotenv-1.0.1-py3-none-any.whl.metadata (23 kB)\n",
"Downloading python_dotenv-1.0.1-py3-none-any.whl (19 kB)\n",
"Installing collected packages: python-dotenv\n",
"\u001b[33m WARNING: The script dotenv is installed in '/home/students/s464953/.local/bin' which is not on PATH.\n",
" Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\u001b[0m\u001b[33m\n",
"\u001b[0mSuccessfully installed python-dotenv-1.0.1\n",
"\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.3.1\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3 -m pip install --upgrade pip\u001b[0m\n"
]
}
],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.2"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

File diff suppressed because one or more lines are too long

View File

@ -1,5 +0,0 @@
FROM ubuntu
COPY ./webservice /
RUN chmod +x ./webservice
EXPOSE 80:8080/tcp
CMD ./webservice

230
autoscaling3.py Normal file
View File

@ -0,0 +1,230 @@
import boto3
import base64
from USER_DATA import user_data
import json
import time
import random
import string
PREFIX = "s464953"
AMI_ID = "ami-0b5eea76982371e91"
INSTANCE_TYPE = "t2.micro"
SECURITY_GROUP_NAME = f"{PREFIX}-sg"
REGION = "us-east-1"
with open("aws_credentials.json", 'r') as file:
creds = json.load(file)
client_ec2 = boto3.client('ec2', region_name=REGION,
aws_access_key_id=creds["aws_access_key_id"],
aws_secret_access_key=creds["aws_secret_access_key"],
aws_session_token=creds["aws_session_token"])
client_elb = boto3.client('elbv2', region_name=REGION,
aws_access_key_id=creds["aws_access_key_id"],
aws_secret_access_key=creds["aws_secret_access_key"],
aws_session_token=creds["aws_session_token"])
autoscaling_client = boto3.client('autoscaling', region_name=REGION,
aws_access_key_id=creds["aws_access_key_id"],
aws_secret_access_key=creds["aws_secret_access_key"],
aws_session_token=creds["aws_session_token"])
cloudwatch_client = boto3.client('cloudwatch', region_name=REGION,
aws_access_key_id=creds["aws_access_key_id"],
aws_secret_access_key=creds["aws_secret_access_key"],
aws_session_token=creds["aws_session_token"])
def create_vpc():
vpc_id = client_ec2.create_vpc(CidrBlock='10.0.0.0/16')['Vpc']['VpcId']
client_ec2.modify_vpc_attribute(VpcId=vpc_id, EnableDnsSupport={'Value': True})
client_ec2.modify_vpc_attribute(VpcId=vpc_id, EnableDnsHostnames={'Value': True})
return vpc_id
def create_subnet(vpc_id, cidr, az):
subnet_id = client_ec2.create_subnet(VpcId=vpc_id, CidrBlock=cidr, AvailabilityZone=az)['Subnet']['SubnetId']
client_ec2.modify_subnet_attribute(SubnetId=subnet_id, MapPublicIpOnLaunch={'Value': True})
return subnet_id
def create_igw(vpc_id):
igw_id = client_ec2.create_internet_gateway()['InternetGateway']['InternetGatewayId']
client_ec2.attach_internet_gateway(InternetGatewayId=igw_id, VpcId=vpc_id)
return igw_id
def create_route_table(vpc_id, subnet_id, igw_id):
rt_id = client_ec2.create_route_table(VpcId=vpc_id)['RouteTable']['RouteTableId']
client_ec2.create_route(
RouteTableId=rt_id,
DestinationCidrBlock='0.0.0.0/0',
GatewayId=igw_id
)
client_ec2.associate_route_table(RouteTableId=rt_id, SubnetId=subnet_id)
return rt_id
def create_key_pair(name):
random_suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))
unique_name = f"{name}-{random_suffix}"
key_material = client_ec2.create_key_pair(KeyName=unique_name)['KeyMaterial']
with open(f"{unique_name}.pem", 'w') as file:
file.write(key_material)
return unique_name
def create_sg(vpc_id):
sg_id = client_ec2.create_security_group(GroupName=SECURITY_GROUP_NAME, Description="Security group", VpcId=vpc_id)['GroupId']
client_ec2.authorize_security_group_ingress(
GroupId=sg_id,
IpPermissions=[
{
'IpProtocol': 'tcp',
'FromPort': 8080,
'ToPort': 8080,
'IpRanges': [
{
'CidrIp': '0.0.0.0/0'
}
]
}
])
return sg_id
def create_launch_template(key_name, sg_id):
lt_id = client_ec2.create_launch_template(
LaunchTemplateName=f"{PREFIX}-lt",
LaunchTemplateData=
{
'ImageId': AMI_ID,
'InstanceType': INSTANCE_TYPE,
'SecurityGroupIds': [sg_id],
'KeyName': key_name,
'UserData': base64.b64encode(user_data.encode('utf-8')).decode('utf-8')
}
)['LaunchTemplate']['LaunchTemplateId']
return lt_id
def create_target_group(vpc_id):
tg_arn = client_elb.create_target_group(
Name=f"{PREFIX}-tg",
Protocol='HTTP',
Port=8080,
VpcId=vpc_id,
TargetType='instance',
IpAddressType='ipv4',
HealthCheckProtocol='HTTP',
HealthCheckPort='8080',
HealthCheckPath='/factors/6',
HealthCheckIntervalSeconds=30,
HealthCheckTimeoutSeconds=5,
HealthyThresholdCount=3,
UnhealthyThresholdCount=3
)['TargetGroups'][0]['TargetGroupArn']
return tg_arn
def create_lb(subnets, sg_id):
lb_arn = client_elb.create_load_balancer(
Name=f"{PREFIX}-lb",
Subnets=subnets,
SecurityGroups=[sg_id],
Scheme='internet-facing',
Type='application',
IpAddressType='ipv4'
)['LoadBalancers'][0]['LoadBalancerArn']
return lb_arn
def create_listener(lb_arn, tg_arn):
listener_arn = client_elb.create_listener(
LoadBalancerArn=lb_arn,
Protocol='HTTP',
Port=8080,
DefaultActions=[
{
'Type': 'forward',
'TargetGroupArn': tg_arn
}
]
)['Listeners'][0]['ListenerArn']
return listener_arn
def create_auto_scaling_group(launch_template_id, target_group_arn, subnet_id_1, subnet_id_2):
autoscaling_client.create_auto_scaling_group(
AutoScalingGroupName=f"{PREFIX}-asg",
LaunchTemplate={
'LaunchTemplateId': launch_template_id,
'Version': '$Latest'
},
MinSize=2,
MaxSize=5,
DesiredCapacity=2,
TargetGroupARNs=[target_group_arn],
AvailabilityZones=[f"{REGION}a", f"{REGION}b"],
HealthCheckType='EC2',
HealthCheckGracePeriod=90,
VPCZoneIdentifier=f"{subnet_id_1},{subnet_id_2}",
Tags=[
{
'Key': 'Name',
'Value': f"{PREFIX}-asg",
'PropagateAtLaunch': True
}
]
)
describe_response = autoscaling_client.describe_auto_scaling_groups(
AutoScalingGroupNames=[f"{PREFIX}-asg"]
)
asg_arn = describe_response['AutoScalingGroups'][0]['AutoScalingGroupARN']
return asg_arn
def put_scaling_policy():
policy = autoscaling_client.put_scaling_policy(
AutoScalingGroupName=f"{PREFIX}-asg",
PolicyName=f"{PREFIX}-scale-policy-cpu",
PolicyType='SimpleScaling',
AdjustmentType='ChangeInCapacity',
ScalingAdjustment=1,
Cooldown=180
)
return policy['PolicyARN']
def create_cloudwatch_alarm(sp_arn):
cloudwatch_client.put_metric_alarm(
AlarmName=f"{PREFIX}-cpu-utilization-alarm",
ComparisonOperator='GreaterThanOrEqualToThreshold',
EvaluationPeriods=1,
MetricName='CPUUtilization',
Namespace='AWS/EC2',
Period=60,
Statistic='Average',
Threshold=30.0,
ActionsEnabled=True,
AlarmActions=[sp_arn],
AlarmDescription='Alarm to scale out/in based on CPU utilization',
Dimensions=[{
'Name': 'AutoScalingGroupName',
'Value': f"{PREFIX}-asg"
}]
)
def main():
vpc = create_vpc()
subnet = create_subnet(vpc, '10.0.1.0/24', f"{REGION}a")
subnet2 = create_subnet(vpc, '10.0.2.0/24', f"{REGION}b")
igw = create_igw(vpc)
create_route_table(vpc, subnet, igw)
key = create_key_pair(f"{PREFIX}-key")
sg = create_sg(vpc)
lt = create_launch_template(key, sg)
tg = create_target_group(vpc)
lb = create_lb([subnet, subnet2], sg)
listener = create_listener(lb, tg)
asg_arn = create_auto_scaling_group(lt, tg, subnet, subnet2)
sp = put_scaling_policy()
create_cloudwatch_alarm(sp)
dns = client_elb.describe_load_balancers(LoadBalancerArns=[lb])['LoadBalancers'][0]['DNSName']
print(dns)
if __name__ == "__main__":
main()

72
autoscaling_runner.ipynb Normal file
View File

@ -0,0 +1,72 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 6,
"id": "dfd09c32-c2f2-431d-9bef-25616b4195e3",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Defaulting to user installation because normal site-packages is not writeable\n",
"Requirement already satisfied: boto3 in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 1)) (1.35.81)\n",
"Requirement already satisfied: python-dotenv in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 2)) (1.0.1)\n",
"Requirement already satisfied: paramiko in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 3)) (3.5.0)\n",
"Requirement already satisfied: requests in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 4)) (2.32.3)\n",
"Requirement already satisfied: botocore<1.36.0,>=1.35.81 in /home/students/s464953/.local/lib/python3.9/site-packages (from boto3->-r requirements.txt (line 1)) (1.35.81)\n",
"Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /home/students/s464953/.local/lib/python3.9/site-packages (from boto3->-r requirements.txt (line 1)) (1.0.1)\n",
"Requirement already satisfied: s3transfer<0.11.0,>=0.10.0 in /home/students/s464953/.local/lib/python3.9/site-packages (from boto3->-r requirements.txt (line 1)) (0.10.4)\n",
"Requirement already satisfied: bcrypt>=3.2 in /home/students/s464953/.local/lib/python3.9/site-packages (from paramiko->-r requirements.txt (line 3)) (4.2.1)\n",
"Requirement already satisfied: cryptography>=3.3 in /usr/local/lib/python3.9/dist-packages (from paramiko->-r requirements.txt (line 3)) (38.0.1)\n",
"Requirement already satisfied: pynacl>=1.5 in /home/students/s464953/.local/lib/python3.9/site-packages (from paramiko->-r requirements.txt (line 3)) (1.5.0)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (2.1.1)\n",
"Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (3.4)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (1.26.12)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (2022.9.14)\n",
"Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /usr/local/lib/python3.9/dist-packages (from botocore<1.36.0,>=1.35.81->boto3->-r requirements.txt (line 1)) (2.8.2)\n",
"Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.9/dist-packages (from cryptography>=3.3->paramiko->-r requirements.txt (line 3)) (1.15.1)\n",
"Requirement already satisfied: pycparser in /usr/local/lib/python3.9/dist-packages (from cffi>=1.12->cryptography>=3.3->paramiko->-r requirements.txt (line 3)) (2.21)\n",
"Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.36.0,>=1.35.81->boto3->-r requirements.txt (line 1)) (1.16.0)\n",
"\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.3.1\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3 -m pip install --upgrade pip\u001b[0m\n",
"Auto Scaling Group created with ARN: arn:aws:autoscaling:us-east-1:304199018171:autoScalingGroup:91d82aae-1256-44d9-ac62-f9db2492c65f:autoScalingGroupName/s464953-asg\n",
"CPU Utilization alarm created\n",
"s464953-lb-500026741.us-east-1.elb.amazonaws.com\n"
]
}
],
"source": [
"#!/bin/bash\n",
"chmod +x autoscaling3.py\n",
"pip3 install -r requirements.txt\n",
"python3 autoscaling3.py\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "b0e3f3c0-47c6-4676-9ada-72520abc8481",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Bash",
"language": "bash",
"name": "bash"
},
"language_info": {
"codemirror_mode": "shell",
"file_extension": ".sh",
"mimetype": "text/x-sh",
"name": "bash"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

5
aws_credentials.json Normal file
View File

@ -0,0 +1,5 @@
{
"aws_access_key_id": "ASIAUNU5MU253EUJQDYW",
"aws_secret_access_key": "yOppJ2iHk4GHYB8KJrcwjiTlxjP61ztIgh4hOJC3",
"aws_session_token": "IQoJb3JpZ2luX2VjEPT//////////wEaCXVzLXdlc3QtMiJHMEUCIQCneq0XwMGXcL+NCQ3KRoe+iV9B5O1/M2VtJhHnVqofRwIgQg4K4ZJYjyw2aMhardcyNGDtmLiJhO6G+POVcuNDBPwqtgII3f//////////ARAAGgwzMDQxOTkwMTgxNzEiDGoylj97jXim8+ZvZSqKAiEwC2U67MbOdAVYSgPmqJXlSk2JeHAhFXmTatMVWEaqxX8iNFH//hQEwueEc8IFkYv71IBygPZPtpG8zN4RPR8xfKwUuqf51wQr0lQ0ii1K2V/7E9+lhGhe0NVhnRtRQMZd2e0I8g575g+SSko0fYPr39PcMA8V+q2pJPwCTNzOn1dzIdQRViK/y1mnZawde8OgUDNmfDkGScassboAwuT9sx2JewZsHY0vADaxZlvj5kKmEzJGHsefQ0SO5V8s0TYmQzoCsaFM4AkJ0j2w5YpeVjfnZNG9au3Rg7USYnjIJqHG1+B9y82JRQgrRCuLfyjVNWhhWv59vNev41zaK25bXzEBKyyJQHVBMNeskLwGOp0B9mey2YLCFsYP4GpCIVKACDOq1B4Pbu7Cv8fyeNlaBnetajBxutdI7rq2fkGFnUjcu2hzsyA4pp6f8u2QgeO8ZHk/tMYabvuUv6aNlDWY/0L+a2q07i1s4owrlclW7jAqgFRmPiG+m95Pce6NlcQ0ff2WRxGdBy0scnvx6knAgJAYyLBiWtuEKxdovVA4Ik/V1gzGiDYbu3semB260g=="
}

127
lb2.py Normal file
View File

@ -0,0 +1,127 @@
import boto3
import base64
from USER_DATA import user_data
import json
import time
import random
import string
PREFIX = "s464953"
AMI_ID = "ami-0b5eea76982371e91"
INSTANCE_TYPE = "t2.micro"
SECURITY_GROUP_NAME = f"{PREFIX}-sg"
REGION = "us-east-1"
with open("aws_credentials.json", 'r') as file:
creds = json.load(file)
client_ec2 = boto3.client('ec2', region_name=REGION,
aws_access_key_id=creds["aws_access_key_id"],
aws_secret_access_key=creds["aws_secret_access_key"],
aws_session_token=creds["aws_session_token"])
client_elb = boto3.client('elbv2', region_name=REGION,
aws_access_key_id=creds["aws_access_key_id"],
aws_secret_access_key=creds["aws_secret_access_key"],
aws_session_token=creds["aws_session_token"])
def create_vpc():
vpc_id = client_ec2.create_vpc(CidrBlock='10.0.0.0/16')['Vpc']['VpcId']
client_ec2.modify_vpc_attribute(VpcId=vpc_id, EnableDnsSupport={'Value': True})
client_ec2.modify_vpc_attribute(VpcId=vpc_id, EnableDnsHostnames={'Value': True})
return vpc_id
def create_subnet(vpc_id, cidr, az):
subnet_id = client_ec2.create_subnet(VpcId=vpc_id, CidrBlock=cidr, AvailabilityZone=az)['Subnet']['SubnetId']
client_ec2.modify_subnet_attribute(SubnetId=subnet_id, MapPublicIpOnLaunch={'Value': True})
return subnet_id
def create_igw(vpc_id):
igw_id = client_ec2.create_internet_gateway()['InternetGateway']['InternetGatewayId']
client_ec2.attach_internet_gateway(InternetGatewayId=igw_id, VpcId=vpc_id)
return igw_id
def create_route_table(vpc_id, subnet_id, igw_id):
rt_id = client_ec2.create_route_table(VpcId=vpc_id)['RouteTable']['RouteTableId']
client_ec2.create_route(RouteTableId=rt_id, DestinationCidrBlock='0.0.0.0/0', GatewayId=igw_id)
client_ec2.associate_route_table(RouteTableId=rt_id, SubnetId=subnet_id)
return rt_id
def create_key_pair(name):
random_suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))
unique_name = f"{name}-{random_suffix}"
key_material = client_ec2.create_key_pair(KeyName=unique_name)['KeyMaterial']
with open(f"{unique_name}.pem", 'w') as file:
file.write(key_material)
return unique_name
def create_sg(vpc_id):
sg_id = client_ec2.create_security_group(GroupName=SECURITY_GROUP_NAME, Description="Security group", VpcId=vpc_id)['GroupId']
client_ec2.authorize_security_group_ingress(GroupId=sg_id, IpPermissions=[
{'IpProtocol': 'tcp', 'FromPort': 22, 'ToPort': 22, 'IpRanges': [{'CidrIp': '0.0.0.0/0'}]},
{'IpProtocol': 'tcp', 'FromPort': 8080, 'ToPort': 8080, 'IpRanges': [{'CidrIp': '0.0.0.0/0'}]}
])
return sg_id
def create_launch_template(key_name, sg_id):
lt_id = client_ec2.create_launch_template(
LaunchTemplateName=f"{PREFIX}-lt", LaunchTemplateData={
'ImageId': AMI_ID, 'InstanceType': INSTANCE_TYPE,
'SecurityGroupIds': [sg_id], 'KeyName': key_name,
'UserData': base64.b64encode(user_data.encode('utf-8')).decode('utf-8')
})['LaunchTemplate']['LaunchTemplateId']
return lt_id
def create_target_group(vpc_id):
tg_arn = client_elb.create_target_group(
Name=f"{PREFIX}-tg", Protocol='HTTP', Port=8080, VpcId=vpc_id, TargetType='instance',
HealthCheckProtocol='HTTP', HealthCheckPort='8080', HealthCheckPath='/factors/6'
)['TargetGroups'][0]['TargetGroupArn']
return tg_arn
def create_lb(subnets, sg_id):
lb_arn = client_elb.create_load_balancer(
Name=f"{PREFIX}-lb", Subnets=subnets, SecurityGroups=[sg_id], Scheme='internet-facing',
Type='application', IpAddressType='ipv4'
)['LoadBalancers'][0]['LoadBalancerArn']
return lb_arn
def create_listener(lb_arn, tg_arn):
listener_arn = client_elb.create_listener(
LoadBalancerArn=lb_arn, Protocol='HTTP', Port=8080,
DefaultActions=[{'Type': 'forward', 'TargetGroupArn': tg_arn}]
)['Listeners'][0]['ListenerArn']
return listener_arn
def create_instances(lt_id, subnet_id):
ids = [i['InstanceId'] for i in client_ec2.run_instances(
LaunchTemplate={'LaunchTemplateId': lt_id, 'Version': '$Latest'},
MinCount=2, MaxCount=2, SubnetId=subnet_id)['Instances']]
while True:
states = [r['Instances'][0]['State']['Name'] for r in client_ec2.describe_instances(InstanceIds=ids)['Reservations']]
if all(s == 'running' for s in states):
break
time.sleep(10)
return ids
def main():
vpc = create_vpc()
subnet1 = create_subnet(vpc, '10.0.1.0/24', 'us-east-1a')
subnet2 = create_subnet(vpc, '10.0.2.0/24', 'us-east-1b')
igw = create_igw(vpc)
create_route_table(vpc, subnet1, igw)
key = create_key_pair(f"{PREFIX}-key")
sg = create_sg(vpc)
lt = create_launch_template(key, sg)
tg = create_target_group(vpc)
lb = create_lb([subnet1, subnet2], sg)
listener = create_listener(lb, tg)
instances = create_instances(lt, subnet1)
client_elb.register_targets(TargetGroupArn=tg, Targets=[{'Id': i} for i in instances])
dns = client_elb.describe_load_balancers(LoadBalancerArns=[lb])['LoadBalancers'][0]['DNSName']
print(dns)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,70 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "6781ce95-c6ad-42cd-bcb5-ac1cda3a56cc",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Defaulting to user installation because normal site-packages is not writeable\n",
"Requirement already satisfied: boto3 in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 1)) (1.35.81)\n",
"Requirement already satisfied: python-dotenv in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 2)) (1.0.1)\n",
"Requirement already satisfied: paramiko in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 3)) (3.5.0)\n",
"Requirement already satisfied: requests in /home/students/s464953/.local/lib/python3.9/site-packages (from -r requirements.txt (line 4)) (2.32.3)\n",
"Requirement already satisfied: botocore<1.36.0,>=1.35.81 in /home/students/s464953/.local/lib/python3.9/site-packages (from boto3->-r requirements.txt (line 1)) (1.35.81)\n",
"Requirement already satisfied: jmespath<2.0.0,>=0.7.1 in /home/students/s464953/.local/lib/python3.9/site-packages (from boto3->-r requirements.txt (line 1)) (1.0.1)\n",
"Requirement already satisfied: s3transfer<0.11.0,>=0.10.0 in /home/students/s464953/.local/lib/python3.9/site-packages (from boto3->-r requirements.txt (line 1)) (0.10.4)\n",
"Requirement already satisfied: bcrypt>=3.2 in /home/students/s464953/.local/lib/python3.9/site-packages (from paramiko->-r requirements.txt (line 3)) (4.2.1)\n",
"Requirement already satisfied: cryptography>=3.3 in /usr/local/lib/python3.9/dist-packages (from paramiko->-r requirements.txt (line 3)) (38.0.1)\n",
"Requirement already satisfied: pynacl>=1.5 in /home/students/s464953/.local/lib/python3.9/site-packages (from paramiko->-r requirements.txt (line 3)) (1.5.0)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (2.1.1)\n",
"Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (3.4)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (1.26.12)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.9/dist-packages (from requests->-r requirements.txt (line 4)) (2022.9.14)\n",
"Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in /usr/local/lib/python3.9/dist-packages (from botocore<1.36.0,>=1.35.81->boto3->-r requirements.txt (line 1)) (2.8.2)\n",
"Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.9/dist-packages (from cryptography>=3.3->paramiko->-r requirements.txt (line 3)) (1.15.1)\n",
"Requirement already satisfied: pycparser in /usr/local/lib/python3.9/dist-packages (from cffi>=1.12->cryptography>=3.3->paramiko->-r requirements.txt (line 3)) (2.21)\n",
"Requirement already satisfied: six>=1.5 in /usr/lib/python3/dist-packages (from python-dateutil<3.0.0,>=2.1->botocore<1.36.0,>=1.35.81->boto3->-r requirements.txt (line 1)) (1.16.0)\n",
"\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m24.0\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m24.3.1\u001b[0m\n",
"\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3 -m pip install --upgrade pip\u001b[0m\n",
"s464953-lb-29746609.us-east-1.elb.amazonaws.com\n"
]
}
],
"source": [
"#!/bin/bash\n",
"chmod +x lb2.py\n",
"pip3 install -r requirements.txt\n",
"python3 lb2.py\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e807cccb-cb8e-4b25-91f1-43a72cda214f",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Bash",
"language": "bash",
"name": "bash"
},
"language_info": {
"codemirror_mode": "shell",
"file_extension": ".sh",
"mimetype": "text/x-sh",
"name": "bash"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

249
main.py
View File

@ -1,249 +0,0 @@
import boto3
import argparse
import time
import base64
from botocore.exceptions import ClientError
from user_data import user_data
# Stałe
PREFIX = 's464953'
REGION = 'us-east-1'
AMI_ID = 'ami-0b5eea76982371e91'
INSTANCE_TYPE = 't2.micro'
MIN_INSTANCES = 2
MAX_INSTANCES = 5
LOAD_BALANCER_PORT = 80
TARGET_PORT = 8080
def clean_resources(ec2, prefix, default_vpc):
# Usuń security group
try:
security_groups = ec2.meta.client.describe_security_groups(
Filters=[{'Name': 'group-name', 'Values': [f'{prefix}-group']}]
)['SecurityGroups']
for sg in security_groups:
print(f"Usuwam Security Group: {sg['GroupId']}")
ec2.meta.client.delete_security_group(GroupId=sg['GroupId'])
except ClientError as e:
if e.response['Error']['Code'] != 'InvalidGroup.NotFound':
raise
# Usuń key pair
try:
print(f"Usuwam Key Pair: {prefix}-key")
ec2.meta.client.delete_key_pair(KeyName=f'{prefix}-key')
except ClientError as e:
if e.response['Error']['Code'] != 'InvalidKeyPair.NotFound':
raise
# Usuń Launch Template
try:
launch_templates = ec2.meta.client.describe_launch_templates(
Filters=[{'Name': 'launch-template-name', 'Values': [f'{prefix}-LaunchTemplate']}]
)['LaunchTemplates']
for lt in launch_templates:
print(f"Usuwam Launch Template: {lt['LaunchTemplateId']}")
ec2.meta.client.delete_launch_template(LaunchTemplateId=lt['LaunchTemplateId'])
except ClientError as e:
if e.response['Error']['Code'] != 'InvalidLaunchTemplateName.NotFound':
raise
# Usuń Auto Scaling Group
autoscaling = boto3.client('autoscaling', region_name=REGION)
try:
autoscaling.delete_auto_scaling_group(
AutoScalingGroupName=f'{prefix}-AutoScalingGroup',
ForceDelete=True
)
print(f"Usuwam Auto Scaling Group: {prefix}-AutoScalingGroup")
except ClientError as e:
if e.response['Error']['Code'] != 'ValidationError':
raise
# Usuń Load Balancer i Target Group
elbv2 = boto3.client('elbv2', region_name=REGION)
try:
target_groups = elbv2.describe_target_groups(
Names=[f'{prefix}-TargetGroup']
)['TargetGroups']
for tg in target_groups:
print(f"Usuwam Target Group: {tg['TargetGroupArn']}")
elbv2.delete_target_group(TargetGroupArn=tg['TargetGroupArn'])
except ClientError as e:
if e.response['Error']['Code'] != 'TargetGroupNotFound':
raise
try:
load_balancers = elbv2.describe_load_balancers(
Names=[f'{prefix}-LoadBalancer']
)['LoadBalancers']
for lb in load_balancers:
print(f"Usuwam Load Balancer: {lb['LoadBalancerArn']}")
elbv2.delete_load_balancer(LoadBalancerArn=lb['LoadBalancerArn'])
except ClientError as e:
if e.response['Error']['Code'] != 'LoadBalancerNotFound':
raise
def main(aws_access_key_id, aws_secret_access_key, aws_session_token, default_vpc):
ec2 = boto3.resource(
'ec2',
region_name=REGION,
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
aws_session_token=aws_session_token,
)
print("Czyszczenie istniejących zasobów...")
clean_resources(ec2, PREFIX, default_vpc)
print("Tworzenie zasobów...")
# Tworzenie key pair
key_pair = ec2.create_key_pair(
KeyName=PREFIX + '-key',
KeyType='ed25519',
KeyFormat='pem',
)
# Tworzenie security group
security_group = ec2.create_security_group(
Description=PREFIX + '-group',
GroupName=PREFIX + '-group',
VpcId=default_vpc,
)
security_group.authorize_ingress(
GroupId=security_group.group_id,
IpPermissions=[
{
'IpProtocol': 'tcp',
'FromPort': LOAD_BALANCER_PORT,
'ToPort': LOAD_BALANCER_PORT,
'IpRanges': [{'CidrIp': '0.0.0.0/0'}],
},
]
)
# Tworzenie Launch Template
ec2_client = boto3.client('ec2', region_name=REGION)
launch_template = ec2_client.create_launch_template(
LaunchTemplateName=PREFIX + '-LaunchTemplate',
LaunchTemplateData={
'ImageId': AMI_ID,
'InstanceType': INSTANCE_TYPE,
'KeyName': key_pair.name,
'UserData': base64.b64encode(user_data.encode('utf-8')).decode('utf-8'),
'SecurityGroupIds': [security_group.group_id],
}
)
elbv2 = boto3.client('elbv2', region_name=REGION)
target_group = elbv2.create_target_group(
Name=PREFIX + '-TargetGroup',
Protocol='HTTP',
Port=TARGET_PORT,
VpcId=default_vpc,
TargetType='instance',
HealthCheckProtocol='HTTP',
HealthCheckPort=str(TARGET_PORT),
HealthCheckPath='/factors/2',
)
target_group_arn = target_group['TargetGroups'][0]['TargetGroupArn']
# Tworzenie Load Balancer
load_balancer = elbv2.create_load_balancer(
Name=PREFIX + '-LoadBalancer',
Subnets=[default_vpc], # Użyj odpowiednich subnetów
Scheme='internet-facing',
Type='application',
IpAddressType='ipv4',
)
load_balancer_arn = load_balancer['LoadBalancers'][0]['LoadBalancerArn']
elbv2.create_listener(
LoadBalancerArn=load_balancer_arn,
Protocol='HTTP',
Port=LOAD_BALANCER_PORT,
DefaultActions=[
{
'Type': 'forward',
'TargetGroupArn': target_group_arn,
},
]
)
# Tworzenie Auto Scaling Group
autoscaling = boto3.client('autoscaling', region_name=REGION)
autoscaling.create_auto_scaling_group(
AutoScalingGroupName=PREFIX + '-AutoScalingGroup',
LaunchTemplate={
'LaunchTemplateId': launch_template['LaunchTemplate']['LaunchTemplateId'],
'Version': '$Latest',
},
MinSize=MIN_INSTANCES,
MaxSize=MAX_INSTANCES,
DesiredCapacity=MIN_INSTANCES,
VPCZoneIdentifier=default_vpc, # Użyj odpowiednich subnetów
TargetGroupARNs=[target_group_arn],
)
# Tworzenie reguł skalowania
cloudwatch = boto3.client('cloudwatch', region_name=REGION)
# Alarm skalowania w górę
cloudwatch.put_metric_alarm(
AlarmName=PREFIX + '-ScaleUp',
MetricName='RequestCountPerTarget',
Namespace='AWS/ApplicationELB',
Statistic='Sum',
Period=60,
Threshold=100,
ComparisonOperator='GreaterThanThreshold',
EvaluationPeriods=2,
AlarmActions=[
autoscaling.put_scaling_policy(
AutoScalingGroupName=PREFIX + '-AutoScalingGroup',
PolicyName=PREFIX + '-ScaleUpPolicy',
ScalingAdjustment=1,
AdjustmentType='ChangeInCapacity',
)['PolicyARN']
],
Dimensions=[
{'Name': 'TargetGroup', 'Value': target_group_arn},
],
)
# Alarm skalowania w dół
cloudwatch.put_metric_alarm(
AlarmName=PREFIX + '-ScaleDown',
MetricName='RequestCountPerTarget',
Namespace='AWS/ApplicationELB',
Statistic='Sum',
Period=60,
Threshold=10,
ComparisonOperator='LessThanThreshold',
EvaluationPeriods=2,
AlarmActions=[
autoscaling.put_scaling_policy(
AutoScalingGroupName=PREFIX + '-AutoScalingGroup',
PolicyName=PREFIX + '-ScaleDownPolicy',
ScalingAdjustment=-1,
AdjustmentType='ChangeInCapacity',
)['PolicyARN']
],
Dimensions=[
{'Name': 'TargetGroup', 'Value': target_group_arn},
],
)
print(f'Load Balancer URL: {load_balancer["LoadBalancers"][0]["DNSName"]}')
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Create AWS infrastructure")
parser.add_argument('--aws_access_key_id', required=True, help='AWS Access Key ID')
parser.add_argument('--aws_secret_access_key', required=True, help='AWS Secret Access Key')
parser.add_argument('--aws_session_token', required=True, help='AWS Session Token')
parser.add_argument('--default_vpc', required=True, help='Default VPC ID')
args = parser.parse_args()
main(args.aws_access_key_id, args.aws_secret_access_key, args.aws_session_token, args.default_vpc)

27
s464863-key.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAxF9IG9Ccrzpy0fBwKlO+4+KU6n9Kf05VUr0yewEtIXWZCTRh
7rdcMjMRgGmxL0bVZ4HK/un/ts9cmhCQDODovLnkVVripMlChp5XCgXoh/BVg7P+
5d4IJ6YgAiXwbGTPoA7OtjwNDr6En7LdnL8xkdfrcWBS53b4OL9jz1/7uyauiMC/
EYbXButwurN8r0I35gFNB6zrmLoAdkCPfpK2vmOvvWgVgk/17QuvtBPc4QexL4t8
ywIYD1tDAdbnbMSZ0ggaGuFxDtvjIeHwvoZL8XVpsY8uK7Z47BTM90Ns4r6dsbrc
yWXJRyNlXrzKteHi+ziDYEhmzyLKhr59eT9+SQIDAQABAoIBAD0/nsUWLxi0eUWj
4chB8KMxc9MkOr80VoaE/m7BMitie4YUcYs8Y6RAq2/LB3nAdSVgpUkXASwqxy5C
hjuOFulubZp1y4UsRPSqBGna5+kme/WlOZbGxvJe7VLeNHwKgXvhwnWyizwTDlil
OFwAglyD5SqqqZEKWWeRwnbW8DQx0tmZ3XbcLP1sNQCsHXfxDaAwOmVrZKxgEml/
SXdJB+t83fcooy+kzg1cyj40ou0CUd+00EPfrGB7Ou4N8qKrGQccAZQ4ghW7Cbgg
FZr+JnvfqtWCC078KtHDcXi7zGhXl4McQuRF5syzw95IiUUY19zbzIM/+wCdXue/
189PzAECgYEA+HcZknfJRe2sgTSzbyVOPyrjNWiqbXwdjU1d1giQhTU5n1/QHkSM
pzD9Sp8MH6mt+KdP1HqYOizZTB+0ACfyMBZJThZeQ9gMEYgvKc+FDMQHvDauTZI6
qI0d9CKi79VfKuthO5Lop0tlBdac+TUEEv+LDC6VTppOEHtyVUlA0YECgYEAylPF
HjBk9mJOuQ8I4WQ/6/DoyI//DCKWlC2PkQoSYl9P8WGbMU+SaxLvp1vBALYwXlj8
Bi8tD3CSE9KIfPvWFhi1m7w/q1OHBkYN1C7RIv+dQmlSTuJanZzXXyJVgaWQCu5H
a4docUOpOcv5M06E5/hTUHUPJ3pfCJrPubzbAMkCgYEA24AUJlIOjOl4cTjGoBUb
+DACQ4ewsEJqtQ85K8GrMxMfUc3KRUMX4wgjbE3v3vT+zWG546NeYl6GpXqIgW7I
xXSa1BJsupDdsItX5x7+kpWHo93GxJ6/lXH9mVUUDr64cWk6H/Ab+tdfavX6/Sm5
7LK2+08X9jXZazQzgGbTjYECgYAsrzeXpUSHDcspH+LsNIHRkBE5SmQfv/vVmgJd
HAZXZ4l2XAI0b8h8kWAQbDlB+PrRu4FdtEmVYV1Bt3uhbtUnaCmjzX2aTwZBInOn
aveRbTbEFhKxjVhJ+vut7R1JVtFrOJjZbLxqV3EmbKAK7sp3mOZ9nHzOUT5v3hEG
imkr0QKBgQCzIkh6YedEOwtMC02bzv9hEumKcAzMVv0sBXgHxE5ZyHyWGYUuD0Rt
OIJqKgcrReGBwjGGGV9cI5aiCvLMVCUQGuoGjlk/nhLrqFAqtEA/ifWEpvx0uKXj
ZFZ9yTIlkdsvI1B58BdbYWS5v5YG5WTqEUynRokvfFMgLtf/Q6x/kQ==
-----END RSA PRIVATE KEY-----

27
s464953-key-5tbwjp0h.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAwGbxWsT4l4GekkwuxAe8SoRXjcGTRL/lNSwL9gWHwoXNIPC4
UENmH+D5U6dgq2YQNLb5Rh8UCUGOk+q7O54sISfXSF3dHsKQXXOITXO6R6ctQUyP
tiVMgwzjb7ZYzDQ8z2VHXxOqNxM26z5HO+cpaL0iDZPRdlCtGFU0xD7QSkWni+X5
nwvHYlY2tVD+54HfTdqt8KjLNt+CVxGXCZzPZMay6EAt7Cz5z5qwQpfXMlYLWxM9
k3nudIIltYZ+0wYmycVLhGMmrQtxdDAiII62ILcMSa06qdOsrQ39Mtsx9HKsu4RY
oS1IDLP/XzYgGTfXjmYJnPBR6kzALPhiVHyAJwIDAQABAoIBAQC6y3bphDBBj5Nv
P81rfoMc6Y3DT7t11MRoMiJOsaHThmnX4D1hl33v11DZGbhtz4JOW5J5tLSUI/ST
wSIUSIVZjz+gv5htQ8I7KG6dm4ywAiuaqQUhdubomLu6+pMNdm3PgOmg8guguuPn
0igAjXYTfQQxoGCM+NiEtjyrhrxcTb9SYp8cy24FeSauSKIYqCC9XqM2+QIeV8Ew
Np0ln6Jt92VJ1lP0Cg/6iK2Xk2ZSTJBQQsj2cRJps9CzU0G0isOLiQYvVUIeCzxa
G3IBD11reXqjXmp0pucKhVk1YopGt3A1W+ZU4PtCy5MazvreOtCOnxoBKke8mxZc
2cWMDfcJAoGBAPxhPXmXka7f1HCT2L35vRMyWuGqXpIumgOuF+zYW1XoEdZNbWLN
BuKfwm9QTB8mBNy0S0fnAf7Rm17Xxlobs5QNoQFH9mlHZeE5ooYmxi/ArftO4Sw7
vOd3LCJRTdhI5r/oiPDFdTzV5ceJXA71+u1r43dxoACmGaM1cpuEwHkDAoGBAMMp
dZ4ZSmP0MVxVF+YGnNW1mpVuuH467mSbvSii6kEHFe85b/dfxft8sKJglitURd+2
TZwVKJQB2I1kA2Mf5/zWCtznySP7Ulc9PNR9tvkCBA+KNnUKL21iinylGMjFyN5b
TNNRREniXK9QbQVMwM/piAUtrKLJNSIPkfdPkckNAoGBAInJfQqZWYwj35Pm4/o0
EqocX8m8fg1JLAS+U4mXRaZNIQ/jDclXLl8j4b9sE2MeGqF0PXVwBYLdZPoOy9f+
L7ixCCnu4/Tuagzgrn6XRLRleZcupXjE1Il6YroJsXpXssMrbTgmVa91CBI8R+pT
GT/uGy3m9vfjtzOHxp5ph7uJAoGAE8zMAws70eI/c8eqUgsPtFrlYQ3Hp/7gmtJ2
IX5N1+UZI5knM+jClF41KXQ1KBY3tJexTgmTgViimM2xzke5aJxqo7jcXkssMm+j
EUfj3WWH9e+m0L8Eyss5k6XIWu4+D9khdTsEe558msjFFsmPskhWJXhZ0HYrbtY3
j+jBuK0CgYB9Yxo2ViKTJCQ4OPxfHNEpZXAGeiN3QG30jXqHUjZQNlwortQDvH5x
c229h51xN5avZXSLCxnTGoJtCpz5orjz5t9GKEvOVIwzju/je4YCbjnPx940X9To
fAuCGSaLBWWuE+MV2E/2OZ+6eTZeLyFlNlNsVMU0rPgckoBVWR1XAg==
-----END RSA PRIVATE KEY-----

27
s464953-key-878poos8.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAv/UFeHpu25CyGWfWEAeLvrQqiJdEB710//Xl27Bu5vWBRX8A
GyaPGrsrtjlwexBqUPmHNNVcZDNn89f+Unnr9sYZeFboLwOeI30UkAbONjXg0SI0
em0VNuRYO+79OwoGLP2qUBMHepPpMFAZW+OgLsx7FUM/ixWGbiP01zveYi+oGLMG
e6ux7tr8EHydZEf5NWBQZbZdLBmB/kV5M+MWG6kLNQdWyN2ltUFWdm8c8B0qv1bX
mKS/7PZjAfKxbXjXunSb0Lh5YULyx7LQEsLxaiPJP7Z2+l6ZzqD/KhE7Sd4vXAwM
Qp0P+i43tIqWY19PRUN7H2ZfH75qLvWrE6QrEQIDAQABAoIBAQC1kufh1q4WMwDE
11u9PeYKNhIlsjA/wg5yL/+Fl5bQEVp+imtnQ0oKVxI6BItJXXWzstUaPNhwT8/8
8Es5aOqzOx/MnShzkFB98UsKEeXtkXlfWaOaSqTOj6CG0MHonsrItAnuRJHGeTMS
6DGUofRbUED9E+d/gJTwikKHdbId3KGDEA8KiL4vdG3hBerlJvsZzpb6ocEM5EVQ
bxT5SMmfSZi+XH0j24MsR4+WMKU9nxN6FjbHWRG7E3Rce9cG2gWV7lDED6z+Ssts
cQQvuU02B/hOqAie6j+aSg7xMd6KkdmvfT1XvoZlYkmXpYgwy0QljWlsOTOreC7D
D2QNnC2hAoGBAPHha3eJM6v4t4FYMs2NuphjXKqfmp/63tRTzLmkIoPbQ9tSfvhv
qNs0nzs3ixMHwmcxU2pQNjGgW/M5mRE7N6xe848HtpSRcebHympgq5nnCgtSfUvG
RBYcyuDCE17LWtjXwQU9kYHcltxVdeHG32tMwVuACVxjcI8bEXSVOIdPAoGBAMsp
kBkP57/0zmvdLKhQUS9DKEgksFrqC+wvQqUp8WMkIsAfXUZDbrVCxw7urVleHKaT
sE2tU3Yh5g9ACmPC6ssnwLd5nmqeOsopN9j1ACE8YYmA3LPYz9Mx4Qx8q03bcXKX
n7aOIXdN40dxQSxgKR2/jAF0ExvCCVyiL/giHY+fAoGAErzoy2DYnOjuplmDzgK9
wtJnulwU6XHQ01gOkw8REW/qCNKSPYLA7QJdl4PNBVNjjwT2NlUybZPDq8r5fak9
vd+5NIpfbZD65urxVl5YzNpmH8xrInSgj6n5WYIPaBeO2R+Vt2c2n33MPhNsx2nV
owVWMVVw5DRb4uow5vwsXecCgYAFH84/o5QP1mfidpiqwiPaElKQx0QfdunIEkUX
D2DERGQP/nqGzCqdrcqBiOmcaHBGj1ESFH4Xa7F2zwG0FHWBnEYTGqExRT5sXO/I
rB1NuU0of7SRYLWVORvZCcf0VcWdw09G9nzHmpJR+fxP1zkSRAOPAdN9jr5XtMuK
8alXNwKBgQCUqNYlcP1AFGheJvS74m4o3WeBLzIREqUzeKbuPiEl+STqcIX1G995
DncOP/zwTd68rWoLVmApwmLiIBCa+NWM/+WYhWhNth9o2QDkvzGo9UjitTCtqoNa
XiGA1JYAr3gD6Nj6VQr6lQSTZBa4XzLC8PjVNu5s5mOi4RytiHJv8g==
-----END RSA PRIVATE KEY-----

27
s464953-key-9zfwetjt.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAxL2h76HDhVOeSCoc5qrSslBeOFwxmDXf7OjHgjs40+GaX0W7
8T+7z9CqAHpibyTBU26Jfdu0o2BqlkJnPEk24kth6kMLWcP1bbqTFXKcGbPFhHIN
gM37S3k3rGutIzjUA0Ih/hMuEWJwpu02nBUvMr8I1RdZfaLwZ9WHBikI9TMfcXd9
yKx7ctHf4TkPJbeZ+AnllFc3WZ6N3f3wM7sZSHqvt4pBc1EpY8C0LkWnkekQvlYr
vChUjzwuX/O5nMppQ+wAWOxf/UNS/zayidqO0UX3rd7v5V0u7+drXv9jH8jitMW3
Tt40PkohvGf6dVVJaKGs1H2X/G7/vYETOUTT9QIDAQABAoIBAQCC6pVJemE65Suc
ZbmZnO5bjbNE2cR+vsrlQPkRpgroo2UwJJ0tqfV2Eiot60J5JwImXJXNVFfdp5kF
p+Y+bZHB/9uGIVr6PrWgcNjTGtLZH5E90w89ONQRovXzHCu4FmauTGGGSokLNHA2
A/+k2Uvw/sIH2mPIgJZs4d/Zr5CwaEsIsyY1DCd//BKvIa7dj6VBLj9TR/p2tuAl
wq74JbjpFpiAJHvY9K3CAtjALfm8to30YrLDnVf6xI7lbP2RYjEnRbu0JdqYDU0g
wmV8+FTR90v2XNgH/7ohdostDhuKFSEq4epe+hTYwr8mrsgESsCIBe+Qt+T1j85E
lpCQpTlBAoGBAPC25AN0etph9UBWFC8HRD+QJV51YlrB5t7ufJlQ4OnNI3/51QOa
KDrZtdccdflH1WISo13sjiy1WEjBtmpI5U2xg4OvmGbCptzkmPHqKz1AkfOlRJDp
LMtCqtadaIWGmdBz2jZPawWWeP3q8nHTIkQqoAGDBePb9lRRtLLBtK5dAoGBANE7
5VOnnoS2QG+3u2ZE/c2fHF/CDv9UGLaBIOw4MHuvJGlb1YEcyxwfjZ+7R7EjY/Wc
0cq7rZOjq3Zyt+jI3cFKijAgVOKMCBo2F3PGT9jBJ73W76+4FY/NTrpf+Mz/DTdg
csgOsrXygAyfWfOMH26/tkZMvUd+8SyiR+EcjXJ5AoGBAKFDxepSpOOdcPMTOB5x
ndV/uqlXtvbapNOBrtQADU5Vco0QURdCteUHaf2dQaQp7djwZ6ZLDs0BCQ5lSNJX
19d/L36Pq2hcy/F87MJVgXZdxeoXNKJotOvP1ChH+HhMPswacXylJCvwLUrflmGP
c4t7iwq4Pr/y40qGGqsPfv65AoGADP9CfJLR9v53PDlWi8DHX0l98rjUQ6oOqu+U
gvfukxBLG7xXo+CNAV84Ze61Qlynbe9i3MwRuTUWhpITuIMZu1MNCHZJr5TxP+eS
R1/PP/CnrlQ2qVyvAjLHrC4f/2Pshz8XgjPfiAvbRm1zofxXS4LfKLjFnTZWduZR
vrsOUkkCgYEAsNBlnYjsrx7ZmNrsuWSXcQIhoUeXIk99GnjxvwWN107cQzZlJ632
YMI63V9yV9nX/zdHdTKr6A1rS0oyl1JIHlhVnPg7BLRRWzGmvRCURzyL6tlcAaxp
K+EtMOpnG/bSICYAYdk/9Kzpnhqm+tiph+eR2bgwvBmei1pamTzPYqQ=
-----END RSA PRIVATE KEY-----

27
s464953-key-ah39b0g3.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAwbhxawnDT0k6l3giAJvWuexVXw+fAzbN8CHJA4CnO/1GmVZy
nZ6S+iawCrawHGcXhNxGEvvnAMRcniAgSqKRuXsTfVdoSPnl4oi+sMzVeZRj96nj
7eYw30QJSJOT5YmJ9NZ4w3f+hYMNdUfllVCHLjoHA/qJaNw+sL2IyGbVEdwOwl64
QnNBagN+7B2Xv1VbPt6s93LZbfATv08Mh7aQd432jDIsOd2HBmhjwhqEgYzTrKB9
4U71NZxTyuk748hVoa5ygKSmgcYNrI6DTxnnn5qheUSyjASjdMjv1nwOSzSRURqG
VRa99/91HInPhiA0yPFPNQ8oqA+78f+8i+1PKQIDAQABAoIBAAWN2zqdagsg51wm
Zpsr3Kkx/HSgRwfZj2f+H/xIuQLATUDiOKEKRd6EM3HrMPtvfT4i7qNms4XTG3Cx
LRvWs2TlAXcLhYLqH0wybX02MjytI3ybU1yjx+zuz3FUQd5H5jut1oKMMzDyw/UD
3bI9P9L0ePUFPuFRxz5cAMr2H8/GOaJF6WFoT9SDO4LMXh5PRgNSaPr3xRac6u0F
MPOfgSs/RYloGGPOtC0717p0eQHN/TWX0MMOexLpIQ3cljAqRuwQUUHB6UNRLVNW
ecWpyMJALVU2fbZWGkBi1h49eDVYDGPl96JbsE732Sso4WwJDEiD6e42/GpU95en
kJ823A0CgYEA6AjCb7iywKKERSeiSpWkMIqPJUGUyRwLQW1yibAGj7tEPC89TL3n
XJgd6HQNyCaqLkQC7fsZFgOpdXKblJ+bX3iJ1ombuJpLmUbdz0UmGelLWqFnHTOf
YhPkPGdcNRKY0jg1wkJL+y9Oeysii7ggfyGa/Q6yZaSYo+iDWqec5+cCgYEA1bqg
SBX804Ckaqyn3TcgbuF8UBJpBgyuhghGPT9xOSx98DkJ4dBIdV9wFv1d35qlvmXj
Ij3ICuAs6aeCX10uT+XxVpt094vdAb86kN6NJ8OIsQ80PnIrrk5aNavx36Zij45J
PY66l+oMpicTiFihP//eOviYn2kvtonw9+zU7m8CgYAWBobWbhThvkuJ+Pop1EyS
owR1h+UktfnHiykdMs1cpW0TvXQ3LauhmXr1TtbkEe+Dlsckafp2oYBberaUBBaO
mHWVHNjgTB0y/owdmbXFLeUORFXyaq0NdU/r/++7xfkls1o/B2YJAPOVM4IC+0Zy
avE4ZkW+6kHnBTI6z8BQLwKBgBOMMCCnsin9+AuxouC+q/64LNB9/pEJE+U6WII9
jTN3eEVCUj8O97GUewH/RlivIj2Zv/5fvC4SdskgAvKJ6TRxiXMsYLRLXHlObiLV
1/8tCRF4nIShmJEmpWWHRmX4J8eNcfFpXnOKeoGvzT+JK6ZY1pB6MCtUSYLeduWW
CZuNAoGBAI7P6bDlJRTjGHj6SVpThkg2+uwMZiM0qDShLtpCv2Fgd9i+3v9B9uyN
4cCZ1VVPE/wvFZA8qk9V8jCfpk7JlXYspIrVkqd3uSECOa2lTnCfXI6gmGsbRmXw
Z9CirC0AAIJW/MalEE455uhtjZiO7/6oK6ew0rLYc0OcbxnKJpz9
-----END RSA PRIVATE KEY-----

27
s464953-key-dwa56awk.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAtCSAbykx1dtMU6QcRWZGs1ePf6odbzHydOKnnpPlaaf7ASM4
gbtpc7HbQ0VrKU+4XNFTKxUV32yuqGRb4+GrMhs4xcsZfVGYNx0bZCi0Ka2tBZuL
I+Jvn/FvtgBWMbueVmUnkJZhjYxKTg4VpcvuKYjOoon4grLe0P4Jth7arvnI0hBj
3OJ77p5paD9Pe6Bdz28AP8s9oPBoQkQ4r6ovYX4S1wROOIIGY2mhldraLt6749+K
TbXLJZZOh3hfFCcfDgXnTA3S/WitWyC2gM04ZQeSeK8wjnm1vx21TNLBgQK8Ydt5
/CRQcaqwBSrhPoYdGI86S5A848midpwVwQM8ewIDAQABAoIBAQCLxmLNXdZoTF9d
6tFw29nx3/fdI/7wv32USiWrOrBgGdH94PlAWE2LUq6B9QQgKtYvVtBEdnjhQnAH
As/18q0mFM8pUdy2SzBjWzdcsOSSDktZNYZx0omwPeLjAkHfFufVu2lGnBiXfwpM
pEsRuTlTiu5iWdG0f9u5p9ObNzeRWbpQCWxrvo3m7yyhXmKl/W7TCkD7uobCNque
GFIdT8FIny5TubTqYgTGB59FRuizjJxpQoQNa5QKCqoHek5j4ZdyNcD+PN+kCQf2
RUjsq2kb77FF+8/2UMu3C4tQ6Fg4wKf7l5g1sKfFVQGeS/Mhn2u8F5PHh86xRxHA
FswibweJAoGBAOu0CTnxzG7bNtW4V3gfS7zVlB0fxgKcnzPURM8QJjB/Qy2JaJpH
U0J/7/vowdqW00Q6h1g457GHSKYuC6ONtHw77babvayIDeviDPO4i6LwwBdwTv1F
2xAbTTkRAOX/bH+u5zAkQk8LYWgVMfuoByWl7ZY2PYhx1dv9V07U3xQvAoGBAMOn
qE4LMKoMYFWv0elkRjoAcIRb9Niu0Tfeikcx/Vwke/6leNJqFQTXULjBuOspkK4/
zjQV0ukaxfUPvu75lnVkWv/kIcjn+4WIal7JLknTtKdZ920pnVU6QjLXVNwZicng
B1L+huRgdSfC9SOaTJOKCMy9aS/e+0vh3SeTOW11AoGBAIOjh0ufaee38sYmMGPc
RrZuKkyhxDsNMjUGJm/muw125hP2nD8d+rg3L9bnRe1JMzD150U0cuJJhh+Zs9Ji
gByqc7b7AFHtoqjNFSLBPOuBvibZCKSXcSNrvBNVFcVehEBDdMcEWSxAVOSGgeXl
ECjMpQaxwGgF+8TjlvFmHjjtAoGBALosWclRepAE0NIYSDy2buCYNHit67EXv/tS
pe+TEMvR567qk6pcyP1fSO9VXvleBs7X5gXH0nZ/RGio//zzwAiaYsDluoQqwjpR
ES56brJPYbJwuDDGjXBgzEcGgTgikOtoYm/FxGOhqTkZmRu0ojMuAKuZfHLR0ftl
w4P54oZVAoGALww2BXPo9tge+Rf5+hb7E6EtD18kF9YrZ+yLNYeDcX7JM1JZVEEH
BIPI88dgt6fud/otJGp/5H9Pk0/JmkZTGuPGiTeYa1eTKw8mRgvdw4+2506DEjK3
kVNGnUwcTYhe9IgqIPwr21Iva0Vg307s/J5mgQn9puKRZriPwlYKd4o=
-----END RSA PRIVATE KEY-----

27
s464953-key-he6jgiep.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAqgKQ1pMfAFL2khjyYXfjRVCvCEkaUSUaEZXbKh92Ttv7C+LZ
0iDlY+wcwlYH6FgwRbMlpg2iVM2ukTUKX/eOLpnilzfJNYQvQ57eYiAoCQaqLlyc
ChbQ0zlXKU9xTI04nCdRHnU86Kn1tvWmgwAvzL+JX47peUa95NiYEW78VlGjI6I6
I1FO2IZ2XjldPx5dIzJND1kqt4xtlqRqAmLAV+gcci5V0OHTBlchUuqvZMxLpEtf
z8sylwQRQdjGAEC3F7Sf43Xpqh1kNA5WTHPxsnja7eQlQMX5nUG6oLHr8Yl1Ucwb
UTiVY6EI/qzBGkyuBavV7cHkOf6a+gdZKlDNNQIDAQABAoIBAFhdnQrqzWJNvPuT
G+itd+O/XDriRFuI/VPGoHP0hnnWvVYgQzeFAbY+M3SPYuzRacXQp/D3hTiu791p
xEq9UZnHQo92346Bdk+fc9ds/2IxpKMUX8aetUwUsck3EZzIinQfu3opVc9ZB+5h
IHtWzYGOzMhub8wpiOo56lClb2MtkqQNCTk9rfFlBkSzbmMvEL5bYLpTzBE7o0os
SCVsBxfv9KV5rSdidXw9vEK6IW3XPVyFeF+tNyzZgrJWwJcfX4k8Q6LzsGXk7Hoy
hd0WcYH151x9duQk0ttOwOna0vh+52qXY6qcLM6zFJ9qdibeJv73bZsX6dV0+aSP
4RRuQsECgYEA2PybW/eXzc/ka2AuSp/ZQqQsOKc9fA+NK5iuTSz6XsJYOjqeYN1v
TDBHyRC8oO8xbtth/HX3X1p7uf7p5OZOXQVuwfFIN33DCpyN8+JkvSNEv6OlCkRt
vVERQ9Dl7KuwoT3RljIS6pyl9AXlc7LQKz0MEfjzCX7VSQMWboOzRf8CgYEAyJO6
5Nt4RxU8f8vy4WR9WSmt8pM951+sIpCK1luRprHi/4QM3vA0JLoE0dJsyvFFZ6N+
kwyWsIfM4iy8tybu71mb/EDiKE0jvcMJlSkI9pIIoN0HSWNOUql8m2vn6u02f9Xx
CKdikz93Y7aH5E0AEvpqw3TToI16QFZX7GwPtMsCgYAJfguB23P9ofGZLOz5gMKt
Yqc4l0BeVAPV+2jsoWIWkSPw8C2LiURcLeSGDEBkPfKIqfpAZBy9RCUTfu5WgCi/
cwRkYZzKKKtGpJClMas8hvVz+MG4kEPIu2oo8FOOpfglJaIskuY280FjSnq+M/1d
Vt9XTe+745uLBSKPFR3bmwKBgAX68Z2VNZbY+T7OM+Woe1xHM9qBrVzSq200Zg9S
F5uiviPkKgYTn1pg+XfQEFJUsz8Nzt5Ph8anpeIwd0f2rzUPtOjmfle5RRGJWSXL
XWsMm5lAPdFgVpt8VizEINwOSouxM0iQxQ2i3MpqTM7vxMrMEJbXSuAEl9qHOIPi
DO3VAoGBAKgXW9YwBqlQOTKTqzaArtTuaqeCC4tfj1YDLzNLHbsrd8RJISIr5yYm
Bxi8GuhJJBUKDLAz1FBjHjgG3tGthvcOqAl+QcKdI366jLWcYJRoQ8dVszyBz3ja
x7rRPopS3OWgd3DcXAjjcFLazkme4eqlotMrgd1V/G6kr7NB3g0N
-----END RSA PRIVATE KEY-----

27
s464953-key-j0tb393g.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAw0nTNXfCTSf2LYYsDgAlQIKrI4BdZvOtvLhGE1FJtJsbdeQl
bqzOP1UWaXSWDbM4EOQDyxL2z0NZjWHHJcDSzSBr8R1lTjWPSxiRoCv/o5wBJjyS
iwPt0YJSmgOE+X6yR31pamuxmy6LFAYjO4RNzdZNmP0GdN16RDqIaPpUTjvUWCXZ
/q7jufyGNc63KWOFIdhcKBZlxaP6lu/b2oaxYALkZ0QbxYS8YoH9z4+EGTdmXj6g
KBaG1go8OROBjE2BowcddV0fPTqHoZdH08bfCjRD9krZkD0k3qUh4WbDt47GxFgJ
emldIdhh1crXTiTlcuzG0FNiEkfOMSmdAMafhQIDAQABAoIBAHiWWYkmjiA+kNDD
jOiIRnhzN2IQnZw41As4bmz3QN/49xfw7PxOUHzi+ZfcmduT0wb7BSycZTLOj7mx
qtsxGfn4Dy8vy6JjiDwCy8lv4ccRSdRmisa0gmFga8kWa0H0bfmfAzzniyAbuV1/
/Ll/lNuJfRj/BMGdESaYTiskiHJVgz6hiOX6BRG4NVMy+LPt2dGZ/DicudTYNdix
3jJraYkJOoaeDSHntSrPMNKi9ncLdILf0wvgq/0xUD0UiBSilxrgxuZQotDQS1nD
Fwt2nlAtYJggUQSyLhfslY0lc2VJ0T+ne0eTQ9VQuW2gN+U9nFuu73XCWdl8D/3S
aiIEcQECgYEA4iNf8E3BGgeBlXMghAkW+lFhxB7PEzv6m/NUf9ymsGCeIVXGDzMx
i0y9CiUaJLBUujYz+eevwL2MZ5fpplzUQsykt3PXOmC6e2cI3KuncaRkSYGswiBv
qmrjPSUAhwOBlEHwrCHHbpm4889RPazR1vEBANQfpxFLdW0JZPmrWTUCgYEA3ROR
w7AM0Ql3lMJTB7yiytY1X8Tmv0JEKYU3+PNDMhWeR9bPEuxTZmjqdGAd6lDPKnv5
ABuWBGHW5DOeK8vivT8kuLR5tzQvGXMe2S/7VSoFalcOiPgYQlcLuJhMBNCcrg8q
PK9OyWg8fJXjKJaWBq4um0SI2v00DoMuQ0kIRxECgYA9KhBC8OTv42PbRl5fGA5M
+kIVR7f+ndR05eXPB6FWR2u93HNLnS8jXEgtPEfL8J2aGBsK1u2kliApzN73jlgj
ETLkI8LtGUiXJBEzjoIlrK8rapWNlDRfxbVczmtMGVis/wDXrfNBKPbriwGQSvQe
zOTWkolVKMpeInXOB/GemQKBgQC7cc9Cm2+SgbNpZwZdZfylfNBOfjWjbr06cyDN
LP0JZzkH8kMq6UOhbk10FNboiFHO1MR/6ePdnVNFs9plif6atQIeta8Jve49ZtV+
EufIAtQKoPvK+IghH4rpnf++iV5/Wo5WW9GyhXXbsH6lOGDGE0OjFI3xF4Te1S0R
kce58QKBgQC7ylE4gWM5GKnKwhiA/lvRG8lWpPGGejAZPe094xsJNktH/JCLCQQD
jwXrhnzcM1msk1rSLe+toMLKs9yNfcM7hhE02+0Y4RdEqfl0zHJWdPET9dAPebwB
t/tmZXlP9eAgrCAFhN60ZpHrj9zsCEThz8PrKq7aCvrswWsNzYoNIw==
-----END RSA PRIVATE KEY-----

27
s464953-key-k0xsnd7v.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAs0tz+GS/6o4wIyU6FW5A/Vo7WwLwTjZrx/lW/l6jugOWa5Sf
tge/7QlzQXROunXyoKQU4LrtJvLqGUvUG5v029m/o/ZcsOtTyv2zlkc35zhisJt5
rBpSRagVRjX9EM375l9vOGUFQJaCcNSglxahDtHm3q0szQuIf1bU8ftfP+FqshRJ
cZ96S7jAPJ/iqNrWtDVPfZOkO+XlfYFNDjXA5I+6h8CdCeBsuel112f9EIyTVBev
9G/WhipcKdDmbkI01b3fKmIRERZqV8HZRvx7e61koBc17J80tyXIjzBG6hJqywlZ
Uqk27dBhdPS6WZ/Txbwpxqi645qAYwYvQkxfhwIDAQABAoIBAQCB613okxDiJRBK
l1Ikb1UWgMjb5SA+fH7TVCEuh2N6idj4saSdYbY4TA3BU0ctJAShVORwB+OKwqDR
nbngG71thbaxV/bImG2KfRYiAg9HM/uHX9Hl3Nja8rYfv0VWZPxwbZ0JL2KD78wr
eFe5w8MHGyCBINmC5yWMqF37zpuxjC6jHRcgVy+lmNss8nwincF3CwstGRX1zMsD
IISpcM3krSFh1BM1jzOJ7SZ8MHyDyUm+rmdO8q+LXhlevxxOQ4Hisn75uniSXEBr
D1hsTls/M2U8nljbpXnISE1fugDEgkLTOpgpO0+yttQi54WEMZSeI7YYpChjb1BH
mR3ZWcD5AoGBANifuogF/k0pZd+N7vi26JlGwNMAUKs68oOYDqoohnei7Dne8nKJ
bTiZ8kIka/OuJcJXWlHC7wVVwcbiPwZkKY/MQqd9oPH0+t0rnSWOUf/Sav1yxpWK
iDy1JQ6Gp5IdRg9Gk+rLXxUFIT19gXBj7dU/rddzo9ubijxsLdb4eA2zAoGBANPi
qm6KiG11FFMwEfqPCxMXBHdFM7uX3YTGUaQOcmQI8F5aYlBK7cAYInRzX8hkch4q
mQjXFasivVUDIGqVmS+GCYuK3wyX9HxwHcL2eib5rht4OgapT2WEKU9VqZTjuZBK
OdMOO6R/wDraBjSTh5umBst7+JIGHBKc1uc0Z0TdAoGAR3PAQje/3tHF4Yxeg7lJ
Va2J0s9qzGAgOBnC1IuTdwjNZHVOgUslNKNKzlhXJ0SM/eJ0Tz2+O4NC7IgaA9Cs
CNt2LOr6WHTW/nbxWb7s+zX7xmfCavcL4wJZG8Z8pWx0fHtqNOsqDLPpd+/a7yh2
/X0IqWViagCPA0kngZ3pc5MCgYA85rif/zeJZo6J/pYcU4MWYJZLBdwBvnvQTwRm
SDS+5gbYx9fcRj0h6o30tLjCK4TVgN7tuIyk3N5YkgZ+PDOEgl05+5dy0jZWkg8r
25Zun3NYt+zNv1pvzlXlVLTic7YBcCRAsqWX+ZQyFjqUYBcpOMZZNG/U4Oauvt/S
IrDQDQKBgQDWgTtNUGF8z+lhidB0uWAWwBykw2e9Dh+ZIkr6GZXnoPkcMUOElJyW
HX08CjCk0s6JOR+j4gyWLLZ6CxtOaLmZvUbJ2rTe+7JHV6fHkaCKYK17Vr/jbWvC
KmRlIrdsAPk3tOOlGCwC+PkBtLIBS8vdN+JNaWIA4c1VM7nmwTbwVg==
-----END RSA PRIVATE KEY-----

27
s464953-key-khqyy6zc.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA1cCCWVWiAYtU8HBVAHe5rtIQWFWhBZ7j8ydfNbQN6Z+QuRRQ
AT1EK92QB0brYj3yEwildbILIKXIgBskBihoC6vtaO7U0VS9lXPqe+HthYCW/VNI
H+K0f2HZFblYS/5D2rElqsZafNZdbGcvx0wbzttoHTvS73fY1Itu74C1rPnMZ2K3
mK8MnKyngF70gCcjIeoH0BKpAT6YZId9YonI3GypVvzu/qZ6qUAFhU4vW0GWdfxz
0JAaKbEyo6ZcN8bDl0LhTWLoWMBlFkp0rzLrekwAg3jNLogoCWmhAMTz3wv32CAB
WmxaEs3rj4mQTrVAIr2VRfkCxJvyascuThf6fwIDAQABAoIBAQC+uAzV/sUVUaeQ
/Pmq+ChyJrY0yvpoVHQZYZjfBu+e8yOjL8+Ou4aXCRLYm1ushY73krBnSlwJXkJ+
ozjKUcU8HMQw62ByAoVB03J15IkUpD6Ue3mQEaxxN/IFIyH4dD9A4uyz6lWUq4Qi
FBOaZHsvX68O3nD//9Q1GM/73MC9O2ayGsLTiY7J2gVTdIzNc47TYIRGXl9zqJM7
Sb8coKeUMrlFbxJpci5UIV7c768NbsSpOGn4F88vDcE6EKlJHUDbK+lJjl+4iQRD
FkQZsXqIa6w+jTmg/QkOGWu1pw+yy00Q5uuJRx94oFPtsIp6mV5nGlSVdtHsq5tx
GBk8jsBZAoGBAPtrFKwKNlwNGIu9pzT8relWYSEkHkPn+lF/nAy43KjYMNF6FxEF
cB+zjop99zFQM8IP0djleI69Y7ZGy6yRGm5bqw8pjV7Va9XSXA9WFUvMhbsyyuE7
ISgpm8R/L7t6m9iJ5eLg2bz72/1q+araJuqZz/oE1vO59y4evyrDhh5lAoGBANml
tQyyp0c+TG6aLtcNwgeZD1y7aiqpbYEkrzliou/LT3sISUKW4rYdpuzm41y96347
h4NQjBxEjR9OV4RkxQrK9nun91jGGFQuI9GuLlDavUnoGNxeZ6/Im5Tg3qeALTXh
uEjy5Cq/adSwfNw8GCkPy85GnMnHykfmL1gCwMUTAoGBAKCGeihuTM7xPZ7bdIsM
Wi4FjPaQDRLmZpjqlUQ6NAlKH8Ff5qJjindzOauLSe0efC2H1EBcI2Ff4u5avWht
LScROGLx8OV/9t4K9eSE3gwLhcdEYuzzx/PQvTf0zREy85aKVVFKpztWw9tGFirU
JszbcEL+HBB5yCyWTRCMznFRAoGAPtKzCOBEoq7b1w0QOikRean3ojfCtF/FaQKS
xYiwKXFRFt1UcDEnbZPvi/A1bp6va/d47TGBz+MFrSSq5F9F9RCSxyy7m9dKTHop
Aqw5WENbYgrpqiph2X6ZUgb6nfTEmAn4bK4XqDMqNCdhUxzRiICzvm3pceEGhWxu
/AOHaxsCgYBB6sWdB7c+JwcYCAn7/BZ7Kzz8TV+qkH2VQxJimseK5UODzv1uSpnm
LpO7Y7CFP+F1e+8hEW+OA8pbs2F7BWwiEamUbPod1cNeEnyNyq7ABi8tI2o54iqD
ymQh82LMDPtS7abSlildUfCq0fuICZ2xAy7CMTkz8jxS+n2Ko3+I4g==
-----END RSA PRIVATE KEY-----

27
s464953-key-l8tvp0sn.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA1VdXrdfb6RTczfV1NBlhbGa0lEnvZLwXdz33nZ9Qr8olJHYi
zWJ2NnVTB+EpldK7MQUfWHsB3HIJqCj88URexxKhwU+JwB9VNo8gTapEuuiK/vRv
A0Z6mXr80KDu2TPiOcDkmE/w6O7yD6Ch1nMrDr/FSG2dtmBu+BQvjrghBAot7sZB
/YSPT8e+sKe92cprscRZZF9sGb/lxIIv52LJnn9TjZQWapM297TYYXpFZjnqMqXM
9ci50x8Ur4QhhhTrRQ+fI5mjcI187WLygvYRSLtU4ZYBmQ7/tAYRMbMB+RkpC9I8
vdE9p+ceoXXcQZzkQ0Bf/V8+isiPjHnqEF25RQIDAQABAoIBAQDIuhs25+hzTzvJ
VO9ni5HMin3RIBdr8kUp3lYCKgmivFFiEvz/vWp4Jr9upH2aB+I0ZxttBp9jqLBJ
VfdXkfqS14b1+T4kU9a7NMMyD8gHDBDrfVSOAlwL2FnSefkAx/5MVJ9AZ8bFgzyh
U4Ox4D5c7DZUxT4kgGsoYuW0JK57utgwPZZIKzW5levV+9Uz6gJYnz3uNZO2zr9Z
BJGCjwHceYd73b+eVq7Gi9QNkYP8BqrTTsZEm0bKwJRrXwIy0Ue0VHxn0GyVYp7E
UGrh6pkl3xsL0vUrkFm+KYz9QvHBbIj+OMlEjGzJCqqvARCIZLqqiyvZ7KH2RWWL
1lAYfqkBAoGBAPDimBoQZ4EOibe7uPCGk/Z8Gyn/TS1ew2R7V5Hxnw52C2MoIji/
7zSsLQX3YrD0tggVi4gAoB0a1wRPRPRwE0t72a6fjRHR6TcXz7FQJSeSGG1YEcFH
OIVDhRLX1ma/EeJU/gikcd4R3cR2MXXDKb5rvmNFCKz8yQbtQX3FlCnlAoGBAOK6
TVUybouGHrFbrfs39ucv00n+HszMfwQhc7WFK1R7LncajUs+yZXQsmYf+FYWWaYj
ihNSqhJpQMTOu7g1gMd6PseN4pXljjGP3SQcTLHQPiXkLj/gn7Ze65yiUR9uR7M1
7c4HbioU5ahHoeXWCVFFcc1nNE0bSDJnQaxXNtvhAoGAWU/6izdn2P716uysTmnn
dG1hePnSuK65DYl513/ZtHfqEvKvdZEcdNAdxWeK7QdecrLiUCPDOedYr51geK0R
Slx6Qnefy2qj6Kxoclq/2+McMXaE5r+sYiS9s1XZhbD0RZGzuqqWGXtQWWZlQj+B
O7whFBdldxYmxu2y6ZoXLE0CgYEApFougsrbDXL8vs5ZkRkhdrbZb/KxOv4mOMVT
DktpfIUKyrXJpLjwAhTVrWgRab4r4F400gsDU/NOSxwdQcwu/OrlpVx52vUbnVvP
D0UgZ2kwE+GTkSRwQhAOtW2IZsNXYFaAevAx8HlTfSfn+SatfGddtmrQo/BZ5oep
OJfEIaECgYA+j3A9+xdWfmAP5BcjrgeWVPe6s1wo5cYQAj4sDJ3k/iKxz2X4qcz7
Uu2OpAA59y9F45XUlfYHYjqrfHbwUqFU05BCxAEpZc2kxKZN53i2WOlPmbfT6LoY
e0TVdqhWnAAnD0EDjBnGwZ0PUc+pY/Oy5ISvSyGfcycPE/0kiCn2/w==
-----END RSA PRIVATE KEY-----

27
s464953-key-ledcih7j.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAzRHYIyt8Bybm/4fJMI88oP9WIuKYOo4Liw+Bm/SzbhxagUs+
JAgOMmxUtq1qdozWQYeEfVFYMW00LvEQYGUrob/PxGNN6HVM/ipGv7BUPEvGeAVl
GHsj3LoI8llDpHapuPZBC0CuBNby25qNDfZ3xrDUELDz4BwvVti9XQGQYwkDk4hZ
0Dy9RpIEmdJvZJJliEODk8S+8y6VS/lg4XDJfBAXcOFbDCX60BbMFkOHxVrVPoLA
e9KuquGb6/y9OeEDaLLwkXFQoXHSbSdZFAAWZn2DhGx23+xflHb64XopdQDlen2e
UM6gVvFduNaGbe/BlsHdjFwZJwnhbm+6I3wE7QIDAQABAoIBAHpfH589H7IU4Nuz
Z7d2gjOAqyH+HeEzSmgdRLaP+1LF0Kw+/kH6HJ6yTosESPeda22HNOSjWgGErRMl
/yPGu5a2I4GJ0L/a36r8B2P0ERA6F6Efdwh40xmwWg5kfhzyQq2BJadVXYK90gaB
35JpdWg3tRSQw7cEmqs0gyuw9zxg3yNMVvy0vHBjJqrbLP3A0mAKLrTWqaDxMMhS
EivQ0gQjRTQ4M+7KShJ/hpIodCoG4G4cUfFr2oW8PvAdqnVK1NjwRcu6WpVR0xAH
6NcYdkipo1bcvenHHQR8HkAiCS9NiHpCp907/otkzbDpByaHYjiLC5Kf9Xqrf3SP
94rzqnECgYEA6a9fCAxD0ryPJHjGeOmHRrLrXdgVNtg0hg89ucqPjjbhbyyBG666
m560cxCmIjWRxoAgYEPxJhuND9fqVwUMKXUPJRYaFVtn8FUJMm4jBq63LDUuIigq
eR+DtNcYEwCHBth+rBFW9pwUrHLwGK1zg/xUdtbzHxen4UR+vXZ5dvMCgYEA4Kby
ZZRzSs9ZUJNn6/LZXsTRkgKOeK+GmnksR47jIYZzRsmrQ24VglpMlPjX7cELJ+Zj
bEBhBfG2E+sJqcSFL5nLp7A7Mxs5qpJ7XCXrowVpGaSnozNdag9MBOSz4Kob7FrB
UlfzR1W3ytE7qCvL6dCywvhCuLAX3C/PcdsZTJ8CgYBf8wblCgwrEgsAIar0aIaH
y90CSj/jpgBi7w0cJQSukvAbMr3MPQEX9qEHAdYFA9PYGjGw9RSl3fgcgj4Q/tyQ
hSTzyFBrZn2V24SMNVaiXsiNGUTY938A/qSYcxzKaJQIhon0YqY/WbTPXd4hc86T
ad7QcM+ge5kN0I7tgiC7awKBgQCnkV91DYoB3zALvifiAz7IRZ7cfjOvKZ4JUyEI
LziUJSmPP5YTseUxWhGNfR/zI+8iT+MRN+Qm/uiFaufGTePaYala50UBFemppaGG
VnKxIrQGgJ7aSNIA7nARplXV2o0Be6B/v0KjjviMvAz3n9N2EEmGzI9YG2Fwx+jA
UGFKmQKBgQDD+JyUTj4dmDRG9pp6w3qL3OmrHaBB26EVavh1QpX7/C/+Yrgzi3j2
sH3fpfPrLFtjCXUTswvj2aAAJCAbqJ+vUAGZ2FGTWjpvU4WwnC5NhwOKlvv/xBfz
NIFsHTtKdxd0qrqdUdnnNiR+89djaeLXJHHUL5P4jX2wy+jCBKQzRw==
-----END RSA PRIVATE KEY-----

27
s464953-key-qepbiky3.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAvl9b2EkiWa3DWejmptbjFCkfHYOGxusby5IxKZ6eNcBvRFAg
pniappLhh56ZIv8roINt9NbI9ws6XBGdfmswYpClsygYmAWCEN9zPtNLxYRli1v+
znClcRGfhuJFIjjnxzP2SGYw8rMSc/2fmEyhRWMEURbyYWwYnRIa0vW1ReIGbxd9
dSpWXGFREHD9bVudsGCSO0EfDCYOsQ5B0eR5LiRMR3DqKa9jOvqQHOOOOoPrzZHy
wCFD7hA/mal4VDdvRBAtyJOPRtefMMhuoMnn/f111NKj0VYJ5nLuw/hdeLhGIWqH
KGgftmWvd9U3iihg1MpUedmE26zsgXLDK4PudwIDAQABAoIBAQCUAAKhRUolOgez
cHNQpaLoW4fLJCO1pbZ4LvF1j9EjrLVUAI9BnGVutqYLD2uyX3qFUWg8fnbCSMJY
LYGpdJ+rIRUREUz9ctrJT06DOzWfGuzuyNhxmfWkz7Sb4nEox+C5Z1ZCtt+67yib
cEOQ3ZJLJU2H1TUeNDF2e0rLUyZYaqYYBtcEHeLf6m4kI00rFdeABmbyC6Zmavtg
m1BLUnkYQEzEg6qnV1yS3FawZS06zQs/ZEEi3+znuAe91xZBIHT0Gu0Lbf8H2E6f
xspE6/3tVW67fa8S6/zq50BQrXYh2AwQXjaB2LgjB1iSEUNVnNbgMWwGqC0N3kPb
icLzs94RAoGBAOlrxvZQjeEaIDxkwtSproybvuv05RDuvGHdWskHsBwTcrkIEqaQ
Z0PZWsUlRUn75sp5yEf6/TXaYs6hkLj0LQKPVWoQ2Ww0CIjN/GDUWMKKa/8Xqp6c
mUx+lQMCYgBob/TbNpNXmRxKsuBJiFdp7GGfmFNdYvseOSXA62w5D8JNAoGBANDJ
kWOvYl6UPO4hLUNpnHkHYJEeis0Y2ob0PxvxfhdzVurce7OzesUzLD2p461ofza/
7aPcVrvJbiesAD9ZVZyBrk7Vzwv7RG2Uzd9flEDjhzF/BVaR/L5BY13NrXEyBCza
tOhelbQf8O9FPj8++T0N+3yvJfS+B0m7i9bS/G3TAoGAfoVn0+036jKiFHo9TM4o
iZiF9RnJ69Krk5RK+DpNj/pOrdKdYWFWR+WRmNip5P9ASrGWCMYX58/WzM+wRUA9
AW01zAcUAt11XsngKZAQCGrFPQDT/6M8SMU3+eiZvETfomYL//N0T2yB5qaU22TT
ttqt00oEM79fFIKsWP3Y9+UCgYB/vNLWylbExq0AhAvNUrAI3BqYrrb9BFeueYCi
9/zNHCPxTTPhnc1fGQ/YKjjBv00VkhcySXxHJ9XdL753A5D9T9n1IZqrGe+jm4bZ
QwDRMmNkRPJfJLIdNKQ2n7+doZwsVSKZiETPDzu5KAQNbdnPIN7cScxPEHQlCDlm
FW+bQQKBgH3N5ixvDLCNW0ZGRvcll7k79Fk5+mtoQwskVBR7j0XTcM56JcKd3EOS
ihWtL9EFNSOB1+zRObNanVyKj8GwK9hk6LQ+FF0vt5D0F0hHPUQzcRvaNkZJSd4B
zmuJDtIkalehWZfkinjwyS7EzGyhveZesqnfcudXEmyOxXslaaY8
-----END RSA PRIVATE KEY-----

27
s464953-key-r9idbi5g.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAxmNQ+mVe2VjorQ99KNiTw7cE40EWKXuUN8qumH3HCleQIO/q
WAO1uw5betiN0szPVnYYVK+B1AG/JYHqWdnaAhTnvaPpuu+yVEpVF9j5apL9R1Qp
g6RpDOKqYf9rEd+o039xo3EEyHroZFtNeJnX0B4x7JmrAp0z2Yikqsvq0VMDUM/3
elP2KF0CaIO48M+NqqQctwF5zbl0m1EqtZwWSHT+N4wzYSWPgjnE+JcDvyK0dW+U
XCJsMejqMTzBkfZR1jqkx5zj64M12NYg4syUUBJVCAbFHtmAFbfzoL+jsuOhCSDP
H+o1ztZY01m9jCOiHQxMgY70XUaI9RqOYFGj6wIDAQABAoIBABJMhOKjyQzpO4UD
Abtrxq1ty0Ce90laQcCnrFUafOqCSyQOnSIDLZcUavG42dQQ2isSd4oQKjyA8L2n
7xLcmlRI01tVrDB2/Y7y0EiD1fWzmzMiGzYuSxZKLgceBSU/6RWhEr1NpnBLjfX7
yfiO0C49KsO1JOX31BmDlhS+/GjUQsVQuHur6yi1FYNn6I3jaapG1Em/DZfPrL09
goEKZ+a97k4vrsUWOGbGRg3fP6yvKwsnB+c3cPZrL/X+gd9f3oGoenBViiSVkFwd
QcyRQMShT3uqs9JD7WqQczv6pL5QdoDzs8mvTf8sQFBaWVm14JCbU0SRMh3pcW4t
hEQzOckCgYEA6qtp1ZzLN2omFTkkVG6AUblo8qfBwQH4qUWAJC8Wz8UekZNtNFD8
xqCv5BGEF8x6oqqec9c4zbYem0jQ/mn0VCOuNZo3H4O5IQ4/YJOQ6OvZT3F5BZ1+
f5PBpaFtTCz4mqbr1CI9Pijye9kFNW6V5ZhS9PdIE0rBYhsSfNMFQz0CgYEA2Guo
CTOc3jllzCyk+Uoyy2RFxR4Of3YG/FYv5e+M0OdJ2D686vUDlOBoryLmeXBa68qk
9GGJWiNb7jei3TS5MrI13mTVVjU8rhvJyRVMIQrHOaLTuvmuBQSoLeDrko854vZV
z9z6b/EBvbLb+f1Q/wc/l//80vcuaAr9QDCz1kcCgYEArIa1WnzZ0rXRpczK7uAG
qw67H5tCEVoXrKsSGIgeJ0ZuwOw4XzwjewxsBCr0iGKmzqzNrbDPbD22pseUD1dq
b+mDjJkCacL3+lt1MNWMthGfRI7SQNSXScghmFnj9xsg8uJBg0Zg7DBChdb5w1y4
C4I/iyW58aUGI9BveSHTPqkCgYEAgOF7rB8kZ+JekPx1Mk/Rd/Y65mxDzfwHpPXe
iFvjy/QwsaqK7pEClQIe1U0/W0phmtGO8kmzdg5gjLhtMLZZI6ulEM+TjEcf37+E
p08biwHUKqqg1FQkIbDoRooPP7QzkMmJyMOcEFXB56o//duxBG7YnDhB45B3/lWt
AzD9p7kCgYEAgW7edY6H1IDHEE+nsUcPO5kPb9IZdBohiQowMBld4HKaAUpq/+8s
Frt2Qh1i/wQSp6f6eWcEO6nP5k5P98zafzvhgEmw43JY3+Ddf50VyxbwAFv1fv9F
JpzjKwNnp56rM0gQPKhuK/mBYn8+hoqeY8pWaSkiVIv3g5nvLFw9Gyg=
-----END RSA PRIVATE KEY-----

27
s464953-key-splliwm2.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAxP2DwG+JTlQK+l10lw2M3+Hi/uTcMG/gjBUUOwdfYOYI/+5s
yqaBjQm0F3X68uxicZjPPvLh6Fkz9xWoNQn+TwXmCF26SPV1aEKnuj6sQQ/qUY6l
CxlyYJioIu60oIN9VjPW9AeuEvrOFB+0wgJOcWtaUMZMUiOgXzxw7Kgu4eTE0RmL
xs6wirlbopmYgvIF84iCNWOxFRCgsIZ0fYJJ9nQFnNUVOMS9ls60Q+ePz22c5keH
PHUIF/PpEp981H/a2Uk3epUIGWQ9s2VABG6FfoFBKvGztJoTHLXtNw34S7NqvgTv
ZTAnkrNakmwmzO7Xm8XpgXOyVwLYnrMuibs/xQIDAQABAoIBAQCd3SxAgyHeC6vg
iBRvGQTURgnLi0yJ5J5mpF3aEEZ3OOHtd/znShh4Flakln/NPXKG5pbvM2Wm9hWW
5VwvZRrP6UI3YiVvYoX8T65qqt8QJNj7Ev1gr7vhfXUAyZsnJzjCZDjWx3DQ9P1B
U0dgUsjaS9XM9Z0kFjjnGWDFxuILVAoMXXXb+6zDpQZHHPevFWcKdv8xQ3jahvEt
GympPqvZLv7LZ96jCwhbzK0Nh8c3Awh7jhkvdctdMpUlhPaHq57mltjVlSNzpjZZ
fF5HB0vgaymAZnkmbLF9fc8IErm3L0meiw9JAHwwGRsE4wj25Sat65tii6c7jbth
PYn87VQBAoGBAOQz6rV3Lp2fBLkFkQNUZI+z1S2SVyFlhrdlXd7YRt/cVqRsHDCI
mqnXr1kHYKjfr/R2s7qkc8QEK4OAiOJtd0Z3ahgSdBKXXnQ7LlNkzZBXu1DZ8Day
fu8UiLyRLlc652aYqHlPPZ9OLX5NxssZAgMAH41HXXBiLFAKV0wWVnolAoGBANz8
SxjyJchxuLhkKdne5pLpGliw6w31zt/0QdvubGfrRK+2wOCUWl/8oawjveaDcRMr
z7/4rX3aUI4B9CauxfHXfY+SpI+cafRdfW2F+2k9bwyb9CUDK1zqHXQAhxBE45Cn
gKiuVvUPWOxh+rpfWtimAuNkNLQs91VOedsRmS0hAoGBAKp5Vjblp788Ec0eKWxx
WQY482Gt1sUuEOtkIDHfI2MMOPVvhceD5PZIF8fMSRser1VSb4VYYNrnupHsLVXp
LJdJkcoVzvwsc/UkWMEXprDTuSz3Agn6YfS8REGJuzKS4Fa2Z/Tni0M8paOa+oyy
S9xt9SQXUegojq3ka759WXC5AoGASdCQOSXxTvIFlLoIbLkS5bGtVkDKUyBvWMlb
El6ioVep2tO9u4ZyZauaSUirDwuKwq+YtnQXZ3l7/ONULXOltPGZBFMkWsAReEme
Mu5VG0MlC94wAAj9/AxLiEsA0oNgTBpXVIDflP3qYxMbUBO34bQaNOBs5l46w6jx
9SX8t2ECgYAm47askV3eovPQWzsWObrA4+/V4YoLmzi3cFFc/8g1uJxOkJYdjlYp
ZR8C2FChIupkMTCmQXuRVtNTi67mhpq9x4DDGqZwyV9F15q/2kFkuuG1qhlAhCHf
YXIk/r0nLoB3a2mtTLBzMaNGZpgZCFHObkNLMBqWG5SG8r4NtOpPkA==
-----END RSA PRIVATE KEY-----

27
s464953-key-su5viqwk.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAuJHry0bWlAQHXY+Xn/HN/PWmP1bWnII+fEf34TPpL7Fq72CD
1CaCKgEL+pTOsgch3TroJFEs3euDG9ly19xL0sZPVjX7At8/T05yHNguOm47zh1U
eEpVkhYu29HUfoNyYuyUzqyXexaiia6SCk9XbV+bEkmev1FNp0A7Qu5xAIL8JB0x
zI4oR55meOSGBQ890mCkSV071YV2YUHqkEEpTyfeeMr83bkTWLdbhLmYre+khbk2
8MVzdrvt5Qk2+OlVxYocO904XgdGlLlRtM0JtiSGw397Mehzjn0xvejg7hlJmXX2
ojRaGqirZh4q5CALLBwrZQOAyKVqJJybfDle3QIDAQABAoIBABHN8cMQOE7a/KLn
4SaKuuY2BC2EAPvkDIcMojrVOR9irAAffVgPxuqqYy9u/2lpCrk+n3oxYnSd7W3Y
Uh3EoIPaoXidiHNEeeT6mkNyDzOPwrElXyqjcRHAlhCaczcpEvW8ALbXK12yV0eU
0X2xHavtVxYyh9/IxgbmSVExkzELR7aFPO/9ISSlOwTNpv+v7lriwgxVIiLTnqv5
9F5Wd2Lgka3+23NRetd/5jceIHKMVHcI3cpYB7Rsv5Mkj8RVXtIYN+M9XUljSGiL
Au5t69/z2xiKMov2QAvZqK65pG7ypOI4bFSZlHTdTzov2wf8/PFZKBo7MnyZA46U
8jNv4YECgYEA3/7IqhexYjupKpFKrJ0cj6hXYvH7xgnKF+3QOgJ1idId2NZZ7fqu
/Ms8RYlySGyCWSD3X2MhKycqztUPD8FjFlryDdX/C/KCz9fAF7PMreQw4N4PtPg9
h+QSqzPS02JlAcS5ReQNTwoGA8AO52bc9ElcoiY2i4/VmtE0ODOZOJECgYEA0vEO
F+UMBjKS2S4dDmX3dPRL82M86n/wHJ/2K6RwHmvz49cPu/L0yDLTiQXfv6qY/Im2
4BbCkdQf0gxTxNzF21aMUFfjLGO4OQh6GSVUfeu3bqWlv6irKcdXJegEmAJ387tB
FPaapmFO1F+4En+cIy6hBrgRCfaA7BezMCpVR40CgYAzTwVgEPVM7yWc3pMgXwy/
y2vY+l0VzABC4vKjlxSdcUfs94y5+oZC2bsAoq9O76wcBnUjoG1kmSAxKJS+oymz
YTm4+Z/meLKGMYGK7GCiJHcdy0AF0CcoDZJJLSHJ0ewZL5rQ66Awzrb5/PBtCR7r
xjI14lL0PQpM4Eb56LfcQQKBgQCopSiLWgge/FgDYqbAWC1bR+VhFToikV66w/jg
M3ugFtbKlapyrW+ej2Qn7JZSemYNoVygFBJC3MEEAe8HOSrGjY9ovJtXZfJnRqu3
Zu0CL25b+/tkG8mcgU7fc3wYvACC0Hbb97z0wF9x04Uq5PND/YeoA4k72eSA3QHZ
xD6iEQKBgFcdZTQBtPDpwxd0/FXg9Ak6tHCYoJ7ygGOOM0hjThxzEe6BeziTUyb4
bZBPmS587kPCIhqvX1V5xRU5CsKDXDcsnP/dbvwU2jEUJeDYl04NdRR1D/mTp0XN
6D5V3p2lLV/tBhfn3ISnC/H0yjjh7LLCkjs17SGfYdpUYHV3uiqt
-----END RSA PRIVATE KEY-----

27
s464953-key-t90y4hnf.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAm1TeLCK2I+MqTiG0ekJPjY5HISHHqxQZWtL4fB3Lgleyme77
RgaUbo4S7juVhYSGhHGLKT30TR54vCatPsaSjzOLZXGezRaYktJiT8oHQHsxGNlW
DPX5xWFmDNEwbbtEV11h86/liSUFMvnbYHU5Dxsns8fEFIrLIafTEcL5mAYlySYj
QThYpG85dhGmXSreUXmFhmfc+AULFZzNEj22fzjXYoHgXaN7RknB0gXcHv1gZu9Y
kX9eHSgDAZccx9SCcqNo7qvHqgJahltAhXCebZ2aSIYPHBOQZSLjXxWc/f5S9JKJ
Bw+yb6wuV0HELamqtdvqNEH1s/5/9SOT5fo0CwIDAQABAoIBAEKLPRLTXAxLyVfn
gJXPypzuEvLSseNMnQAX2XPyn7ibMVxY0TTSpMwn+VwuEoQ8nhQnQGLOs9ZF85tH
RnjaQPcwMcunvUxHHd3oW02rUygAnqvyj7bFudchPsLG62RXEZQL4WawODlkrrGD
8MOF9IfQLlYKgqn6O8OTTg0R5jOF48n270s/JWZCJHnNzQ78EnqBmUZEN1hkdxnS
RItwMHdGgzqB1yJ6ttGoyrwEREr/jhDG+/rO9hlMXn6VoheO5AiqthZySefflWav
Qu2kX7F0T6XCwe+PZhXdsxSMCnZbeQU/PkvzOUdkVlrUh7ujqhTM/eruaiB/4gUA
MXSfC4ECgYEAzD8wWSdp+q2yvJ7Kimu6SrK5KNLHy3pPvDIa2g6PVaEhyWiAjbhH
4u6GEmh9D0/s2U0N3YhNVRpu9qVq1iu2ZqSK5htUfdk/qCe18fH3BewODPjoqGWj
aEb8GmAAG/fqmct1qeSrn1jUKYwzopXIAG5XByAHxGCqyRExmoU3h5ECgYEAwrC0
mgv1+GASpadxEBUZd5X1+oTj9x2tlKO9x2oNdoAleY+a91o+g8TbY4F4KnC2Nlkd
SdrP6oRuytQhLpmg5wiSjySGcaj98+0siDG8N/u+TLMNoTF74sWr3UqEWk37qDsX
XlIxQdwJGD2Wu8wUPJo/PIKXAV/IQeD4hEtGC9sCgYEAgwlvPWOaDKfv6i9+BjyD
MnVjcZt5b0Qzb6w9qfR5ZRiRkqQnBcVa6W7aOWksAuzmKavT33MZGiZxVnBeELXO
uh+KtYKHPI5q1rlTc7wnHXeKtCvlKFS896PDDjDVIRx3OOBdxvfcW8kjpNw8LG0n
+Y7Q6tNT6FuUdpc/WcFqFOECgYBX7fTzahmCPunNFU20JMNmxjzdE23eKvI9oqJQ
0S4ZahEC0P/9XS3E14D6dPvvtw4kh6T5uTCUS5G6W4pNAKeyEKYYrjdmWBuyMlkd
fdDzO+ibvXaXacD5D6vqewBBxNy3A1EvkVGb3CPjZdWRJb+yCzwqORS4Uykfz9qN
7W1KZwKBgQDC4iqQIRHklDHrtD1W1DGbQSDpc/WXzPQPMSNtJWPHmZJiQPdvuHXI
RZbM1PX6/odPZCBfWAf3vW0txPLt6LhcS/DqvxD8i7IHF7l28HVH4NASuCrbYgfO
ga28YQuqLyzi3yeRGCqxgepChyWrzS2/M7DNMk/DXrfJzpUKc+uDww==
-----END RSA PRIVATE KEY-----

27
s464953-key-tbsg1uv1.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEAxta9kSUu71gvcGeahqfwRgca9tlyb1afX0iJI6ZfNgZ8uVGN
y/Y1J6O2/fg7hCIaJ9nXA1znk4jY34nP0KZhfjH/pvn0/gmtBDalW+XSxDy3YXmt
3ocel2IBdSODupVjIcy+ywToGZfFkgtONFciIMDbknarLQ6eROIAWrfvqvmyy+mO
8DHhy/Lgv3DfXp9fJtRxod1kPS7o9+2zU0Hdpvpxw41ShB6FYWI+yNTWNgLx80Rn
F4oFeH2Cy4ZD5uDFJU5TI4jh64sD4u1V9xH5tZoVWg+mRsz01deeJSBuPahqNudw
1aQYKA+tsfJIvuObHTXEwb8x9dSGmaSFFDF1tQIDAQABAoIBAQCC4Ju8Ks5e6hun
j/oNQgMMBOdBrdT95fVW4UarOXoX9GMqE70SkEdihQcQ2dBK46t1qZQ1+XPQD1Y4
pNwtySYIy14sCQCyKapBSLrE51w4oIJP3aiM/UEsgWzWLn8pU+UBPWQj+2HOXrDD
tT9Pgj7LckXUfNmk+adBTcTP8ZwGW9XHstW04Dl4XfcU2tVgOQGvIpJyN8ZELEtD
wEzxStWhuTAYvuxPkwkXjlFFJxGgg2L5Zdy4aGjRcGAA/E9n4Stb4kx8QEW6vXi2
/0MXU5DNd25IrhLMCCqFii3ffKU2iq4bxugA8QLjvZ2xIvaks7SPQ7gsUDhslMqp
t8599ggNAoGBAOOY8DurUJFgTGt0gU/SEUcTkPs07LKVozDQoBFhxjE1fkEUWHHJ
Wp1x5bBkZNnj15KJlzuUhsLxviVuEo7cW+CfQY5lbRiZyA15QjTVzTwyn4D7q6ef
uZYa18QVnF/cYN3fXig1aF1NAdRDBitMfi7eRn+bWLc5b3DSsl2+AZVzAoGBAN+n
DPjmJBH3qAEi4LwbBLD2CMEYfunOyzRz+wlzYu7LZqkb+zqfpeojv/3sjpFdUIIn
tWgOBIRDvTClVe/gGeuiCJCM9zk7zvEXtMRDHApH+1WxZTz4llxaOdqby1yn7+6g
tCBxmvB7ZcSA5O98SwGnryyOkVKejG+R+6FDlb43AoGBALpvKTp3lsO/ElpjURnF
hgmm6XgdXlbbZJY0Dyqt4N+mZgmBVQHAYs3d4ryfQE2L6aZLtupDPDCsPYoDpIgJ
0ekqC1VNmBQyxEDlN2p4SGorPaU2guIIYMmoq14gJbwQlfipZEOjnB3xWrI5RPBq
9GIICc+1vPI5xiOxNBK99iYpAoGBAJ/QELbyTKgCHaziLVB8xfdld4/zXwzXVeDf
V2zDZNhZw7vnYLfdSINslE5v8NfypAq9MSVvjs6sUM4n9qZ3rk3v9MrF0Aq3sAIa
/HKZubmnAfOT1VGiGF9ZoamSVdiZsBsF/nCIfTyGEIw/xldSq449MjFWloVBAfzf
hb0QPDo1AoGBAJMEtgOdHKREJH/cWPKL5/JBWVm6PXfg7tuHHoKxRfejWf24cF6W
yfK+r8LP1GvlwKw+32G3ZrEASm121wOTTkwZwh9O3AdubKxt/SCZjbfXCz7R5qyy
JZfxsivXNRVQTQAFouxXP2gSxDaWDZrZ/6EjXbYjtDJJJTNrDaT4/iFY
-----END RSA PRIVATE KEY-----

27
s464953-key-vasuwhem.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA13KDw3LQC0RRnmnxLza4vOF6R3jnNj9TRuOeMcZxS/UnfU1A
izzmsVhnehU7B2TmsCfgz95TQav0MfRpVP9uiqQ5Y3yDm9yA6D0MptmmrYp53y7y
WnElag3Ezfz9z4QgBCO/WHr36DEYWNWtJNtGyGgsnfJi1SOQHkrhZu2qqvbegAqf
b7Wx04/A0igXpecIwoMZiY9Nh1GxmM/8/AY0Eevuse+JT6lo9LSM6N5EeYRQ3Egu
wKRBWvkEGbZaCS0uQcXSz3j9/38apRsY8q0UQIolirrtCqTD2WbZVLFsNOTfREp9
xtMyhI1zmLu2GwHgXrCuh6Dpgvbuv1V40kkbIQIDAQABAoIBACbz3GDU/EpdMsiK
bQHVSfdUaPBNKriDIIJbmvly4H8UNuyPsBC8lRURX7wR5JdEpfTJcPsEPldMSJ1T
jEvC1vCYGowjMgRXDLNwfj4YcetEcx5n9Ydml5YiISgBCr6fK86zy9+qc/H2FmnR
UDmur5CCTTbNYRMaF+9yKGicpdO887cUafJVfenf8/2Fa4k9ZHE/Z+BNSqCbsZGW
U4zdCE+RZkuky4a3YbnIBkHLPmgh/Id1V+jwgM6lrK2JI35gotWG3gio/xy3EbKq
mAmphu2XYOZZ3JefRP9wNAoeVmo+GLlubRd4/0YHj7/PzxtWX/WpQHEjHxseRBHv
w5VqqQECgYEA7A8iI7PyfUWu1cL0Ye0ylSf+LRi5uMyJt5I/3hvP7la2bdXZfGJE
ShEi46S7H1ugGMOjx9ReX/sy11+Pq9iJt40IinIds4C9HUnKJkUO2NAeBxnNJ8iI
2/hsUyQVidw8yhizrAyfWk8vTOftM1CY2aQJ6ej8hZgpqaSjjznifpECgYEA6aWk
xaZ40DCtOEmoI5denvkWpeJuSb15kUyWcq2kq9MRQLaDQtfFKvZ1E6HqJWk97mQt
Pc1Y1WbOl/4PaTcNbsB0st3tsVeVaMMJVUdevkydq64er5lwsVqGbdsAQBmwHtwO
oWCJ/W8DlkB4HQxyawqQgzDVFUprHQs6rwqUO5ECgYAcEdycZDx0ewHEN2956Yu3
Qs8tq6ACAohpxMFFdwctry/4NZKsAL9gE1OTwDXkD7Ak4baq/2zNewBbrehWpeQS
aHnYhKNVgfx67BhWnqWaUH0RmRbVITps9chjxomtH/w2h+NtlP6p7XqRaY7CKFZU
ovXu056bgDGME6DDWj29kQKBgFr9KOfX5qCc9DhBZvtFTZH3Svya63xID3moK8bJ
HKHVdpiO+xsi0CPlCr70hSzAiV+3H2878uZYPQgv5myBBfgldszZZGF1zDeaDJ5r
RtgxGg3rpwOXa62FpWhOqxBLcKzz4bay08ogW3M99AjL+hr5aEHO2IyMCJ6s6tOT
+RohAoGBAOwC968H3Vd0kY59Dfb10lGFkAsgQEHc9q1daUl3NMKls6/EjeWxBoZc
/mtuKogXt2HTDmbOhvZZ9uIQJimUfVUmyQOtjx9JyrLucm3q8jnchx7vLGg3qsXs
6zQFFm9//0mGsyO6QC0AUuKLM4yg3TUmvR3o/4DL2yZlEHTM7N5U
-----END RSA PRIVATE KEY-----

0
s464953-key-yi5mu86o.pem Normal file
View File

27
s464953-key-yw7re7qc.pem Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAu7oGBhh0Uf9eIhn3ZboPMDxMkka/9sitM8YQinrshuA+WpoA
NsQFSJOKgI/hFMg4Z9VExGISFT1vH30F0zkUy5r4YRh8Cxa66E0Y2kh/alQqA88I
F6AaJQ6DxNYSaC8G7PUSwGG+uKLKUP50bjrA067Jr8hgPcbSUqz4y7Mg4gkDEnVU
UrAgjWTgBevrl3wh9yhwvRvXJnQEyeSDJAY2CUx7GovFFW9ofUgvbu2mlx1hcPxD
7PZQNq52V7UXVaxmlihoIjlypjT7gP4DN0mBvhazgwJYTwGyNy4IixYrAF9b+/BC
EPVSnVAmz4P49ZiSRspDnA4ExV2I9fhniYgtzQIDAQABAoIBACOLeIKE9NllyfQZ
CI/5Z9DRSgpUXRqkKq9n7E/cMJblNMlA6ZN1EC8KyKnJFGwz8QIwDoJEs3nUFQtY
R9cTss1OfYMc+Le8yQ0dM/x4x69hWkc4VybqCKlFk0uc4QVbCiupx7Ankc4x/K7T
T0Zj14j9SnD/NsHbuI0w9TbUpwBFM2RRIG/qDig15/7gQpy3a8vbLbaWGiI1W5DQ
xhoe0KVuCsvKdj6yzMW6u+G+lx5bApUaPSafZvTv5Z2KuJX/KWwc6hAZO8zRtjmG
u+uV7Wp6aVIXgK1hjNq0rNpZVwq6hdaHOFzqo/aLsT8D1YtpPvLfpoZ47/zhE8br
e1hI270CgYEA6RLqy2NMufc/XpAs2ZMNakfsiTr4jEJy1JbU7pjsoCvMHiwL4HD0
GONUrnN5WoSJT2JxUOt5ArcR6QHiQwbcD9d7TBw+QIlBuUGzFTbppNT3f7qiyR/d
5vBVxFsStSGqOnChxmPnhl3UhcdVSGTaw51arH5Z64qIupclUacoKz8CgYEAzjE1
O/FBZpS+CoLCPMN3o8qRy/OGcm6rrkmfj14LmluJpFYOzDaK4IR8P62GOkUUFQZ1
nMZE+Gmfbc2jAYOxtwp27lPFhKH71wxBJEskM00ujic2we/SMmGSEiiqSefVxuTh
s87TUFGP5GVDniiAXPdn2ILdSZyDjQjftKi1n/MCgYEAyIanDb/sZl9L3Q8MF1GG
jDc/Ub4z03DkHPV8U5+sjg3AewEIYtyrlrIXzFO7R96ZyHv45FcDcQuS1DbztRk0
wkhxY0U1Zg7xRfM5oXnyQQedvP4VShcpsqR6FgsJKF/Ddq4q8WZI7vjRfRvHyxZC
hWRfe+LleFpjUq3xxLOdQr8CgYAkNaYImcyHbDWXePENZLI89FT4QRLqQ58oo0s/
DR/ygoLAdlBw8l8fIIUFVb7NutXU/2ZmGrd//GSADu3CVVM/Nro+Dj4QlbW5RTCn
Y/6+d55mXmKSWkBKkrHpOHT3N5xmKkmsnvSjFT+0t0fRnYE1UklNT2X3CGJdwSIw
ArSqmwKBgBOWq9Z+06IFSW3Y2ND0iEZCBF1Fo5LtAWB/IwpKsvjirlLqS8KFBtYX
nGuMI59FK8sSdDILo/evp1IA8a06nVZm1HZGdGMYv1/EalriBkgi+cSmJp1z2LLo
kq7Dq2rKWEH4VO/7VY5n3fZsbSvTebdP8iJLV+eGBuVYME0cP8Xb
-----END RSA PRIVATE KEY-----

1171
tester.ipynb Normal file

File diff suppressed because one or more lines are too long