AWS SNS i NET.Core

AWS SNS i NET.Core

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.

Comments are closed.