Skip to content
malak.cloud
  • Kontakt
  • O mnie
  • Search Icon

malak.cloud

Cloud Native na co dzień

AWS SNS i NET.Core

AWS SNS i NET.Core

13 października 2017

Pracuję nad projektem, w którym muszę pobrać dane z MySQL na AWS, przetworzyć je i zapisać do Azure SQL. Rozwiązanie będzie pracowało tylko raz na jakiś czas, staram sie więc wykorzystać dobrodziejstwa serverless. Piszę w Pythonie i NET.Core i dziś chciałem wysłać powiadomiania za pomocą AWS SNS i NET.Core i nie było tak hopsiup. Musiałem trochę poszperać i popróbować. Żaden znaleziony tutorial, żaden przykład nie działał. Nawet na StackOverflow nie znalazłem nic do dziedziczenia edytorowego (CTRL-C/CTRL-V) 🙂
Udało się coś zrobić, więc notuję. Ku pamięci.

Na GitHub wrzuciłem gotowe, proste rozwiązanie. Tu je tylko krótko opiszę.

Będziemy potrzebowali paczki AWSSDK.SimpleNotificationService. Dodajemy więc do csproj

<PackageReference Include="AWSSDK.SimpleNotificationService" Version="3.3.0.22" />

Dla wygody skorzystamy z klasy, która trzyma dane dostępowe do naszego regionu AWS.

public class AWSCredentials
{
    public string AccessKey {get; set;}
    public string SecretKey { get; set; }
    public RegionEndpoint Region { get; set; }

    public AWSCredentials(string accessKey, string secretKey, RegionEndpoint region)
    {
        AccessKey = accessKey;
        SecretKey = secretKey;
        Region = region;
    }
}

Samo wysyłanie wiadomości to raptem dwie linie kodu. Dla czytelności opakowałem to w metodę.

public async Task SendAWSNotification(AWSCredentials credentials, string topicArn, string message)
{
    Console.WriteLine("--SENDING-MESSAGE----------------------");
    var client = new AmazonSimpleNotificationServiceClient(credentials.AccessKey, credentials.SecretKey, credentials.Region);
    Console.WriteLine("Pushing message to topic: {0}", topicArn);
    var publishResponse = await client.PublishAsync(topicArn, message);
    Console.WriteLine("Message sent with HttpStatusCode: {0}", publishResponse.HttpStatusCode);
    Console.WriteLine("---------------------------------------");
}

Jako parametr metody AmazonSimpleNotificationServiceClient.PublishAsync możemy wykorzystać także obiekt PublishRequest, który daje nam trochę większe możliwości. Możemy na przykład zmienić temat wiadomości

var publishRequest = new PublishRequest();
publishRequest.Subject = "Message subject";
publishRequest.Message = message;
publishRequest.TopicArn = topicArn;
publishResponse = await client.PublishAsync(publishRequest);

czy też wysłać ją bezpośrednio sms-em

var phonePublishRequest = new PublishRequest();
phonePublishRequest.Message = message;
phonePublishRequest.PhoneNumber = "YOUR-PHONE-NUMBER";
publishResponse = await client.PublishAsync(phonePublishRequest);

Trzeba pamiętać, że nie da się jednocześnie ustawić TopicArn i PhoneNumber.

SMS

W repozytorium na GitGub jest także przerobiona i działająca metoda pobierająca listę tematów SNS i wyświetlająca informacje o nich. Chętnych zapraszam.


AWS, CloudNative, Cookbook, DEV
AWS, Dev, serverless

Post navigation

PREVIOUS
API Gateway – Autoryzacja
NEXT
Jak za pomocą funkcji Lambda włączyć i wyłączyć serwer EC2 w AWS
Comments are closed.
Cześć. Nazywam się Przemek Malak. Dzięki za wizytę. Mam nadzieję, że to o czym piszę Cię zainteresowało. Jeżeli chcesz ze mną pogadać, najłatwiej będzie przez LinkedIn.

Losowe wpisy

  • SAM Accelerate

    4 lipca 2022
  • Programujemy AWS – Step Functions. Jak prosto połączyć usługi serverless w jedną całość.

    11 marca 2018
  • Domain Storytelling

    6 listopada 2022
  • AWS Lambda – nowy edytor

    1 grudnia 2017
  • AWS API Gateway

    29 czerwca 2017
  • Apps
  • AWS
  • CloudNative
  • Cookbook
  • Data
  • DEV
  • GCP
  • IoT
  • Istio
  • k8s
  • Security
  • Social
  • GitHub
  • LinkedIn
© 2023   All Rights Reserved.