Ich bin Wakamatsu, ein Anfänger von Lambda (Python).
Benutzt ihr plötzlich alle Lambda?
Der Code funktioniert ohne Server. Es ist attraktiv, nicht wahr?
Immerhin sind die Zeiten serverlos. Ich möchte in der Lage sein, ungefähr eine Sprache in der Infrastruktur zu verwenden.
Mitten in einer großzügigen Generation, die einem solchen Trend nicht widerspricht, trat ich schließlich in Lambda ein.
Die Einführung ist länger geworden, aber ich hoffe, dass der Infrastruktur-Shop mit dem Gefühl, dass sie kämpfen und Witze machen, warm aussehen wird.
Ich möchte die Instanz-ID einer Instanz abrufen, die eine bestimmte IP hat.
AWS Lambda Python 3.6
Vorerst habe ich mich entschlossen, alle Instanzinformationen abzurufen, also habe ich den folgenden Code geschrieben.
import boto3
def lambda_handler(event, context):
ec2 = boto3.client('ec2')
responce = ec2.describe_instances()
return responce
Die Rückgabe schlägt mit dem folgenden Fehler fehl
{
"errorMessage": "An error occurred during JSON serialization of response",
"errorType": "datetime.datetime(2017, 5, 11, 5, 15, 59, tzinfo=tzlocal()) is not JSON serializable"
}
Es scheint, dass das Ergebnis nicht so wie es ist als JSON behandelt werden kann.
Wenn ich die boto3-Referenz aufrufe, scheint der Rückgabewert von description_instances vom Typ dict (dictionary) zu sein. Vorerst ist es besser, mit Druck auszugeben, deshalb habe ich beschlossen, den Code zu ändern.
Ändern Sie die Ausgabe vorerst in eine Druckanweisung
import boto3
def lambda_handler(event, context):
ec2 = boto3.client('ec2')
responce = ec2.describe_instances()
print(responce)
return
Folgendes wurde in das Protokoll ausgegeben. Das sehen Sie häufig in den AWS CLI-Ergebnissen.
{
"Reservations": [
{
"OwnerId": "xxxxxxxxxxxx",
"ReservationId": "r-xxxxxxxxxxxxxxxxx",
"Groups": [],
"Instances": [
{
"Monitoring": {
"State": "disabled"
},
"PublicDnsName": "ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com",
"Platform": "xxxxxxx",
"State": {
"Code": 80,
"Name": "stopped"
},
"EbsOptimized": false,
"LaunchTime": "xxxx-xx-xxxxx:xx:xx.xxxx",
"PublicIpAddress": "xxx.xxx.xxx.xxx",
"PrivateIpAddress": "xxx.xxx.xxx.xxx",
"ProductCodes": [],
"VpcId": "vpc-xxxxxxx",
"StateTransitionReason": "",
"InstanceId": "i-xxxxxxxxxxxxxxxxx",
"EnaSupport": true,
"ImageId": "ami-xxxxxxxx",
Folgendes wird weggelassen
Als nächstes möchte ich nach IP eingrenzen.
Es scheint, dass --filter
in AWS CLI auch in boto3 enthalten ist, daher habe ich mich für die Verwendung entschieden.
Filter hinzugefügt, um auf Instanzen mit einer bestimmten IP einzugrenzen
import boto3
def lambda_handler(event, context):
ec2 = boto3.client('ec2')
responce = ec2.describe_instances(
Filters=[{'Name':'network-interface.addresses.private-ip-address','Values':["xxx.xxx.xxx.xxx"]}]
)
print(responce)
return
Eingeschränkt auf Instanzen mit der angegebenen IP-Adresse.
Grenzen Sie als Nächstes den Rückgabewert auf die Instanz-ID ein. Das Bild ist "--query" in AWS CLI, aber es scheint nicht in boto3 zu sein. Es fiel mir schwer, weil ich von den Informationen im Internet getanzt wurde, weil ich hier zu JSON konvertierte. Als Ergebnis stellte ich fest, dass der Diktattyp in der Lage zu sein scheint, den Wert durch Schreiben von ["hoge"] ["fuga"] nach dem Objekt abzurufen.
import boto3
def lambda_handler(event, context):
ec2 = boto3.client('ec2')
responce = ec2.describe_instances(
Filters=[{'Name':'network-interface.addresses.private-ip-address','Values':["xxx.xxx.xxx.xxx"]}]
)["Reservations"][0]["Instances"][0]["InstanceId"]
print(responce)
return
Herzlichen Glückwunsch zum Erhalt der Instanz-ID. Ich möchte darauf hinweisen, dass es notwendig ist, 0 explizit als "[0]" zu schreiben, wenn es eine Liste gibt.
Was haben Sie gedacht. Der Inhalt, den ich mache, ist sehr rudimentär, aber ich war süchtig danach, also habe ich ihn als Memorandum zusammengefasst.
Es ist überraschend leicht zu bewegen, also probieren Sie es bitte aus. Lambda Ich habe keine Angst.
Recommended Posts