Studiert ihr alle Terraform? (Einschüchternd)
Ich fange gerade erst an und jetzt verzweifelt [dieses Buch](https://www.amazon.co.jp/ Üben Sie das Terraform-System-Design und die Best Practices in der AWS-Technology Fountain Series (NextPublishing) -Nomura-Tomonori-ebook / Ich lese dp / B07XT7LJLC) Es macht viel Spaß und ich hoffe, dass das Studium der Infrastruktur Fortschritte macht, wenn die AWS-Umgebung frei berührt wird, aber ich war mit der Lernumgebung unzufrieden.
Obwohl es in dem Buch geschrieben ist (Details sind beängstigend für das Urheberrecht, ich werde es vermeiden, eine Erklärung abzugeben). Um die AWS-Instanz zu überprüfen, denke ich, dass ich von der Konsole aus über die Web-Benutzeroberfläche prüfen werde
Das ist normalerweise in Ordnung, aber trotzdem "Erstellen Sie eine Instanz mit Terraform ... Dann? Als nächstes löschen? Ja Ja ... Dann? Eine andere Konsole ..." Es war ziemlich schmerzhaft, dies zu tun, während man sich den Kindle ansah
Außerdem bin ich nicht an unbekannten Instanzen interessiert und möchte sie nicht berühren, also möchte ich nur, dass die Funktion sie anzeigt. Sie können awc cli verwenden, aber ich möchte, dass es wie eine Web-Benutzeroberfläche aussieht, ohne den Filter zu beißen
Derzeit sind nur EC2-Instanzen eingerichtet, daher ist es einfach, sie aufzulisten. Machen Sie es also! Es ist wie
Erstellen Sie zunächst als Vorbereitung ein Repository für Terraform Aufgrund der Natur von Terraform kann das Erstellen eines Repositorys natürlich sein, da die Quellcodeverwaltung die Grundlage ist. Dann denke ich, dass es einfacher wäre, das Anzeigeskript für die Python-Instanz in dieses Repository einzubetten.
In meinem Fall ist es ein Repository, das ich zum Üben erstellt habe, also habe ich das Skript in das Repository eingebettet. Das Repository kann jedoch nicht veröffentlicht werden, da es mit dem Urheberrecht des Buches zusammenhängt. Danke für Ihr Verständnis
direnv
direnv ist ein netter Kerl, der sagt: "Geben Sie einfach das Verzeichnis ein und der Alias und die Umgebung werden ohne Erlaubnis geladen!"
dotenv
Ich benutze immer dotenv mit direnv Ich habe das Gefühl, dass ich es ab npm eingefügt habe, daher ist es ein wenig mühsam, aber ich denke, dass Mac-Benutzer problemlos eingeben können, da es Methoden gibt, um npm in Brew zu setzen.
Diejenigen, die bisher gelesen haben, sind wahrscheinlich diejenigen, die AWS IAM-Informationen berührt haben. Oder vielleicht lesen Sie ein Terraform-Buch Also von den IAM-Informationen
Ich werde nicht erklären, was das bedeutet Wenn Sie mehr über die Bedeutung dieser Token erfahren möchten, besuchen Sie bitte die offizielle Seite.
Wenn ich von dem praktischen Terraform-Buch spreche, in dem ich die Token-Informationen erhalten oder zu Beginn geschrieben habe, denke ich, dass es reibungslos sein wird, wenn Sie von der Person, die Kapitel 2 eingegeben hat, zur nächsten übergehen können.
Beschreiben Sie die Token-Informationen tatsächlich mit dotenv Erstellen Sie eine .env-Datei direkt unter dem Repository-Repo
Als Einschränkung wird die .env-Datei so wie sie ist auf git hochgeladen. Bitte spiegeln Sie sie in .gitignore richtig wider.
repo/.gitignore
.env
repo/.env
AWS_ACCESS_KEY_ID=AAAAAAAAAAAAAAAAAAAA
AWS_SECRET_ACCESS_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AWS_DEFAULT_REGION=ap-northeast-1
So überprüfen Sie, ob es richtig funktioniert
Als nächstes erfahren Sie, wie Sie dotenv mit direnv laden und die Einstellungen im Arbeitsverzeichnis automatisch wiedergeben. direnv liest Informationen in .envrc
repo/.envrc
dotenv
xonsh --rc xonshrc.xsh
Das dotenv in der ersten Zeile ist so eingestellt, dass .env automatisch mit direnv gelesen wird.
Ich werde die Erklärung später weglassen, aber ich werde eine Shell namens xonsh verwenden Dies liegt daran, dass Python-Skripte problemlos auf dem Terminal ausgeführt werden können. Wenn Sie also AWS-Skripte in Python schreiben, können Sie sie ganz bequem in der Shell ausführen.
Mit den oben genannten Einstellungen können Sie einfach eine Verbindung zu AWS herstellen, indem Sie das Verzeichnis eingeben. Es gibt keine Unannehmlichkeiten, selbst wenn Sie es täglich verwenden, und es wird viel einfacher sein, Terraform zu entwickeln.
Nachdem Sie direnv und dotenv festgelegt haben, führen Sie das Skript aus, das die Instanz in Python anzeigt.
repo/describe_instances.py
import os
import boto3
import pandas as pd
def create_session():
client = boto3.session.Session(
aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"],
aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"],
region_name=os.environ["AWS_DEFAULT_REGION"]
).client("ec2")
return client
def to_pandas():
response = create_session().describe_instances()
df = pd.io.json.json_normalize(
pd.DataFrame(
pd.DataFrame(
response["Reservations"]
) \
.apply(lambda r: r.str[0])
.Instances \
.values
)[0]
)
df.loc[df["Tags"].isnull(), "Tags"] = df.loc[df["Tags"].isnull(), "Tags"].apply(lambda x: [])
df.Tags = df.Tags.apply(lambda r: {t["Key"]: t["Value"] for t in r} if len(r) > 0 else {})
df = pd.concat([df.drop(["Tags"], axis=1), df["Tags"].apply(pd.Series)], axis=1)
df["SecurityGroups"] = df["SecurityGroups"].apply(lambda r: ", ".join([i["GroupName"] for i in r]))
return df[["Name",
"ImageId",
"InstanceType",
"Placement.AvailabilityZone",
"State.Name",
"PublicDnsName",
"PublicIpAddress",
"KeyName",
"Monitoring.State",
"LaunchTime",
"SecurityGroups",
"Owner",
]].sort_values(["LaunchTime",
"State.Name"],
ascending=[False,
True])
if __name__ == "__main__":
print(to_pandas())
Speichern Sie das Python-Skript
python describe_instances.py
Versuche zu rennen Die Instanz wird in Dataframe angezeigt und kann aufgelistet werden.
Name | ImageId | InstanceType | Placement.AvailabilityZone | State.Name | PublicDnsName | PublicIpAddress | KeyName | Monitoring.State | LaunchTime | SecurityGroups | Owner |
---|---|---|---|---|---|---|---|---|---|---|---|
linux-adfdsf | ami-2dfdfs | t2.medium | ap-northeast-1a | running | ec2-25-25-25-25.ap-northeast-1.compute.amazonaws.com | 111.111.111.1 | dfdfdest | disabled | 2020-01-10T01:01:32+0000 | mdfsfsest | NaN |
xonsh ist eine Shell, mit der Sie Einstellungen in Python anpassen können Es wird häufig von Python-Benutzern verwendet und wird empfohlen, da es auch mit Standardeinstellungen sehr praktisch ist. (Übrigens benutze ich es normalerweise nicht. Irgendwie.)
Die Bereitstellung ist einfach. Verwenden Sie einfach den in Python verwendeten Paketmanager-Pip.
pip install xonsh
Es gab früher eine Beschreibung von xonsh in .envrc, aber lassen Sie uns die Shell vorübergehend auf xonsh umstellen und das Skript zur Anzeige der Instanzliste auf xonsh ausführen! Ist ein Versuch
Der Grund für die vorübergehende Verwendung von xonsh ist eindeutig, dass der Aufwand für das Aufrufen von Python in der Shell zu groß ist. Es ist sehr ineffizient, eine Verbindung zu AWS herzustellen, die Liste zu verarbeiten und jedes Mal vom Shell-Aufruf aus anzuzeigen. Daher habe ich xonsh gewählt, das sogar Variablen in der Shell speichern kann.
xonsh kann bequem durch Erstellen einer xonshrc-Datei angepasst werden Hier nehmen wir Änderungen am offiziellen xonshrc vor, damit Sie problemlos Ihr eigenes Skript zur Anzeige der Instanzliste ausführen können.
repo/xonshrc.xsh
# adjust some paths
$PATH.append('/home/scopatz/sandbox/bin')
$LD_LIBRARY_PATH = ['/home/scopatz/.local/lib', '/home/scopatz/miniconda3/lib', '']
# alias to quit AwesomeWM from the terminal
def _quit_awesome(args, stdin=None):
lines = $(ps ux | grep "gnome-session --session=awesome").splitlines()
pids = [l.split()[1] for l in lines]
for pid in pids:
kill @(pid)
aliases['qa'] = _quit_awesome
# some customization options, see https://xon.sh/envvars.html for details
$MULTILINE_PROMPT = '`·.,¸,.·*¯`·.,¸,.·*¯'
$XONSH_SHOW_TRACEBACK = True
$XONSH_STORE_STDOUT = True
$XONSH_HISTORY_MATCH_ANYWHERE = True
$COMPLETIONS_CONFIRM = True
$XONSH_AUTOPAIR = True
#Von hier aus das Original xonshrc
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
#Importieren Sie Ihre eigene Funktion
import describe_instances
_df = describe_instances.to_pandas()
#Zeigen Sie die Spalten 0 bis 5 an
print(_df[_df.columns[0:5]])
Tips
Wechseln Sie jetzt einfach in das Verzeichnis, und die Instanzliste wird automatisch angezeigt, und noch mehr.
describe_instances.to_pandas()
Sie können eine Liste der Datenrahmen erhalten, indem Sie sie einfach einfüllen
Es ist praktisch, also benutze es bitte ~~~
Recommended Posts