AWS SDK для Delphi позволяет разработчикам Delphi легко работать с Amazon Web Services и создавать масштабируемые решения с помощью Amazon SES, Amazon SQS и многого другого. Это неофициальный SDK, основанный на официальном AWS SDK для .NET. Образцы проектов можно найти в AWS SDK для репозитория образцов Delphi.
Это список услуг AWS, в настоящее время поддерживаемых SDK. С течением времени будет добавлено больше:
Пожалуйста, используйте страницу проблем Github, чтобы сообщить о проблемах или функциях запроса.
AWS SDK для Delphi поддерживает все недавние версии Delphi со времен Delphi 10.3 RIO (то есть Delphi 10.4 Sydney, Delphi 11, Delphi 12 и т. Д.) И поддерживает все платформы, доступные в этих версиях Delphi: Windows, Linux, Android, iOS и MacOS.
AWS SDK для Delphi не требует какой -либо сторонней библиотеки, она написана в 100% нативном коде Delphi и работает на всех Skus поддерживаемых версий Delphi.
Вы можете установить библиотеку, выполняющую производственную установку.
Для каждой другой платформы вы хотите установить SDK:
AWSPackages.groupproj Project Group в вашей Delphi IDE.<sdk_folder>/packages/d12/Win32/Release в Delphi 12, Win32 Library Path. Каждый веб -сервис Amazon имеет свою собственную пакет и схему имени подразделения, которая является AWS<service>.dproj и AWS.<service>.*.pas , соответственно. Например, для Amazon SQS (Simple Ofeue Service) имя пакета является AWSSQS.dproj , а имя блока - AWS.SQS.pas (и все другие единицы в пакете, следуя же шаблону, например, AWS.SQS.Client.pas или AWS.SQS.ClientIntf.pas .
Большинство типов, которые вам нужны, будут в основном блоке, который, например, AWS.SQS . Так что это единственное устройство, которое вам нужно будет использовать большинство функций. Оттуда вы можете получить доступ ко всем доступным операциям API. Каждый метод работы получает интерфейс запроса и возвращает интерфейс ответа.
Таким образом, это процесс выполнения запросов API:
AWS.SQS ;TAmazonSQSClient );Следующие примеры получают сообщение из очереди SQS и выводят идентификатор и тело каждого полученного сообщения:
// 1. Use main unit
uses AWS.SQS;
procedure WriteMessageIds ( const QueueUrl: string);
var
Client: IAmazonSQS;
Response: IReceiveMessageResponse;
Request: IReceiveMessageRequest;
Msg: AWS.SQS.TMessage;
begin
// 2. Instantiate client interface
Client := TAmazonSQSClient.Create;
// 3. Create and fill the request
Request := TReceiveMessageRequest.Create;
Request.QueueUrl := QueueUrl;
// 4. Call operation method passing the request to receive the response;
Response := Client.ReceiveMessage(Request);
// 5. Process the response
for Msg in Response.Messages do
begin
WriteLn(Msg.MessageId);
WriteLn(Msg.Body);
WriteLn;
end ;
end ;В следующем примере отправляет электронное письмо на указанный адрес, используя указанный предмет и сообщение:
// 1. Use main unit
uses AWS.SES;
procedure SendEmail ( const Recipient, Subject, Content: string);
var
Client: IAmazonSimpleEmailService;
Request: ISendEmailRequest;
Response: ISendEmailResponse;
begin
// 2. Instantiate client interface
Client := TAmazonSimpleEmailServiceClient.Create;
// 3. Create and fill the request
Request := TSendEmailRequest.Create;
Request.Source := SenderEmail;
Request.Destination := TDestination.Create;
Request.Destination.ToAddresses.Add(Recipient);
Request.Message := TMessage.Create(
TContent.Create(Subject),
TBody.Create(TContent.Create(Content)));
// 4. Call operation method passing the request to receive the response;
Response := Client.SendEmail(Request);
// 5. Process the response
WriteLn(Response.MessageId);
end ;Во всех объектах запроса списки и словари уже создаются экземпляры, а другие связанные объекты - нет. Вам не нужно уничтожать какой -либо интерфейс или объект, переданный или полученный из операций, или добавлять в запросы. Некоторые операции имеют перегруженные методы, которые получают меньше необработанных параметров вместо полного объекта запроса, для более простого использования.
Для получения дополнительной информации о доступных операциях, пожалуйста, обратитесь к документации API службы Amazon, которую вы пытаетесь использовать. Или, конечно, используйте завершение кода Delphi, чтобы найти все методы, доступные в каждом сервисном клиенте.
Вы можете полностью использовать Amazon SNS: простая служба уведомлений от AWS SDK для Delphi. Основное устройство - AWS.SNS . Вы найдете более подробную информацию в этой статье об использовании SNS Amazon с AWS SDK для Delphi, и, конечно, вы можете ссылаться на саму ссылку Amazon SNS API.
Создание клиента:
var
Client: IAmazonSimpleNotificationService;
begin
Client := TAmazonSimpleNotificationServiceClient.Create;
end ;Получите ARN для всех существующих тем:
function GetAllTopics (AllTopics: TList<string>);
var
ListRequest: IListTopicsRequest;
ListResponse: IListTopicsResponse;
Topic: TTopic;
begin
ListRequest := TListTopicsRequest.Create;
repeat
ListResponse := Client.ListTopics(ListRequest);
for Topic in ListResponse.Topics do
AllTopics.Add(Topic.TopicArn);
ListRequest.NextToken := ListResponse.NextToken;
until ListRequest.NextToken = ' ' ;
end ;Создайте тему, получите его ARN, установите/получите его атрибуты и удалите тему:
var
Response: ICreateTopicResponse;
TopicArn: string;
SetAttrRequest: ISetTopicAttributesRequest;
GetAttrResponse: IGetTopicAttributesResponse;
begin
// create new topic and get ARN
Response := Client.CreateTopic( ' test-name ' );
TopicArn := Response.TopicArn;
// set topic attribute
SetAttrRequest := TSetTopicAttributesRequest.Create(TopicArn, ' DisplayName ' , ' My topic ' );
Client.SetTopicAttributes(SetAttrRequest);
// verify topic attributes
GetAttrResponse := Client.GetTopicAttributes(TopicArn);
DisplayName := GetAttrResponse.Attributes[ ' DisplayName ' ]);
// delete new topic
Client.DeleteTopic(TopicArn);
end ;Подпишитесь на тему в очередь SQS через URL -адрес очереди, добавив правильные разрешения:
function SubscribeQueue (Client: IAmazonSimpleNotificationService;
const TopicArn: string; SQSClient: IAmazonSQS; const SQSQueueUrl: string): string;
var
GetAttrResponse: IGetQueueAttributesResponse;
GetAttrRequest: IGetQueueAttributesRequest;
SQSQueueArn: string;
Policy: TPolicy;
PolicyStr: string;
TopicArn: string;
SetAttrRequest: ISetQueueAttributesRequest;
begin
// Get the queue's existing policy and ARN
GetAttrRequest := TGetQueueAttributesRequest.Create;
GetAttrRequest.QueueUrl := SQSQueueUrl;
GetAttrRequest.AttributeNames.Add(TSQSConsts.ATTRIBUTE_ALL);
GetAttrResponse := SQSClient.GetQueueAttributes(GetAttrRequest);
SQSQueueArn := GetAttrResponse.Attributes[ ' QueueArn ' ];
if GetAttrResponse.Attributes.TryGetValue( ' Policy ' , PolicyStr) then
Policy := TPolicy.FromJson(PolicyStr)
else
Policy := TPolicy.Create;
try
SetLength(Result, 0 );
if not HasSQSPermission(Policy, TopicArn, SQSQueueArn) then
AddSQSPermission(Policy, TopicArn, SQSQueueArn);
Result := Client.Subscribe(TopicArn, ' sqs ' , SQSQueueArn).SubscriptionArn;
SetAttrRequest := TSetQueueAttributesRequest.Create;
SetAttrRequest.QueueUrl := SQSQueueUrl;
SetAttrRequest.Attributes.Add( ' Policy ' , Policy.ToJson);
SQSClient.SetQueueAttributes(SetAttrRequest);
finally
Policy.Free;
end ;
end ;Подпишитесь на тему, чтобы по электронной почте и вернуть подписку ARN:
function SubscribeTopic ( const TopicArn, EmailAddress: string): string;
var
Latest: TDateTime;
Response: IListSubscriptionsByTopicResponse;
begin
// subscribe an email address to the topic
Client.Subscribe(TSubscribeRequest.Create(TopicArn, ' email ' , EmailAddress));
// wait until subscription has been confirmed, wait time for two minutes
Latest := IncMinute(Now, 2 );
while Now < Latest do
begin
// get subscriptions for topic
Response := Client.ListSubscriptionsByTopic(TopicArn);
// test whether the subscription has been confirmed
if Response.Subscriptions[ 0 ].SubscriptionArn <> ' PendingConfirmation ' then
Exit(Response.Subscriptions[ 0 ].SubscriptionArn);
// wait
Sleep( 15 * 1000 );
end ;
end ;Опубликовать сообщение в тему:
// publish a message to the topic
Client.Publish(TPublishRequest.Create(TopicArn, ' Test message ' , ' Subject ' ));Удалить подписку:
// delete the subscription
Client.Unsubscribe(SubArn);Разрабатывать сообщение SNS от JSON и подтвердить подпись:
function GetMessage ( const Json: string): AWS.SNS.Message.TMessage;
begin
Result := AWS.SNS.Message.TMessage.ParseMessage(Json);
if not Result.IsMessageSignatureValid then
raise Exception.Create( ' Invalid message: bad signature ' );
end ;Отправьте SMS -сообщение на номер телефона:
var
Client: IAmazonSimpleNotificationService;
Request: IPublishRequest;
begin
Client := TAmazonSimpleNotificationServiceClient.Create;
Request := TPublishRequest.Create;
Request.PhoneNumber := ' +184298765321 ' ;
Request.Message := ' Hello from AWS SDK for Delphi! ' ;
Client.Publish(Request);
end ;AWS SDK для Delphi ищет учетные данные в определенном порядке и использует первый доступный набор для текущего приложения.
TAWSConfigs.AWSProfileName .AWS_PROFILE . Свойство TAWSConfigs.AWSProfilesLocation контролирует, как AWS SDK для Delphi находит профили учетных данных. Если он пуст, он ищет файл общих учетных данных AWS в месте по умолчанию. Если профиля нет, поиск ~/.aws/config (linux или macos) или %USERPROFILE%.awsconfig (Windows). Если TAWSConfigs.AWSProfilesLocation содержит путь к файлу в формате файла учетных данных AWS, то SDK ищет учетные данные только в указанном файле для профиля с указанным именем.
Пожалуйста, обратитесь к документации AWS для получения дополнительной информации о настройках файлов учетных данных и названных профилях.
Вы можете просто передать идентификатор ключа Access и секретный ключ непосредственно в конструкторе клиента:
Client := TAmazonSQSClient.Create(myAccessKey, mySecretKey);Хотя используется профиль учетных данных, рекомендуется, так как его легче управлять, а также совместимо с интерфейсом командной строки AWS.
ВАЖНО: Не запускайте интеграционные тесты на производственном счете.
Интеграционные тесты можно найти в проекте Apstests . Эти тесты предполагают, что профиль по умолчанию был настроен для учетных данных. Вы можете настроить учетные данные, используя файлы конфигурации, именованные профили или переменные среды.
Тесты предназначены для создания и удаления ресурсов, необходимых для тестирования, но важно обеспечить безопасность ваших данных. Не запускайте эти тесты на учетных записях, которые содержат производственные данные или ресурсы. Поскольку ресурсы AWS создаются и удаляются во время проведения этих тестов, могут произойти заряды. Чтобы уменьшить сборы, произошло путем проведения тестов, сосредоточенных на ресурсах AWS, которые имеют минимальные затраты.
Некоторые внутренние классы OpenSSL были вдохновлены в репозитории DelphioPenssl: https://github.com/lminuti/delphi-openssl.
UNIT AWS.Json.Helpers основан на UWE Raabe's Rest-json-helpers: https://github.com/uweraabe/rest-json-helpers.
AWS SDK для Delphi-это справедливый код, распределенный по Apache 2.0 с лицензией Commons Clause .