Wie behebe ich den Fehler „The specified queue does not exist or you do not have access to it.“, wenn ich einen AWS Glue Job ausführe, um Nachrichten an Amazon SQS in einer anderen Region zu senden?
Ich habe einen AWS Glue Job zum Extrahieren, Transformieren und Laden (ETL) erstellt, um Nachrichten an eine Warteschlange von Amazon Simple Queue Service (Amazon SQS) zu senden. Die Amazon SQS-Warteschlange befindet sich jedoch in einem anderen AWS-Konto, das sich in einer anderen AWS-Region befindet. Wenn ich den Job ausführe, erhalte ich die Fehlermeldung „The specified queue does not exist or you do not have access to it.“
Kurzbeschreibung
Wenn sich die Amazon SQS-Warteschlange in einer anderen AWS-Region befindet als der AWS Glue-Job, müssen Nachrichten an die Warteschlange Regionsinformationen enthalten. Wenn Sie in Ihrer Nachricht keine Regionsinformationen angeben, schlägt Ihr ETL-Job mit dem folgenden Fehler fehl:
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)
Lösung
Angenommen, Sie haben ein AWS-Konto namens Konto A in der AWS-Region us-west-2 und ein weiteres Konto namens Konto B in der Region us-east-1. Gehen Sie wie folgt vor, um einen AWS Glue Spark-Job in Konto A zu erstellen, der Nachrichten an Amazon SQS in Konto B sendet:
- Erstellen Sie eine Amazon-SQS-Warteschlange in Konto B mit der folgenden Zugriffsrichtlinie. Diese Zugriffsrichtlinie bietet Zugriff auf die Rolle AWS Identity and Access Management (IAM), die Konto A dem AWS Glue Spark-Job zuweist. Sie können diese erforderlichen Berechtigungen auch einem bestimmten IAM-Benutzer (z. B. testuser) in Konto A gewähren. Weitere Informationen finden Sie unter Grundlegende Beispiele für Amazon SQS-Richtlinien.
Hinweis: Ersetzen Sie Folgendes in der vorherigen Richtlinie:{ "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" } ] }
111122223333444 mit der AWS-Konto-ID für Konto A
5555666677778888 mit der AWS-Konto-ID für Konto B
testuser mit dem Namen des IAM-Benutzers in Konto A
GlueSparkJobIAMRole mit der IAM-Rolle, die dem AWS Glue Spark Job in Konto A zugeordnet ist test-queue mit dem Namen der Warteschlange, die in Konto B erstellt wurde - Erstellen Sie einen AWS Glue-ETL-Job in Konto A. Wählen Sie auf der Seite Auftragseigenschaften konfigurieren die Option Ein neues Skript, das von Ihnen erstellt werden soll. Weitere Informationen finden Sie unter Konfiguration der Auftragseigenschaften für Spark-Jobs in AWS Glue.
Fügen Sie das folgende Python-Skript in den Job ein, um eine Nachricht an die Amazon-SQS-Warteschlange in Konto B zu senden:
Hinweis: Ersetzen Sie im vorherigen Skript Folgendes: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'])
5555666677778888 mit der AWS-Konto-ID von Konto B
glue-queue mit dem Namen der Amazon-SQS-Warteschlange
**Beispielnachricht ** mit der Nachricht, die der AWS Glue-Job an die Amazon SQS-Warteschlange sendet
Die MessageAttributes Schlüssel und Werte mit Ihren eigenen Schlüsseln und Werten - Identifizieren Sie die AWS Identify Access Management (AWS IAM)-Rolle, die dem AWS Glue Spark Job in Konto A zugeordnet ist. Erteilen Sie dann Amazon SQS die erforderlichen Berechtigungen für diese Rolle. Sie können beispielsweise die von AWS verwaltete Richtlinie AmazonSQSFullAccess an diese AWS-IAM-Rolle anhängen. Weitere Informationen finden Sie unter Einrichten von IAM-Berechtigungen für AWS Glue.
- Führen Sie den AWS Glue ETL Job aus, der in Konto A erstellt wurde.
- Stellen Sie sicher, dass der Job erfolgreich abgeschlossen wurde, indem Sie überprüfen, ob der Job die Nachricht an die Amazon-SQS-Warteschlange in Konto B gesendet hat.
- Um die Nachricht in der Amazon-SQS-Warteschlange in Konto B zu empfangen, fragen Sie nach der Nachricht in der Warteschlange. Weitere Informationen finden Sie unter Empfangen und Löschen einer Nachricht in Amazon SQS.
- Stellen Sie sicher, dass Sie die von Konto A gesendeten Nachrichten in der Warteschlange sehen können.
Ähnliche Informationen
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Monaten
- AWS OFFICIALAktualisiert vor 8 Monaten
- AWS OFFICIALAktualisiert vor 9 Monaten