Рубрики
Без рубрики

AWS SQS/SNS | Parte 1 | Infutando mensageria pub/sub com python

Este Texto faz parte de uma série, Veja Também os outros textos dessa série: aws sqs/sns | Parte 1 … Tagged с помощью AWS, без сервера, микросервисов, Python.

Este Texto faz parte de uma série, Veja Também opros Textos Dessa Série:

  • AWS SQS/SNS | Parte 1 | Infutando mensageria pub/sub com python

  • AWS SQS/SNS | Parte 2 | Publicando uma mensagem через SNS

  • AWS SQS/SNS | Parte 3 | Потребиние Filas Sqs Usando Python

  • AWS SQS/SNS | Parte 4 | Afinal, O Que Säo как очередь мертвых букв?

ЕС DECIDI ME DESAFIAR E ARPENDER ALGO NOVO. Nesse Projeto eu Quis estudar e Explorar Uma tecnologia Que eu ainda não utilizava, Então decidi me desafiar a replectar um pequeno projeto utilizando os canceitos aprendidos. Парарррар Минха Джорнада Реолви Эскревер Ума Сери де текст Компарилхандо О Que Eu Tenho Aprendido, Ao Longo Dessa Série Irei infular o Padrão Publish/подпишитесь на Utilizando dois serviços que sesao desacoplados. O Ссылка para o Repositório onde o projeto está em desenvolvimento está Акми.

Поскольку Tecnologias Escolhidas Forma Amazon Simple Queue Service (AWS SQS) E Amazon Simple Natification Service (AWS SNS), Serem utilizadas epis construídas com django Rest Framework e utilizando A Lib Boto3 que éma amazon Web Services sdk para python.

Com A Tecnologia decidida e Uma Ideia do Que eu Iria desenvolver, Agora é Hora de gocecar o Projeto.

MAS Não Poderia Começar Sem Mergulhar antes em alguns conhecimento teóricos sobre a sqs e a sns, Amazon Contém Maity Mater o Que FARITITOU BASTANTE PARA UM CANDIMENTIMENTO INICIAL. MAS PARA QUEM não está tão ackagedizado com essas tecnologias da aws calma que eu vou dar uma pincelada no que se trata esses serviços.

O Que Seriam A Amazon Sns E Amazon Sqs? De forma geral a sns é o serviço da amazon para publicação de notificaçes/mensagens para grandes números de endpoints. Ele é muito útil para aplicações de microserviços e/ou sistemas galibuídos, pois ajudam a Garantir o desacoplamento entre os serviços ao mesmo tempo em que remitem que se estabeleça uma comunicação entre eles.

Os canais para envio de mensagens criados com a sns s Сааочадос де -Топико и Када Топико UM ENDPOINT NO SNS PODE SER UM USUARIO финал Através de umma um sms, ассим Комо Тамбем Под -провр Ауто Сертичо да Ава Комо -о Лэмбда Оу, кв.

AWS SQS VEM PARA PARA FARLAR ESSE SISTEMA DE MENSAGERIA, Como O Proprio Nome Já Indo A Sqs é Um Serviço de Filas Que Também ajuda a Garantir O Desacoplamento. Esse serviço permite que seja enviado, armazenado e recebodo mensagens de forma assíncrona entre aplicações, sem que kaja perda de mensagens ou que seja reciorio o sistema disponível.

O Serviço sqs реализовать filas normais que suportam Quantidade quase que ilimitada de transações por segundo, mas em contrapartida não garantia de que serão orges por ordem de chegada, e wezes é quevel que que que que que que que que que Quevel que que que Quevel que Quevel que Quevel que jesagens sejames de de de de de de reezes re. Autra uppultação possity vovel a a as filas fifo que seguem o princookipio сначала в первую очередь, Сан -Филас Онд в роли Менсагенс Сегем Эстритам nos seus envios e cecementos, assim como também há a garantia de que as mensagens serão вводит Uma única vez e estarão disponíveis aguardando o seu -exproceamento e. Porém As Filas Fifo Tem Uma Taxa Limitada de Mensagens Por Segundo, Suportando em Média 300 Operação de Mensagem (Envio, Decebimento ou exclusão) por segundo.

