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). Cependant, la file d'attente Amazon SQS se trouve dans un autre compte AWS situé dans une autre région AWS. Lorsque j'exécute le job, 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 AWS Glue, vous devez transmettre les informations de région lors de l'envoi de messages. Si vous ne le faites pas, 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)
Résolution
Soit un compte AWS appelé Compte A dans la région AWS us-west-2 , et un autre compte appelé Compte B dans la région us-east-1 . Pour créer une tâche AWS Glue Spark pour le compte A afin d'envoyer des messages à Amazon SQS pour le compte B procédez comme suit:
- 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"
}
]
}
**Remarque :**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
- Créer une tâche ETL AWS Glue dans le compte A. Sur la page Configuration des propriétés de tâche, sélectionnez Un nouveau script qui sera rédigé par vous. Pour plus d'informations, consultez Configuration des propriétés de tâche sur AWS Glue.
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'])
**Remarque :**Remplacez ce qui suit dans le script ci-dessus :
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 que la tâche AWS Glue envoie à la file d'attente SQS
Les clés et valeurs MessageAttributes avec vos propres clés et valeurs
- 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. Vous pouvez, par exemple, associer la politique gérée par AWS AmazonSQSFullAccess au rôle IAM d'AWS. Pour plus d'informations, consultez Configuration des autorisations IAM pour AWS Glue.
- Exécutez la tâche ETL AWS Glue créée dans le ** compte A**.
- 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.
- 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 la section Réception et suppression d'un message dans Amazon SQS.
- Vérifiez que vous pouvez afficher les messages envoyés à partir du compte A dans la file d'attente.
Informations connexes
Gestion de la file d'attente Amazon SQS