[PYTHON] Code-Server-Online-Umgebung (2) Erstellen Sie mit Boto3 ein virtuelles Netzwerk

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

Was ist EC2?

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 !!

Bauen wir ein Netzwerk auf, bevor wir die EC2-Instanz starten. Sie können die Standardeinstellung verwenden, aber versuchen Sie es bitte.

Erstellen Sie ein virtuelles Netzwerk

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.

Virtuelles Netzwerk löschen

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.

Versuchen wir es so weit.

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 ’

Internet Gateway hinzugefügt

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.

Entfernen Sie das Internet Gateway

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.

Versuchen wir es so weit.

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 ’

Subnetz einstellen

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.

Sicherheitsgruppe festlegen

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))

Versuchen wir es so weit.

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.

nächstes Mal

Starten wir einen virtuellen Server im erstellten virtuellen Netzwerk!

Code

https://github.com/kyorohiro/advent-2019-code-server/tree/master/remote_cs01

Recommended Posts

Code-Server-Online-Umgebung (2) Erstellen Sie mit Boto3 ein virtuelles Netzwerk
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Code-Server-Online-Umgebung (3) Starten Sie eine EC2-Instanz mit Boto3
Erstellen Sie eine virtuelle Umgebung mit Anaconda, die über Pyenv installiert ist
Erstellen einer virtuellen Umgebung mit Python 3
Erstellen wir eine virtuelle Umgebung für Python
Code-Server-Online-Umgebung (1)
Erstellen Sie mit pyenv eine virtuelle Umgebung für Python
Starten Sie Django in einer virtuellen Umgebung mit Pipenv
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Erstellen Sie mit Django ein Dashboard für Netzwerkgeräte!
[Memo] Erstellen Sie eine virtuelle Umgebung mit Pyenv + anaconda
Erstellen Sie eine virtuelle Umgebung mit pyenv und venv
[Venv] Erstellen Sie eine virtuelle Python-Umgebung unter Ubuntu
Arbeiten Sie in einer virtuellen Umgebung mit Python virtualenv.
Ablauf beim Erstellen einer virtuellen Umgebung mit Anaconda
Erstellen Sie eine Python-Umgebung
Virtuelle Umgebung mit Python 3.6
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Erstellen Sie eine Python-Entwicklungsumgebung mit Vagrant + Ansible + Fabric
Erstellen Sie eine virtuelle Python-Umgebung mit virtualenv und virtualenvwrapper
Erstellen Sie eine japanische OCR-Umgebung mit Anaconda (Tesseract + Pyocr).
Hinweise zum Erstellen einer virtuellen Umgebung mit Anaconda Navigator
Erstellen Sie eine Django-Umgebung mit Docker-Compose (MariaDB + Nginx + uWSGI).
Erstellen einer Django-Umgebung für Win10 (mit virtuellem Speicherplatz)
Erstellen Sie mit Winsows 10 eine maschinelle Lernumgebung von Grund auf neu
Erstellen Sie eine Umgebung mit virtualenv
Code-Server-Online-Umgebung (6) Lassen Sie uns automatisieren
Erstellen Sie eine Homepage mit Django
Erstellen einer virtuellen Python-Umgebung
Erstellen Sie ein Verzeichnis mit Python
Wechseln Sie die virtuelle Umgebung mit Jupiter
Erstellen einer virtuellen Python-Umgebung
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
Ich möchte eine virtuelle Umgebung mit Jupyter Notebook verwenden!
Erstellen Sie mit VSCode & Docker Desktop eine einfache Python-Entwicklungsumgebung
Ich habe gerade eine virtuelle Umgebung mit der AWS-Lambda-Schicht erstellt
Erstellen einer Todo-App mit Django ① Erstellen Sie eine Umgebung mit Docker
Erstellen einer virtuellen Umgebung für Python auf dem Mac [Sehr einfach]
Aktivieren Sie die virtuelle Umgebung von Anaconda mit PowerShell
Erstellen Sie eine Windows Python-Ausführungsumgebung mit VScode + Remote WSL
Erstellen Sie eine Python-Umgebung auf dem Mac (2017/4)
Versuchen Sie, eine Python-Umgebung mit Visual Studio Code & WSL zu erstellen
So erstellen Sie eine virtuelle Brücke
Schreiben Sie ein Restnetzwerk mit TFLearn
Erstellen Sie eine Linux-Umgebung unter Windows 10
Erstellen Sie eine Python-Umgebung in Centos
Code-Server-Online-Umgebung (5) Starten Sie den Code-Server auf Docker
Erstellen Sie einen Poisson-Stepper mit numpy.random