Dieser Artikel ist AWS Beginner Adventskalender 2019 Dies ist der Artikel am 14. Tag von. Ich würde mich freuen, wenn Sie auf Fehler hinweisen könnten.
In Boto3 verfügen einige Dienste über eine Ressourcen-API (aufgerufen von boto3.reosurce ('Dienstname')). Die Ressourcen-API ist abstrakter als die Client-API und kann implementiert werden, ohne unnötige Informationen zu schreiben. Wenn Sie also mit jeder API dasselbe tun können, ist es besser, der Ressourcen-API Priorität einzuräumen.
Lassen Sie uns zunächst erneut bestätigen, was Boto3, Client-API und Ressourcen-API waren. Wenn Sie danach beide APIs verwenden, nehmen Sie die Verwendungsmuster von SQS, S3 und DynamoDB nacheinander auf und vergleichen Sie sie, um festzustellen, wie sie sich unterscheiden. Schließlich schreibe ich eine Liste und Impressionen der Dienste, für die die Ressourcen-API derzeit bereitgestellt wird.
Das mit Python bereitgestellte AWS SDK wird verwendet, um eine Verbindung vom Code zu verschiedenen AWS-Diensten (EC2, DynamoDB, S3 usw.) herzustellen. API-Referenzen finden Sie in den folgenden Ressourcen: Boto 3 Documentation
Zu den APIs gehören hauptsächlich Client-APIs, bei denen es sich um APIs auf niedriger Ebene handelt, und Ressourcen-APIs, bei denen es sich um APIs auf hoher Ebene handelt. Insbesondere wird es mit der folgenden Beschreibung aufgerufen.
# Client API
boto3.client('sqs')
# Resource API
boto3.resource('sqs')
Als nächstes überprüfen wir, welche Eigenschaften jede API hat.
Diese Methode hat eine Eins-zu-Eins-Entsprechung mit der vom AWS-Service bereitgestellten HTTP-API. HTTP-API Es ist vollständig zugeordnet, sodass Sie alles tun können, was die API kann. Da es sich jedoch um eine Allzweckeinstellung handelt, müssen die Parameter für die API direkt für die Methode festgelegt werden. Das folgende Beispiel zeigt die Ausführung von SQS send_message. In der API verwendete QueueUrl usw. sind angegeben.
import boto3
#SQS-Client-API-Version
sqs = boto3.client('sqs')
response = sqs.send_message(QueueUrl='https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue', MessageBody='...')
Referenzquelle: Boto3-Client-API-Dokument (send_message) https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sqs.html#SQS.Client.send_message
Es ist eine Abstraktions-API auf hoher Ebene im Vergleich zur Client-API. Für Entwickler ist es einfacher, eine abstrakte Klasse dazwischen einzufügen, anstatt sie direkt der API zuzuordnen. In diesem Beispiel wird send_message mit der Ressourcen-API auf dieselbe Weise wie mit der Client-API ausgeführt.
queueName='target-queue-name'
#SQS-Ressourcen-API-Version
sqs = boto3.resource('sqs')
response = sqs.get_queue_by_name
QueueName = queueName
).send_message(
MessageBody = '...'
)
Referenzquelle: "Ich habe versucht," Service Resource "in Boto3 (Python) (Lambda) zu verwenden." https://cloudpack.media/16114
Im Vergleich zur Client-API können Sie eine Nachricht schreiben, indem Sie den Warteschlangennamen abfragen, ohne die SQS-URL in den Code zu schreiben. Entwickler müssen nur den Namen der Warteschlange schreiben, da sie nicht jedes Mal die URL der Warteschlange kennen müssen.
Vergleichen Sie als Nächstes die S3-Client-API und die Ressourcen-API. Schreiben Sie beispielsweise den Code, um den Dateinamen aus dem Bucket abzurufen.
#Gemeinsame Konstante(Bucket- und Dateipräfixe in S3)
BUCKET_NAME= "xxx-bucket"
S3_PREFIX = "image-file-done/"
#S3-Client-API-Version
s3_client = boto3.client('s3')
#Rückgabetyp:<class 'dict'>
s3_objects = s3_client.list_objects_v2(Bucket=BUCKET_NAME, Prefix=S3_PREFIX)
for filename in s3_objects['Contents']:
print('client:'+filename['Key'])
#S3-Ressourcen-API-Version
s3_resource = boto3.resource('s3')
#Rückgabetyp:<class 'boto3.resources.collection.s3.Bucket.objectsCollection'>
s3_objects = s3_resource.Bucket(BUCKET_NAME).objects.filter(Prefix=S3_PREFIX)
for filename in s3_objects:
print('resource:'+filename.key)
Bis zum Anruf ist es fast gleich, aber der Typ nach dem Anruf ist unterschiedlich. Wenn es von der Client-API aufgerufen wird, wird es im Wörterbuchtyp zurückgegeben. Daher müssen Daten abgerufen werden, die das bei jeder Implementierung zurückgegebene Wörterbuchtypformat kennen. Wenn es sich um eine Ressourcen-API handelt, handelt es sich um ein Objekt für boto3. Selbst wenn Sie die Ressourcen-API mit anderen Diensten verwenden, können Sie Code mit einer ähnlichen Beschreibung schreiben.
Vergleichen Sie abschließend die DynamoDB-Client-API und die Ressourcen-API. Insbesondere verstehe ich das Boto3-Dokument nicht gut und es scheint, dass ich es oft versehentlich unter Bezugnahme auf andere Beschreibungen kopiere. (Es ist mein altes Ich ...)
#Gemeinsame Konstante(Tabellenname, Hash-Schlüsselname, Sortierschlüsselname)
TABLE_NAME='XXXXX_IFO'
HASH_KEY_NAME='XXXXX_CODE'
SORT_KEY_NAME='DATE_TIME'
#DynamoDB-Client-Version
dynamodb_client = boto3.client('dynamodb')
#Rückgabetyp: <class 'dict'>
response = dynamodb_client.get_item(
TableName=TABLE_NAME,
Key={
HASH_KEY_NAME:{
'S': '54620100'
},
SORT_KEY_NAME:{
'S': '2019050621'
}
}
)
#DynamoDB-Ressourcen-API
dynamodb_resource = boto3.resource('dynamodb')
table = dynamodb_resource.Table(TABLE_NAME)
#Rückgabetyp: <class 'dict'>
response = table.get_item(
Key={
HASH_KEY_NAME: '54620100',
SORT_KEY_NAME: '2019050621'
}
)
Ich habe es nach langer Zeit mit der Client-API geschrieben, aber es ist ein wenig schwierig, weil ich die Parameter im gleichen Format wie die CLI schreibe. Die Rückgabetypen selbst sind Wörterbuchtypen, aber die Operationen in der Tabelle können über das Tabellenobjekt ausgeführt werden, und die Beschreibung des Schlüsselelements ist erheblich einfacher, da Sie die Typinformationen nicht einzeln schreiben müssen.
Die Ressourcen-API bietet eine begrenzte Anzahl von Diensten. Insbesondere werden die folgenden Dienste unterstützt.
Referenzquelle: "Boto 3-Dokumentation" https://boto3.amazonaws.com/v1/documentation/api/latest/index.html
Bei Verwendung der oben genannten Dienste muss zunächst die Ressourcen-API berücksichtigt werden, bevor die Client-API verwendet wird. In den Codebeispielen von Boto3 (Beispieldokumentation) ist DynamoDB eine Ressource. Da jedoch andere EC2- und CloudWatch-Clients Clients sind, müssen Sie sich anscheinend sowohl die verfügbaren Dienste als auch die Codebeispiele ansehen.
Bis jetzt habe ich die Client-API und die Ressourcen-API verwendet, ohne viel darauf zu achten. Daher habe ich die Ergebnisse verschiedener Untersuchungen als Reflexion zusammengefasst. Wie Sie dem SQS-Beispiel entnehmen können, müssen keine unnötigen Informationen in den Codeteil geschrieben werden. Daher werde ich in Zukunft zunächst prüfen, ob der Dienst über eine Ressourcen-API verfügt. Wenn diese bereitgestellt wird, überlegen Sie, ob sie gut verwendet werden kann, und verwenden Sie dann die Client-API. Ich möchte es benutzen. Es scheint, dass in der Client-API auf Qiita und im Internet viele Implementierungen geschrieben sind. Daher möchte ich die Informationen zur Ressourcen-API erweitern, indem ich in Zukunft selbst Artikel schreibe.
Recommended Posts