Нет, Decisáo de Que tipo de fila você irá infular irá despender inteiramente de quale необходим, чтобы сделать Seu Projeto, так как Vezes seu projeto precisa que muitas mensagens sejam disparadas por segundo como eplicaçes de caré de credito. MAS AS VEZES VOCE PRECISA QUE SEJA GARANTIDO UMA DETRINADA ORDEM, Como em Um Aplicativo de compras que para finalizar o Pedido você precisa antes ter cadastrado o seu endereço. Важный Fazer o Levantamento dos seus requisitos para poder define Qual tipo de fila é Mais Adequada pro seu projeto, Nesse projeto exemplo rei usar в качестве Comum.

Com esses dois serviços é possível estabelecer o padrão de Publish-Subscribe, essa estrutura permite que se estabeleça uma comunicação totalmente assíncrona entre dois serviços independentes, por possibilitar esse nível de desacoplamento é que essa estrutura é bastante utilizada em arquiteturas de microserviço ou serveless.

De modo geral, существующий Serviço b que aguarda o cecebimento de notificação que serão enviadas por um serviço a, mas que esses dois serviços não tem nenhuma ligação direta. Em Diversas Situações o Serviço B, Por Ser Competime Independente, Não Necenceariamente Precisaria Sabre de Quem é Que Se Origina notificaço que eleceu, deveria saber apenas que ele ecebeu uma mensagem e deverá seguir o seuir processamento a partitr dela dela.

Nesse Caso, o Serviço a Apenas Dishraria, менеджогемная пара, эссоя, эс -эль -тодос, эссе, Que estáo inscritos nele, que nosso exemplo seria uma fila sqs sqs squ -a a ae mon a a a ae semen a a a ae mon a servece a ae searce nosso sera -uma oase oase a ae ae ae a ae ae ae ae a a a ae searse a ae ae ae men nosso osse seri IRIA VERIFIFICAR QUAI в качестве менгенс Форам Disponibilizadas na fila Qual Tem Acesso.

Нет диаграммы de examemplo abaixo mostra como aconteceria esse fluxo, podemos ver ouctline que é ous yovel enviar uma mensagem para inscritos empificos de um tópico, desse modo ésível como ormo um um um um um um um um um um um um um um um um um um um um um um um um um um um um um um um um um ommo um ompinos orbrico demo orsinos orsinos orsinos orsinos orsinos orsinos orsinos oryvico dom Возможность фильтрара o envio dessa mensagem. Futuramente farei uma upleação do uso desses filtros e compartilharei aqui com ocês, para esse início iremos keyçar simples compenas 1 tópico sn inviando mensagens para 1 fila sqs.

Você pode utilizar o Консоль da aws tanto para criasço Quanto para configuração e acesso dos tópicos e das filas, mas Amazon Também Disponibiliza Sdk’s Para Criaso e Gerenciamente Desseses ServiAcos Via Código. Nesse projeto eu irei utilizar o boto3, que é UM SDK DA AWS INTRALADADO PARA LINGUAGEM Python, Tanto Para CrioCão E Configuração dos tópicos e de filas, como paraamento e envio de mensagens nos código mostrados nos futuros textos dessa série.

PRECISAMOS Importancar O Boto3 E Instanciar OS клиенты

Lembrando Que Aqui Você deverá lepituir e utilizar в роли Suas Credenciais da Aws.

import boto3

sns_client = boto3.client(
            'sns', 
            aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
            aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
            region_name='us-east-1')

sqs_client = boto3.client(
            'sqs', 
            aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
            aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
            region_name='us-east-1')

Criando Um Tópico

