[PYTHON] Hinweise zum Zugriff auf SQS von AWS VPC Lambda über den Endpunkt

Fazit

Die Option endpoint_url ist erforderlich, wenn Lambda auf einer VPC unter AWS bereitgestellt und boto3 SQS über einen Endpunkt verwendet wird.

import boto3
sqs = boto3.client("sqs", endpoint_url="https://sqs.ap-northeast-1.amazonaws.com")
sqs.send_message(...)

Ohne diese Option können Sie keine Verbindung herstellen und es tritt eine Zeitüberschreitung auf.

Einzelheiten

Beachten Sie, dass ich beim Bereitstellen von Lamba auf einer VPC unter AWS und bei der Verwendung von SQS mit einer privaten Verbindung durcheinander war. Weitere Informationen finden Sie auf der folgenden Website. Als ich es versuchte, trat das Symptom nur bei Verwendung von boto3 auf Lambda auf.

Unter meinen Bedingungen war Lambdas boto3 Version 1.14.48. Die Version, die ich mit EC2 ausprobiert habe, war 1.16.8, aber das gleiche Phänomen trat auch hier auf.

  1. Vorsichtsmaßnahmen bei der Verwendung von SQS VPC Endpoint mit AWS CLI usw. - https://blog.serverworks.co.jp/tech/2019/03/18/sqsvpcendpoint/
  2. Unable Connect do SQS if using a VPC -- https://github.com/boto/boto3/issues/1900

Gemäß dem Artikel in 1. sagt die AWS-CLI (einschließlich boto3, um dieses Phänomen zu sehen), dass ** selbst wenn QueueUrl beim Herstellen einer Verbindung mit SQS angegeben wird, versucht wird, eine Verbindung zum älteren Endpunkt herzustellen **. Es scheint ein Problem zu sein. Wenn ich einen SQS-Endpunkt in einer VPC erstelle, wird sqs.ap-northeast-1.amazonaws.com (aktueller Endpunkt) eine private IP zugewiesen, ap-northeast-1.queue.amazonaws.com (Legacy-Ende) Punkt) bleibt die öffentliche IP. Wenn ich in diesem Zustand versuche, SQS mit boto3 zu verwenden, scheint die Ursache darin zu liegen, dass ich versucht habe, beim Herstellen einer Verbindung einen älteren Endpunkt zu verwenden, aber keine Verbindung herstellen konnte und keine Zeitüberschreitung aufgetreten ist.

Die Lösung mit Session wird in 2. GitHub gezeigt. Wenn Sie jedoch den aktuellen Endpunkt in der Option "endpoint_url" wie oben angeben, wenn Sie "boto3.client ()" ausführen, liegt das Problem darin gelöst. Als Referenz finden Sie unten den Lösungscode nach Sitzung im GitHub-Artikel.

import boto3
session = boto3.Session()
sqs_client = session.client(
    service_name='sqs',
    endpoint_url='https://sqs.ap-northeast-1.amazonaws.com',
)
sqs_client.send_message(...)

... Ich blieb ungefähr 2 Stunden lang stecken.

Recommended Posts

Hinweise zum Zugriff auf SQS von AWS VPC Lambda über den Endpunkt
Hinweise zum Zugriff auf dashDB über Python
Tweet von AWS Lambda
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
Hinweise zur Verwendung von MeCab aus Python
Führen Sie Python planmäßig auf AWS Lambda aus
Python ruft die Google Cloud Vision API von LINE BOT über AWS Lambda auf
Das Modul kann nicht in Python auf EC2 importiert werden, das von AWS Lambda ausgeführt wird
[Python] Führen Sie Headless Chrome unter AWS Lambda aus