[PYTHON] Es ist überraschend mühsam, eine Liste mit dem Datum und der Uhrzeit der letzten Anmeldung von Arbeitsbereichen abzurufen

Einführung Ich führe Arbeitsbereiche aus, aber hier sind einige Tipps, die ich während des Laufs gefunden habe.

Was sind Arbeitsbereiche ? Dieser Artikel richtet sich an Personen, die tatsächlich Arbeitsbereiche betreiben. Was ist also VDI? Was sind Arbeitsbereiche? Wurde weggelassen. Siehe offizielle für Details. [Amazon WorkSpaces](https://aws.amazon.com/jp/workspaces/)

Warum benötigen Sie das Datum und die Uhrzeit der letzten Anmeldung ? Wenn Sie AWS Workspaces ausführen, möchten Sie wissen, ob jemand eine Instanz erstellt hat, diese aber nicht wirklich verwendet. Ihr letztes Anmeldedatum ist vor X Monaten. Verwenden Sie es nicht mehr? Ich möchte eine Bestandsaufnahme machen.

Wie kann ich das Datum und die Uhrzeit der letzten Anmeldung erhalten ? In der Instanzlistenanzeige der Verwaltungskonsole gibt es kein Datum und keine Uhrzeit für die letzte Anmeldung. Wenn Sie sich die Details einzeln ansehen, wird es herauskommen. .. .. Die Untersuchung beginnt hier. Wenn ich zunächst die API-Spezifikationen überprüfe, ist es richtig, dass [DescribeWorkspaces](https://docs.aws.amazon.com/workspaces/latest/api/API_DescribeWorkspaces.html), das die Instanzliste erhält, nicht das letzte Anmeldedatum hat. .. ..

Wenn Sie sich die API-Dokumentation genauer ansehen, finden Sie das Datum und die Uhrzeit der letzten Anmeldung LastKnownUserConnectionTimestamp in DescribeWorkspacesConnectionStatus!

DescribeWorkspacesConnectionStatus


//Response Syntax
{
   "NextToken": "string",
   "WorkspacesConnectionStatus": [ 
      { 
         "ConnectionState": "string",
         "ConnectionStateCheckTimestamp": number,
         "LastKnownUserConnectionTimestamp": number, //<-Dies!
         "WorkspaceId": "string"
      }
   ]
}

Es scheint jedoch, dass Sie nur bis zu 25 Instanzen anfordern können, nachdem Sie WorkspaceId in diese API eingefügt und angefordert haben. Es scheint, dass es bei 25 oder mehr Einheiten nicht möglich ist, alle auf einmal zu erwerben.

WorkspaceIds The identifiers of the WorkSpaces. You can specify up to 25 WorkSpaces.

Verwenden Sie Python, um die Liste abzurufen Nachdem ich die API-Spezifikationen verstanden habe, habe ich ein Programm in Python erstellt. Unter der Annahme, dass die erforderlichen Berechtigungen in den Umgebungsvariablen enthalten sind, habe ich ein Programm erstellt, das die Instanzliste + Datum und Uhrzeit der letzten Anmeldung im CSV-Format ausspuckt. Ein wenig Einfallsreichtum ist, dass selbst wenn die Direcotry-ID in CSV angezeigt wird, sie sich anhört, ohne zu wissen, was sie war. Deshalb habe ich sie so angepasst, dass der Direcotry-Name angezeigt wird. Wenn Sie die Operating DirectoryID in "DirecotryIds" in ein Array einfügen, sollte dies funktionieren. Python 2.7.10.

getInstances.py


import boto3
import csv

# Initialize SDK client for AWS Workspaces
client = boto3.client('workspaces')
paginator_describe = client.get_paginator('describe_workspaces')
paginator_connection = client.get_paginator('describe_workspaces_connection_status')

# Initialize output CSV header
data = [["UserName", "WorkspaceId", "Directory", "State", "ComputerType", "LastLogin"]]


# Initialize Directory ID list
DirectoryIds = [
    'd-XXXXXXXX',
    'd-YYYYYYYY'
]

# Initialize mapping between Directory ID and Name
def addDirectoryMapping(direcotry):
    directoryMapping[direcotry["DirectoryId"]] = direcotry["Alias"]

directoryMapping = {}
paginator = client.get_paginator('describe_workspace_directories')
page_iterator = paginator.paginate()
for page in page_iterator:
    map(addDirectoryMapping, page["Directories"])
print("Direcotry mapping is DONE")


# Find Directory Name from ID
# @param  workspace ID
# @return Name of directory
def findDirectoryName(direcotyrId):
    if direcotyrId in directoryMapping:
        return directoryMapping[direcotyrId]
    else:
        return "Other"

# Find last login time by SingleId
# @param  workspace ID
# @return LastLogin Time
def findLatestLoginTimeById(workspaceId):
    response = client.describe_workspaces_connection_status(
        WorkspaceIds=[
            workspaceId
        ]
    )
    if not len(response["WorkspacesConnectionStatus"])==0:
        connectionStatus = response["WorkspacesConnectionStatus"][0]
        if "LastKnownUserConnectionTimestamp" in connectionStatus:
            return connectionStatus["LastKnownUserConnectionTimestamp"]
        else:
            return "unknown"
    else:
        return "Error"

# Get necessary information from Workspace Instance
# @param workspaces
# @return list
def parse_list(workspaces):
    list=[]
    list.append(workspaces["UserName"])
    list.append(workspaces["WorkspaceId"])
    list.append(findDirectoryName(workspaces["DirectoryId"]))
    list.append(workspaces["State"])
    list.append(workspaces["WorkspaceProperties"]["ComputeTypeName"])
    list.append(findLatestLoginTimeById(workspaces["WorkspaceId"]))
    return list

# Get necessary information from Workspace Connection Status
# @param WorkspacesConnectionStatus
# @return list
def parse_list_connection(WorkspacesConnectionStatus):
    list=[]
    list.append(WorkspacesConnectionStatus["WorkspaceId"])
    if "LastKnownUserConnectionTimestamp" in WorkspacesConnectionStatus:
        list.append(WorkspacesConnectionStatus["LastKnownUserConnectionTimestamp"])
    else:
        list.append("unknown")
    return list

# Export CSV file
def exportCSV(data):
    with open("VDI_LIST.csv", "w") as f:
        writer = csv.writer(f, lineterminator="\n")
        writer.writerows(data)
        print("Create File is DONE")

# main function
def describeWorkspacesByDirectoryId (Id):  
    try:
        workspacesDescribeInDirectory = []
        print(Id + " is started")
        # describe workspaces
        page_iterator_describe = paginator_describe.paginate(DirectoryId=Id,PaginationConfig={'PageSize': 10})
        for page in page_iterator_describe:
            workspacesDescribeInDirectory = map(parse_list, page["Workspaces"])
            data.extend(workspacesDescribeInDirectory)
        print(Id + " describe_workspaces is DONE")
    except Exception as e:
        print(e.message + " :: impacted Directory ID is " + Id)

map(describeWorkspacesByDirectoryId, DirectoryIds)
exportCSV(data)

Erweiterte Nutzungsanalyse Übrigens [Workspaces Cost Optimizer](Workspaces Cost Optimizer), ein Dienst, der die Nutzung analysiert https://docs.aws.amazon.com/solutions/latest/workspaces-cost-optimizer/welcome.html)がAWSでは用意されているみたいなので、本格的な運用ではコレを利用するのが良いみたい。

Schlussfolgerung Es wäre besser, den Stapel einmal im Monat auszuführen, aber da ich eine Anwendung für den manuellen Betrieb hatte (lacht), gab es einige Benutzer, die sich nie angemeldet hatten, obwohl ich eine Instanz erstellt hatte. Es war also ein überraschend nützliches Programm. tat.

Recommended Posts

Es ist überraschend mühsam, eine Liste mit dem Datum und der Uhrzeit der letzten Anmeldung von Arbeitsbereichen abzurufen
So erhalten Sie den letzten (letzten) Wert in einer Liste in Python
Rufen Sie die Excel-Liste rekursiv in einem bestimmten Ordner mit Python ab und schreiben Sie sie in Excel.
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
[Linux] Ein Befehl zum Abrufen einer Liste der in der Vergangenheit ausgeführten Befehle
[Python] Ruft das Datum der letzten Aktualisierung der Website ab
[Python] Erstellen Sie eine Liste mit Datum und Uhrzeit (Datum / Uhrzeit-Typ) für einen bestimmten Zeitraum
Python-Skript zum Abrufen einer Liste von Eingabebeispielen für den AtCoder-Wettbewerb
So erhalten Sie mit Python eine Liste der Dateien im selben Verzeichnis
Die Geschichte von Airflows Webserver und DAG, deren Laden lange dauert
So überprüfen Sie in Python, ob sich eines der Elemente einer Liste in einer anderen Liste befindet
Ich habe es geschafft, weil der Brauch, eine Zip mit einem Passwort an eine E-Mail anzuhängen und "Ich werde Ihnen das Passwort separat senden" zu sagen, mühsam ist.
Ich wollte nur die Daten des gewünschten Datums und der gewünschten Uhrzeit mit Django extrahieren
Skript zum Abrufen des Ablaufdatums des SSL-Zertifikats
Erstellen einer Liste, wenn die Nomenklatur für einen bestimmten Zeitraum gültig ist
Csv spuckte eine Liste mit Dateinamen, zuletzt geänderten Daten und Zeichencodes in Python3 aus
Ruft den Wert eines bestimmten Schlüssels bis zum angegebenen Index der Wörterbuchliste in Python ab
Geben Sie dem Befehl history ein Datum und eine Uhrzeit ein und sammeln Sie Verlaufsdateien aller Benutzer mit einem Skript
Eine einfache Möglichkeit, die in Python benötigte Zeit anzuzeigen und sie intelligenter zu verbessern
Versuchen Sie, die Funktionsliste des Python> os-Pakets abzurufen
[Befehl] Befehl zum Abrufen einer Liste von Dateien mit Zeichen voller Breite
[Python] Erstellen Sie eine Datums- und Zeitliste für einen bestimmten Zeitraum
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
Holen Sie sich eine globale IP und exportieren Sie sie in Google Spreadsheets
So erhalten Sie eine Liste der integrierten Ausnahmen für Python
Holen Sie sich das aktuelle Datum und die aktuelle Uhrzeit in Python unter Berücksichtigung des Zeitunterschieds
So erhalten Sie eine Liste mit Links von einer Seite aus Wikipedia
Gibt es ein Geheimnis in der Häufigkeit der Umfangszahlen?
So verbinden Sie den Inhalt der Liste mit einer Zeichenfolge
Verschrotten Sie die Liste der Go To EAT-Mitgliedsgeschäfte in der Präfektur Fukuoka und konvertieren Sie sie in CSV
[Python] Die Rolle des Sterns vor der Variablen. Teilen Sie den Eingabewert und weisen Sie ihn einer Variablen zu
Verschrotten Sie die Liste der Go To EAT-Mitgliedsspeicher in der Präfektur Niigata und konvertieren Sie sie in CSV
python Hinweis: enumerate () - Index und Element der Liste gleichzeitig abrufen und zur Anweisung wenden
Ich möchte die Ausführungszeit aufzeichnen und ein Protokoll führen.
Setzen Sie das Datum der letzten Änderung der untergeordneten Datei auf das Änderungsdatum des übergeordneten Verzeichnisses
Hinweis: Holen Sie sich das erste und letzte Element von Python OrderedDict zerstörungsfrei
Ich habe versucht, den Index der Liste mithilfe der Aufzählungsfunktion abzurufen
Wie einfach ist es, ein Medikament auf dem Markt zu synthetisieren?
Unter Linux ist der Zeitstempel einer Datei etwas vorbei.
Löschen Sie ein bestimmtes Zeichen in Python, wenn es das letzte ist
Ich habe versucht, mit Boto3 eine Liste der AMI-Namen zu erhalten
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy
Was ist ein Hund? Volumen der GET-Anforderungen und Abfrageparameter
Wie erhalte ich eine Liste ohne Elemente, deren Index i ... ist?
Konvertieren Sie das Ergebnis von Python Optparse, um es zu diktieren und zu verwenden
Durchsuchen Sie das Verzeichnis und erstellen Sie eine Liste mit Verzeichnispfaden und Dateinamen
Erstellen Sie eine Funktion, um den Inhalt der Datenbank in Go abzurufen
Holen Sie sich den Titel und das Lieferdatum von Yahoo! News in Python
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
[Python / Jupyter] Übersetzen Sie den Kommentar des in die Zwischenablage kopierten Programms und fügen Sie ihn in eine neue Zelle ein.
Ist es möglich, ein Pre-Listing-Unternehmen zu gründen und mit Aktienoptionen ein Vermögen zu machen?
Rufen Sie eine Liste der Kameraparameter ab, die mit cv2.VideoCapture festgelegt werden können, und machen Sie daraus einen Wörterbuchtyp
So geben Sie eine Zeichenfolge in Python ein und geben sie unverändert oder in die entgegengesetzte Richtung aus.
Laden Sie Daten mit einem Befehl und einer Aktualisierung auf s3 von aws hoch und löschen Sie die verwendeten Daten (unterwegs).
Für Windows: Ruft eine Liste der Verzeichnisse und Dateien in einem bestimmten Verzeichnis ab.
Bis Sie einen Schnappschuss des Amazon Elasticsearch-Dienstes erhalten und wiederherstellen
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung