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.
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.
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