Dies ist der Artikel des Adventskalenders zum 13. Tag auf dem Code-Server 2019.
Nach dem letzten Mal möchte ich die EC2-Instanz starten.
Inhaltsverzeichnis Tag 1 der lokalen Umgebung Online-Umgebung, Tag 1 Verbesserung der Arbeitsumgebung
Online-Umgebung, Tag 2 Erstellen eines virtuellen Netzwerks
Online-Umgebung 3. Tag Starten einer EC2-Instanz mit Boto3
Online-Umgebung, Tag 4 Versuchen Sie, Code-Server in der Cloud auszuführen
Online-Umgebung 5. Tag Code-Server auf Docker starten
Online-Umgebung, Tag 6 Lassen Sie uns automatisieren
Online-Umgebung 7. Tag Bereitstellen von Compose auf Git auf EC2
... Online .. Erstellt mit Coompose-Datei
Online-Version .. Versuchen Sie K8S
...
Dämonenumbau
https://aws.amazon.com/ec2/
EC2 ist ein virtueller Server, der von AWS bereitgestellt wird. Ein Server, der in Sekunden aufgeladen wird. Sie können Linux frei verwenden.
Bauen wir ein Netzwerk auf, bevor wir die EC2-Instanz starten. Sie können die Standardeinstellung verwenden, aber versuchen Sie es bitte.
https://aws.amazon.com/vpc/
Erstellen Sie zunächst ein virtuelles Netzwerk. ..
import boto3
from boto3_type_annotations import ec2
instance_name= "advent-code-server"
ec2client:ec2.Client = boto3.client("ec2")
res = ec2client.create_vpc(CidrBlock='10.1.0.0/16')
print("{}".format(res))
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.create_vpc
Mit genau dem können Sie es erstellen. CidrBlock bedeutet die zuzuweisende IP. In diesem Fall IPs von 10.1.0.0 bis 10.1.255.255 sind verfügbar.
Lassen Sie uns TAG für eine einfache Verwaltung drücken
import boto3
from boto3_type_annotations import ec2
from typing import Dict, List
instance_name= "advent-code-server"
def attach_tag(id:str):
res = ec2client.create_tags(Resources=[id], Tags=[{"Key": "Name", "Value": instance_name}])
print("{}".format(res))
def create_vpc():
print(">>> CREATE VPC")
res = ec2client.create_vpc(CidrBlock='10.1.0.0/16')
print("{}".format(res))
vpc_id = res['Vpc']['VpcId']
attach_tag(vpc_id)
return vpc_id
Ja, es ist geschafft. Sie können ein virtuelles Netzwerk erstellen, indem Sie "create_vpc ()" aufrufen.
Sie müssen jederzeit in der Lage sein, das, was Sie erstellt haben, zu löschen. Schreiben wir ein Skript zum Löschen
def rm_vpc():
print(">>> Delete vpcs")
res = ec2client.describe_vpcs(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for vpc in res["Vpcs"]:
res = ec2client.delete_vpc(VpcId=vpc['VpcId'])
print("{}".format(res))
Da das Tag angehängt ist, ist es einfach zu löschen. Suchen Sie die dem Tag zugeordnete VPC und löschen Sie die gefundene VPC.
import boto3
from boto3_type_annotations import ec2
from botocore.exceptions import ClientError
from typing import Dict, List
instance_name= "advent-code-server"
ec2client:ec2.Client = boto3.client("ec2")
def attach_tag(id:str):
res = ec2client.create_tags(Resources=[id], Tags=[{"Key": "Name", "Value": instance_name}])
print("{}".format(res))
def create_vpc():
print(">>> CREATE VPC")
res = ec2client.create_vpc(CidrBlock='10.1.0.0/16')
print("{}".format(res))
vpc_id = res['Vpc']['VpcId']
attach_tag(vpc_id)
return vpc_id
def delete_vpc():
print(">>> Delete vpcs")
res = ec2client.describe_vpcs(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for vpc in res["Vpcs"]:
res = ec2client.delete_vpc(VpcId=vpc['VpcId'])
print("{}".format(res))
if __name__ == "__main__":
create_vpc()
rm_vpc()
Jetzt haben Sie den Code zum Erstellen und Löschen!
∧_∧
/ \ (・ ∀ ・) / ヽ
(● und Tsu ●)..brechen..
\/⊂, nein \ nein
Shi ’
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html
Die VPC kann zu diesem Zeitpunkt keine Verbindung zum Internet herstellen. Lassen Sie uns ein Gateway für die Verbindung einrichten.
def create_gateway(vpc_id:str):
print(">>> CREATE GATEWAY")
res = ec2client.create_internet_gateway()
print("{}".format(res))
gateway_id = res['InternetGateway']['InternetGatewayId']
attach_tag(gateway_id)
print(">>> ATTACH GATEWAY")
res = ec2client.attach_internet_gateway(InternetGatewayId=gateway_id,VpcId=vpc_id)
print("{}".format(res))
Ich habe ein Gateway erstellt und es einer VPC zugeordnet.
Schreiben wir nun den zu entfernenden Code.
def delete_gateway():
print(">> Detach Gateway")
res = ec2client.describe_vpcs(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for vpc in res["Vpcs"]:
res = ec2client.describe_internet_gateways(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for gateway in res['InternetGateways']:
res = ec2client.detach_internet_gateway(InternetGatewayId=gateway['InternetGatewayId'],VpcId=vpc['VpcId'])
print("{}".format(res))
print(">> Delete Gateway")
res = ec2client.describe_internet_gateways(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for gateway in res['InternetGateways']:
res = ec2client.delete_internet_gateway(InternetGatewayId=gateway['InternetGatewayId'])
print("{}".format(res))
Um es zu entfernen, müssen Sie die VPC trennen. Suchen Sie danach auf die gleiche Weise nach den mit dem Tag verknüpften Daten und löschen Sie sie.
import boto3
from boto3_type_annotations import ec2
from botocore.exceptions import ClientError
from typing import Dict, List
instance_name= "advent-code-server"
ec2client:ec2.Client = boto3.client("ec2")
def attach_tag(id:str):
res = ec2client.create_tags(Resources=[id], Tags=[{"Key": "Name", "Value": instance_name}])
print("{}".format(res))
def create_vpc():
print(">>> CREATE VPC")
res = ec2client.create_vpc(CidrBlock='10.1.0.0/16')
print("{}".format(res))
vpc_id = res['Vpc']['VpcId']
attach_tag(vpc_id)
return vpc_id
def delete_vpc():
print(">>> Delete vpcs")
res = ec2client.describe_vpcs(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for vpc in res["Vpcs"]:
res = ec2client.delete_vpc(VpcId=vpc['VpcId'])
print("{}".format(res))
def create_gateway(vpc_id:str):
print(">>> CREATE GATEWAY")
res = ec2client.create_internet_gateway()
print("{}".format(res))
gateway_id = res['InternetGateway']['InternetGatewayId']
attach_tag(gateway_id)
print(">>> ATTACH GATEWAY")
res = ec2client.attach_internet_gateway(InternetGatewayId=gateway_id,VpcId=vpc_id)
print("{}".format(res))
def delete_gateway():
print(">> Detach Gateway")
res = ec2client.describe_vpcs(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for vpc in res["Vpcs"]:
res = ec2client.describe_internet_gateways(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for gateway in res['InternetGateways']:
res = ec2client.detach_internet_gateway(InternetGatewayId=gateway['InternetGatewayId'],VpcId=vpc['VpcId'])
print("{}".format(res))
print(">> Delete Gateway")
res = ec2client.describe_internet_gateways(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for gateway in res['InternetGateways']:
res = ec2client.delete_internet_gateway(InternetGatewayId=gateway['InternetGatewayId'])
print("{}".format(res))
if __name__ == "__main__":
vpc_id:str = create_vpc()
gateway_id:str = create_gateway(vpc_id)
delete_gateway()
delete_vpc()
Jetzt haben Sie den Code zum Erstellen und Löschen!
∧_∧
/ \ (・ ∀ ・) / ヽ
(● und Tsu ●)..brechen..
\/⊂, nein \ nein
Shi ’
https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html
Lassen Sie uns das Subnetz einstellen. Das Subnetz ist das von VPC festgelegte Netzwerk. Es kann weiter unterteilt, gruppiert und verwaltet werden.
Erstellen
def create_subnet(vpc_id:str):
print(">>> CREATE SUBNET")
res = ec2client.create_subnet(CidrBlock='10.1.0.0/24',VpcId=vpc_id)
print("{}".format(res))
subnet_id = res['Subnet']['SubnetId']
attach_tag(subnet_id)
return subnet_id
Löschen
def delete_subnet():
print(">> Delete subnet")
res = ec2client.describe_subnets(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for subnet in res["Subnets"]:
res = ec2client.delete_subnet(SubnetId=subnet['SubnetId'])
print("{}".format(res))
CidrBlock bedeutet die zuzuweisende IP. In diesem Fall IPs von 10.1.0.0 bis 10.1.0.255 sind verfügbar.
Legen Sie die Sicherheit fest, z. B. welchen Port freigegeben und welcher Port geschlossen werden soll.
Erstellen
def create_security_group():
print(">>> CREATE SECURITY GROUP")
res = ec2client.create_security_group(Description="AdventCodeServer",GroupName=instance_name)
print("{}".format(res))
group_id = res['GroupId']
attach_tag(group_id)
return group_id
Löschen
def delete_security_group():
res = ec2client.describe_security_groups(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for sg in res['SecurityGroups']:
res = ec2client.delete_security_group(GroupId=sg["GroupId"])
print("{}".format(res))
Porteinstellungen hinzugefügt
def create_security_group_ingress():
print(">>>> CREATE SECURITY GROUP INGRESS")
res = ec2client.authorize_security_group_ingress(
GroupName=instance_name, IpPermissions=[
{
'IpProtocol': 'tcp',
'FromPort': 8443,
'ToPort': 8443,
'IpRanges':[
{'CidrIp': '0.0.0.0/0', 'Description' : '8443'}
]
},
{
'IpProtocol': 'tcp',
'FromPort': 8080,
'ToPort': 8080,
'IpRanges':[
{'CidrIp': '0.0.0.0/0', 'Description' : '8080'}
]
},
{
'IpProtocol': 'tcp',
'FromPort': 22,
'ToPort': 22,
'IpRanges':[
{'CidrIp': '0.0.0.0/0', 'Description' : '8080'}
]
},
])
print("{}".format(res))
import boto3
from boto3_type_annotations import ec2
from botocore.exceptions import ClientError
from typing import Dict, List
instance_name= "advent-code-server"
ec2client:ec2.Client = boto3.client("ec2")
def attach_tag(id:str):
res = ec2client.create_tags(Resources=[id], Tags=[{"Key": "Name", "Value": instance_name}])
print("{}".format(res))
def create_vpc():
print(">>> CREATE VPC")
res = ec2client.create_vpc(CidrBlock='10.1.0.0/16')
print("{}".format(res))
vpc_id = res['Vpc']['VpcId']
attach_tag(vpc_id)
return vpc_id
def delete_vpc():
print(">>> Delete vpcs")
res = ec2client.describe_vpcs(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for vpc in res["Vpcs"]:
res = ec2client.delete_vpc(VpcId=vpc['VpcId'])
print("{}".format(res))
def create_gateway(vpc_id:str):
print(">>> CREATE GATEWAY")
res = ec2client.create_internet_gateway()
print("{}".format(res))
gateway_id = res['InternetGateway']['InternetGatewayId']
attach_tag(gateway_id)
print(">>> ATTACH GATEWAY")
res = ec2client.attach_internet_gateway(InternetGatewayId=gateway_id,VpcId=vpc_id)
print("{}".format(res))
def delete_gateway():
print(">> Detach Gateway")
res = ec2client.describe_vpcs(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for vpc in res["Vpcs"]:
res = ec2client.describe_internet_gateways(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for gateway in res['InternetGateways']:
res = ec2client.detach_internet_gateway(InternetGatewayId=gateway['InternetGatewayId'],VpcId=vpc['VpcId'])
print("{}".format(res))
print(">> Delete Gateway")
res = ec2client.describe_internet_gateways(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for gateway in res['InternetGateways']:
res = ec2client.delete_internet_gateway(InternetGatewayId=gateway['InternetGatewayId'])
print("{}".format(res))
def create_subnet(vpc_id:str):
print(">>> CREATE SUBNET")
res = ec2client.create_subnet(CidrBlock='10.1.0.0/24',VpcId=vpc_id)
print("{}".format(res))
subnet_id = res['Subnet']['SubnetId']
attach_tag(subnet_id)
return subnet_id
def delete_subnet():
print(">> Delete subnet")
res = ec2client.describe_subnets(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for subnet in res["Subnets"]:
res = ec2client.delete_subnet(SubnetId=subnet['SubnetId'])
print("{}".format(res))
def create_security_group():
print(">>> CREATE SECURITY GROUP")
res = ec2client.create_security_group(Description="AdventCodeServer",GroupName=instance_name)
print("{}".format(res))
group_id = res['GroupId']
attach_tag(group_id)
return group_id
def delete_security_group():
res = ec2client.describe_security_groups(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for sg in res['SecurityGroups']:
res = ec2client.delete_security_group(GroupId=sg["GroupId"])
print("{}".format(res))
def create_security_group_ingress():
print(">>>> CREATE SECURITY GROUP INGRESS")
res = ec2client.authorize_security_group_ingress(
GroupName=instance_name, IpPermissions=[
{
'IpProtocol': 'tcp',
'FromPort': 8443,
'ToPort': 8443,
'IpRanges':[
{'CidrIp': '0.0.0.0/0', 'Description' : '8443'}
]
},
{
'IpProtocol': 'tcp',
'FromPort': 8080,
'ToPort': 8080,
'IpRanges':[
{'CidrIp': '0.0.0.0/0', 'Description' : '8080'}
]
},
{
'IpProtocol': 'tcp',
'FromPort': 22,
'ToPort': 22,
'IpRanges':[
{'CidrIp': '0.0.0.0/0', 'Description' : '8080'}
]
},
])
print("{}".format(res))
if __name__ == "__main__":
vpc_id:str = create_vpc()
gateway_id:str = create_gateway(vpc_id)
subnet_id = create_subnet(vpc_id)
group_id = create_security_group()
create_security_group_ingress()
#create_instance()
#delete_instance()
delete_security_group()
delete_subnet()
delete_gateway()
delete_vpc()
Jetzt haben Sie den Code zum Erstellen und Löschen! Damit sind die Netzwerkeinstellungen abgeschlossen.
Starten wir einen virtuellen Server im erstellten virtuellen Netzwerk!
https://github.com/kyorohiro/advent-2019-code-server/tree/master/remote_cs01
Recommended Posts