Remarques sur l'accès à SQS depuis AWS VPC Lambda via un point de terminaison

Conclusion

L'option endpoint_url est requise lors du déploiement de Lambda sur un VPC sur AWS et de l'utilisation de boto3 SQS via un point de terminaison.

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

Sans cette option, vous ne pourrez pas vous connecter et expirera.

Détails

Notez que j'ai été gâché lors du déploiement de Lamba sur un VPC sur AWS et de l'utilisation de SQS avec une connexion privée. Pour plus de détails, veuillez consulter le site suivant. Quand je l'ai essayé, le symptôme ne s'est produit que lors de l'utilisation de boto3 sur Lambda.

Dans mes conditions, le boto3 de Lambda était la version 1.14.48. De plus, la version que j'ai essayée avec EC2 était la 1.16.8, mais le même phénomène s'est produit ici aussi.

  1. Précautions lors de l'utilisation de SQS VPC Endpoint avec AWS CLI, etc. - 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

Selon l'article en 1., l'AWS CLI (y compris boto3 pour voir ce phénomène) dit que ** même si QueueUrl est spécifié lors de la connexion à SQS, il essaiera de se connecter au point de terminaison hérité **. Cela semble être un problème. Lorsque je crée un point de terminaison SQS dans un VPC, sqs.ap-northeast-1.amazonaws.com (point de terminaison actuel) se voit attribuer une adresse IP privée, mais ap-northeast-1.queue.amazonaws.com (extrémité héritée) Point) reste l'adresse IP publique. Dans cet état, lorsque j'essaye d'utiliser SQS avec boto3, il semble que la cause soit que j'ai essayé d'utiliser un point de terminaison hérité lors de la connexion, mais je n'ai pas pu me connecter et j'ai expiré.

La solution utilisant Session est présentée dans 2. GitHub, mais si vous spécifiez le point de terminaison actuel dans l'option ʻendpoint_url comme ci-dessus lors de l'exécution de boto3.client () `, le problème est résolu. Pour référence, le code de la solution par Session dans l'article GitHub est ci-dessous.

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

... Je suis resté coincé pendant environ 2 heures.

Recommended Posts

Remarques sur l'accès à SQS depuis AWS VPC Lambda via un point de terminaison
Remarques sur l'accès à dashDB à partir de python
Tweet d'AWS Lambda
Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)
Remarques sur l'utilisation de MeCab depuis Python
Exécutez Python selon la planification sur AWS Lambda
Python appelant l'API Google Cloud Vision depuis LINE BOT via AWS Lambda
Le module ne peut pas être importé en Python sur EC2 exécuté à partir d'AWS Lambda
[Python] Exécutez Headless Chrome sur AWS Lambda