PARA CRIAR UM TOPICO BASTA DAR-LHE UM NOME, ESOMENVEVERELIZAR CONFIGNURURACõES MAIS ESPERIFICAS UTILISANDO O BOTO3, MAS POR AGORA MANTEREMOS SIMPLES.

topic_arn = sns_client.create_topic(
    Name='PurchaseEvents'
)['TopicArn']

Криандо Ума Фила

CRIAR FILAS IGUALMENTE SIMPLES, PORém ESSECTEMAS CONFIGNURURURAçES QUE AO DECORRRE DO PROJETO VEREMOS QUE SERá Essential Fazer.

queue = sqs_client.create_queue(
    QueueName='PaymentQueue'
)
queue_url, queue_arn = queue['QueueUrl'], queue['QueueArn']

Primeira dela é criar a persissão de que o tópico Que a Gentre Criou Logo Acima osper inviar mensagens para esta fila, para isso devemos declarar a seguinte política de acesso.

queue_sns_policy = {
        "Version": "2012-10-17",
        "Statement": [
            {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "SQS:SendMessage",
            "Resource": queue_arn,
            "Condition": {
                "StringEquals": {
                "aws:SourceArn": topic_arn
                }
            }
            }
        ]
        }

sqs_client.set_queue_attributes(
    QueueUrl= queue_url
    Attributes={
         'Policy' : json.dumps(queue_sns_policy)
    }
)

Inscrevendo a fila no nosso tópico

Agora Que Temos o nosso tópico e a nossa fila sqs que já está configurada para para mensagens do tópico, falta apenas inscrever a fila para que quando uma mensagem for enviada para o nosso tópico elem gense mensagem для enviada para o nosso tópico ele ele para nossa fila.

payment_subscription = sns_cliente.subscribe(
    TopicArn = topic_arn,
    Protocol = 'sqs',
    Endpoint = queue_arn
)

Código Completo

import boto3

# Instanciando o cliente SNS e SQS utilizando as credenciais da AWS
# substitua pelas suas credenciais.
sns_client = boto3.client(
            'sns', 
            aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
            aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
            region_name='us-east-1')

sqs_client = boto3.client(
            'sqs', 
            aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
            aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
            region_name='us-east-1')

# Criação de um tópico, salvando o Arn do tópico criado para uso
# futuro.
topic_arn = sns_client.create_topic(
    Name='PurchaseEvents'
)

# Criação de uma fila, salvando o Arn da fila criada para uso futuro.
queue = sqs_client.create_queue(
    QueueName='PaymentQueue'
)
queue_url, queue_arn = queue['QueueUrl'], queue['QueueArn']

# Importante lembrar que a fila precisa ter uma política de acesso que
# permita o recebimento das mensagens advindas do seu tópico, por isso 
# iremos atualizar a fila para aceitar essa política.
queue_sns_policy = {
        "Version": "2012-10-17",
        "Statement": [
            {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "SQS:SendMessage",
            "Resource": queue_arn,
            "Condition": {
                "StringEquals": {
                "aws:SourceArn": topic_arn
                }
            }
            }
        ]
        }

# Atualizar a política de acesso da fila.
sqs_client.set_queue_attributes(
    QueueUrl= queue_url
    Attributes={
         'Policy' : json.dumps(queue_sns_policy)
    }
)

# Inscrevendo a fila no tópico recém criado.
payment_subscription = sns_cliente.subscribe(
    TopicArn = topic_arn,
    Protocol = 'sqs',
    Endpoint = queue_arn
)

E Assim finalizamos a Parte 1 Desse Projeto Para Explorar в качестве Funcionalidades da aws sqs e sns. Нет proóximo texto irei mostrar um pouco da infulação da api em drf e como realizar age age age agetazão com o tópico e fila que a agora.

Оригинал: “https://dev.to/mchdax/implementando-mensageria-pub-sub-com-python-aws-sns-e-sqs-parte-1-5cpn”