Estoy tratando de escribir un comando aws cli de cuenta cruzada para suscribirme a un tema y crear un filtro para esa suscripción al mismo tiempo. A continuación se muestra cómo se ve mi comando.
aws sns subscribe --topic-arn arn:aws:sns:region:accountId:my_topic --protocol sqs --notification-endpoint arn:aws:sqs:region:differentAccountId:my_sqs_queue --attributes "{'RawMessageDelivery': 'true', 'FilterPolicy': '{\"filter\": [\"value1\", \"value2\"]}'}"Recibo el siguiente error cuando ejecuto esto.
Unknown options: --attributes, [\value1\,, \value2\]}'}, {'RawMessageDelivery': 'true', 'FilterPolicy': '{" filter\:Tengo acceso al acceso de administrador a las dos cuentas de AWS. ¿Alguna sugerencia sobre lo que estoy haciendo mal?
EDITAR: Estoy ejecutando esto en el terminal PowerShell de VS Code en Windows.
Probablemente haya una manera más fácil de hacerlo (por ejemplo, usando --cli-input-json y proporcionando JSON en un archivo), pero lo hice funcionar:
aws sns subscribe \ --topic-arn arn:aws:sns:region:accountId:my_topic \ --protocol sqs \ --notification-endpoint arn:aws:sqs:region:differentAccountId:my_sqs_queue \ --attributes '{\"RawMessageDelivery\": \"true\", \"FilterPolicy\": \"{\\\"filter\\\": [\\\"value1\\\", \\\"value2\\\"]}\"}' El problema era el JSON incluido en una cadena, que necesitaba que \" se escapara como \\\" .
Este repositorio de Github tiene un ejemplo: https://github.com/Haple/sns-sqs-subscribe
#!/bin/sh # SETUP queue_arn=$(awslocal sqs create-queue --queue-name test_queue --output text) echo "Queue ARN: $queue_arn" topic_arn=$(awslocal sns create-topic --name test_topic --output text) echo "Topic ARN: $topic_arn" subscription_arn=$(awslocal sns subscribe \ --topic-arn "$topic_arn" \ --protocol sqs \ --notification-endpoint "$queue_arn" \ --output text) echo "Subscription ARN: $subscription_arn" awslocal sns set-subscription-attributes \ --subscription-arn "$subscription_arn" \ --attribute-name FilterPolicy \ --attribute-value "{ \"EVENT_TYPE\": [\"SUCCESS\"] }" # TEST awslocal sns publish \ --topic-arn "$topic_arn" \ --message "SUCCESS PAYLOAD (SHOULD GO TO THE QUEUE)" \ --message-attributes '{"EVENT_TYPE" : { "DataType":"String", "StringValue":"SUCCESS"}}' awslocal sns publish \ --topic-arn "$topic_arn" \ --message "ERROR PAYLOAD (SHOULD NOT GO TO THE QUEUE)" \ --message-attributes '{"EVENT_TYPE" : { "DataType":"String", "StringValue":"ERROR"}}' awslocal sqs get-queue-attributes \ --queue-url http://localhost:4576/queue/test_queue \ --attribute-names AllEl proceso general en las respuestas anteriores está bien, pero hay un gran problema:
No sé por qué nadie menciona esto, pero todo no funciona si no configura correctamente el documento de política de cola de SQS .
El ejemplo de github no lo hace y, por alguna razón, la documentación de AWS ni siquiera lo menciona.
Consulte esta pregunta: Establecer documento de política de SQS con AWS CLI
Perdí un par de días resolviendo este problema. Así que espero que ayude.