Comment puis-je résoudre l'erreur « La file d'attente spécifiée n'existe pas ou vous n'y avez pas accès. » lors de l'exécution de ma tâche AWS Glue pour envoyer des messages à Amazon SQS dans une autre région ?

Dernière mise à jour : 24/03/2021

J'ai créé un une tâche d'extraction, transformation et chargement (ETL) AWS Glue pour envoyer des messages à une file d'attente Amazon Simple Queue Service (Amazon SQS) sur un autre compte AWS dans une autre région. Lorsque j'exécute la tâche, j'obtiens l'erreur, « La file d'attente spécifiée n'existe pas ou vous n'y avez pas accès. »

Brève description

Si la file d'attente Amazon SQS se trouve dans une autre région que celle de la tâche ETL Glue, vous devez transmettre les informations de région lors de l'envoi de messages à la file d'attente Amazon SQS. Sinon, votre tâche ETL échoue avec l'erreur suivante :

ERROR [main] glue.ProcessLauncher (Logging.scala:logError(70)): Exception in User Class: com.amazonaws.services.sqs.model.QueueDoesNotExistException :The specified queue does not exist or you do not have access to it. (Service: AmazonSQS; Status Code: 400; Error Code: AWS.SimpleQueueService.NonExistentQueue; Request ID: 3861e4c0-9b49-5404-a4c6-bcd3ed43fe20)

Solution

Pour créer une tâche AWS Glue Spark pour le compte A dans la région us-west-2 afin d'envoyer des messages à Amazon SQS pour le compte B dans la région us-east-1, procédez comme suit :

1.    Créer une file d'attente Amazon SQS dans le compte B avec la stratégie d'accès qui suit. Cette stratégie d'accès permet d'accéder au rôle AWS Identity and Access Management (IAM) qui serait associé à la tâche AWS Glue Spark dans le compte A. Vous pouvez également accorder ces autorisations requises à un utilisateur IAM spécifique (par exemple, testuser) dans le compte A. Pour plus d'informations, consultez Exemples de base de stratégies Amazon SQS.

{
    "Version": "2008-10-17",
    "Id": "__default_policy_ID",
    "Statement": [
        {
            "Sid": "__owner_statement",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333444:role/GlueSparkJobIAMRole",
                    "arn:aws:iam::111122223333444:user/testuser"
                ]
            },
            "Action": "sqs:SendMessage",
            "Resource": "arn:aws:sqs:us-east-1:5555666677778888:test-queue"
        }
    ]
}

Remplacez ce qui suit dans la stratégie ci-dessus :

  • 111122223333444 avec l'ID de compte AWS pour le compte A.
  • 5555666677778888 avec l'ID de compte AWS pour le compte B.
  • testuser avec le nom de l'utilisateur IAM dans le compte A.
  • GlueSparkJobIAMRole avec le rôle IAM associé à la tâche AWS Glue Spark dans le compte A.
  • test-queue avec le nom de la file d'attente créée dans le compte B.

2.    Créer une tâche ETL AWS Glue dans le compte A. Pour plus d'informations, consultez Ajout de tâches dans AWS Glue. Sur la page Configuration des propriétés de tâche, sélectionnez Un nouveau script qui sera rédigé par vous. Inclure le script Python dans la tâche pour envoyer un message à la file d'attente Amazon SQS dans le compte B :

import boto3
sqs = boto3.client('sqs', region_name="us-east-1")
queue_url = 'https://sqs.us-east-1.amazonaws.com/5555666677778888/glue-queue'
response = sqs.send_message(
    QueueUrl=queue_url,
    DelaySeconds=10,
    MessageAttributes={
        'Title': {
            'DataType': 'String',
            'StringValue': 'The Whistler'
        },
        'Author': {
            'DataType': 'String',
            'StringValue': 'John Doe'
        },
        'WeeksOn': {
            'DataType': 'Number',
            'StringValue': '6'
        }
    },
    MessageBody=('Example message'))
print(response['MessageId'])

Remplacez ce qui suit dans le script ci-dessus :

  • us-est-1 avec la région dans laquelle la file d'attente Amazon SQS est présente
  • 5555666677778888 avec l'ID de compte AWS du compte B
  • glue-queue avec le nom de la file d'attente Amazon SQS
  • Exemple de message avec le message à envoyer à la file d'attente SQS

Remplacez les attributs de message et les valeurs correspondantes dans le script par les attributs et les valeurs de message souhaités.

3.    Identifiez le rôle AWS Identifier Access Management (AWS IAM) associé à la tâche AWS Glue Spark dans le compte A. Ensuite, accordez à Amazon SQS les autorisations requises pour ce rôle. Pour plus de simplicité, vous pouvez associer la stratégie gérée AWS AmazonSQSFullAccess à ce rôle AWS IAM. Pour plus d'informations, consultez Configuration des autorisations IAM pour AWS Glue.

4.    Exécutez la tâche ETL AWS Glue créée dans le compte A.

5.    Assurez-vous que la tâche s'est terminée correctement en vérifiant qu'elle a bien envoyé le message à la file d'attente Amazon SQS dans le compte B.

6.    Pour recevoir le message dans la file d'attente Amazon SQS du compte B, interrogez le message dans la file d'attente. Pour plus d'informations, consultez Réception et suppression de messages (console).

7.    Vérifiez que vous pouvez afficher les messages envoyés à partir du compte A dans la file d'attente.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?