Dies ist der Artikel des Adventskalenders zum 14. Tag auf dem Code-Server 2019.
Ich möchte vom letzten Mal an die EC2-Instanz starten.
Inhaltsverzeichnis Tag 1 der lokalen Umwelt 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
Ich habe die RouteTable nicht festgelegt. Es funktioniert in der Zeitumgebung, Vielleicht funktioniert es nicht ...
Beginnen wir also mit dem Einrichten der Routentabelle
Sie haben das Gateway das letzte Mal festgelegt !! Sie können festlegen, welches Gateway für jede IP verwendet werden soll, auf die über die VPC zugegriffen wird.
In diesem Fall müssen Sie lediglich eine Verbindung zum Internet Gateway herstellen. Sie kann häufig festgelegt werden, z. B. zwischen VPCs und Subnetzen.
Erstellen
def create_route_table(vpc_id:str):
res = ec2client.create_route_table(VpcId=vpc_id)
print("{}".format(res))
route_table_id = res['RouteTable']['RouteTableId']
attach_tag(route_table_id)
return route_table_id
Die Routentabelle ist eine VPC. Natürlich ..
Du kannst gehen
Geben Sie in RouteTable an, dass alle IPs eine Verbindung zum Internet herstellen können
Erstellen Sie eine Route
def create_route(route_table_id:str, gateway_id:str):
resp = ec2client.create_route(RouteTableId=route_table_id,DestinationCidrBlock="0.0.0.0/0",GatewayId=gateway_id)
print("{}".format(resp))
"0.0.0.0 / 0" bedeutet alle IPs. Von "0.0.0.0" bis "255.255.255.255"
python
def associate_route_table(route_table_id:str, subnet_id:str):
res = ec2client.associate_route_table(RouteTableId=route_table_id,SubnetId=subnet_id)
print("{}".format(res))
associate_id = res['AssociationId']
return associate_id
def delete_route_table():
print(">>> Delete Route Table")
res = ec2client.describe_route_tables(Filters=[{"Name":"tag:Name","Values":[instance_name]}])
print("{}".format(res))
for route_table in res["RouteTables"]:
for association in route_table.get('Associations',[]):
ec2client.disassociate_route_table(AssociationId = association['RouteTableAssociationId'])
res = ec2client.delete_route_table(RouteTableId=route_table['RouteTableId'])
print("{}".format(res))
Das Löschen sieht so aus.
Bevor Sie es entfernen, müssen Sie Associate_route_table ()
aufrufen, um die Zuordnung aufzuheben.
Filters=[{"Name":"vpc-id","Values":[vpc_id]}]
Der letzte Code hat vergessen, die VPC einzustellen.
Erstellen
def create_security_group(vpc_id):
print(">>> CREATE SECURITY GROUP")
res = ec2client.create_security_group(Description="AdventCodeServer",GroupName=instance_name,VpcId=vpc_id)
print("{}".format(res))
group_id = res['GroupId']
attach_tag(group_id)
return group_id
https://github.com/kyorohiro/advent-2019-code-server/blob/master/remote_cs01/for_aws/main.py
Es wird davon ausgegangen, dass Sie mit dem SSH-Schlüssel eine Verbindung zur Instanz herstellen. Erstellen wir einen privaten und einen öffentlichen Schlüssel
PEM-Erstellung
def create_pem():
pem_file = open("{}.pem".format(instance_name),"w")
pem_file.write("")
try:
print(">>> CREATE KEY_PAIR")
res = ec2client.create_key_pair(KeyName=instance_name)
print("{}".format(res))
pem_file.write(res['KeyMaterial'])
finally:
pem_file.close()
return instance_name
PEM-Entfernung
def delete_pem():
print(">>>> DELETE KeyPair")
ec2client.delete_key_pair(KeyName=instance_name)
Erstellen
def create_instance(subnet_id:str, group_id:str):
print(">>>> CREATE INSTANCE")
res = ec2client.run_instances(ImageId="ami-0cd744adeca97abb1",#KeyName="xx",
InstanceType='t2.micro',
MinCount=1,MaxCount=1,KeyName=instance_name,
TagSpecifications=[
{
'ResourceType': 'instance',
'Tags': [{
'Key': 'Name',
'Value': instance_name
}]
}
],NetworkInterfaces=[{"SubnetId":subnet_id,'AssociatePublicIpAddress': True,'DeviceIndex':0,'Groups': [group_id]}]
)
print("{}".format(res))
Geben Sie das erstellte Subnetz und die Gruppen-ID an.
Diesmal habe ich Ubuntu angegeben. https://aws.amazon.com/jp/amazon-linux-ami/
Löschen
def delete_instance():
print(">>>> ec2client.describe_instances")
res = ec2client.describe_instances(
Filters=[{"Name":"tag:Name","Values":[instance_name]}]
)
print("{}".format(res))
print(">>>> DELETE Instance")
for reservation in res['Reservations']:
for instance in reservation['Instances']:
instance_id = instance['InstanceId']
res = ec2client.terminate_instances(InstanceIds=[instance_id])
print("{}".format(res))
Das Löschen ist das gleiche wie zuvor.
Lassen Sie uns nun diejenigen verbinden, die wir bisher erstellt haben.
Schreiben wir auch ein Skript, das darauf wartet, dass die Instanz gelöscht wird.
python
def wait_instance_is_terminated():
while(True):
res = ec2client.describe_instances(
Filters=[{"Name":"tag:Name","Values":[instance_name]}]
)
terminated = False
for reservation in res['Reservations']:
for instance in reservation['Instances']:
instance_state = instance['State']['Name']
print("------{}".format(instance_state))
if instance_state != 'terminated':
terminated = True
if terminated == False:
break
time.sleep(6)
main.py
import boto3
from boto3_type_annotations import ec2
from botocore.exceptions import ClientError
from typing import Dict, List
import time
import network
instance_name= "advent-code-server"
ec2client:ec2.Client = boto3.client("ec2")
def create_pem():
pem_file = open("{}.pem".format(instance_name),"w")
pem_file.write("")
try:
print(">>> CREATE KEY_PAIR")
res = ec2client.create_key_pair(KeyName=instance_name)
print("{}".format(res))
pem_file.write(res['KeyMaterial'])
finally:
pem_file.close()
return instance_name
def delete_pem():
print(">>>> DELETE KeyPair")
ec2client.delete_key_pair(KeyName=instance_name)
def create_instance(subnet_id:str, group_id:str):
print(">>>> CREATE INSTANCE")
# Ubuntu Server 18.04 LTS (HVM), SSD Volume Type - ami-0cd744adeca97abb1 (64-bit x86) / ami-0f0dcd3794e1da1e1 (64-bit Arm)
# https://aws.amazon.com/jp/amazon-linux-ami/
res = ec2client.run_instances(ImageId="ami-0cd744adeca97abb1",#KeyName="xx",
InstanceType='t2.micro',
MinCount=1,MaxCount=1,KeyName=instance_name,
TagSpecifications=[
{
'ResourceType': 'instance',
'Tags': [
{
'Key': 'Name',
'Value': instance_name
}
]
}
],NetworkInterfaces=[{"SubnetId":subnet_id,'AssociatePublicIpAddress': True,'DeviceIndex':0,'Groups': [group_id]}]
)
print("{}".format(res))
return instance_name
def delete_instance():
print(">>>> ec2client.describe_instances")
res = ec2client.describe_instances(
Filters=[{"Name":"tag:Name","Values":[instance_name]}]
)
print("{}".format(res))
print(">>>> DELETE Instance")
for reservation in res['Reservations']:
for instance in reservation['Instances']:
print("------{}".format(instance))
instance_id = instance['InstanceId']
print(">>>> {}".format(instance_id))
res = ec2client.terminate_instances(InstanceIds=[instance_id])
print("{}".format(res))
def wait_instance_is_terminated():
while(True):
res = ec2client.describe_instances(
Filters=[{"Name":"tag:Name","Values":[instance_name]}]
)
terminated = False
for reservation in res['Reservations']:
for instance in reservation['Instances']:
instance_state = instance['State']['Name']
print("------{}".format(instance_state))
if instance_state != 'terminated':
terminated = True
if terminated == False:
break
time.sleep(6)
if __name__ == "__main__":
res = network.create()
create_pem()
create_instance(res["subnet_id"], res["group_id"])
delete_instance()
wait_instance_is_terminated()
delete_pem()
network.delete()
Der gesamte Code ist unten
https://github.com/kyorohiro/advent-2019-code-server/tree/master/remote_cs02/for_aws
Lassen Sie uns die erstellte virtuelle Instanz bedienen !!
https://github.com/kyorohiro/advent-2019-code-server/tree/master/remote_cs02
Recommended Posts