AWS SDK untuk Delphi memungkinkan pengembang Delphi untuk dengan mudah bekerja dengan Amazon Web Services dan membangun solusi yang dapat diskalakan dengan Amazon SES, Amazon SQS, dan banyak lagi. Ini adalah SDK non-resmi berdasarkan AWS SDK resmi untuk .NET. Proyek sampel dapat ditemukan di AWS SDK untuk repositori sampel Delphi.
Ini adalah daftar layanan AWS yang saat ini didukung oleh SDK. Lebih banyak akan ditambahkan dari waktu ke waktu:
Harap gunakan halaman masalah GitHub untuk melaporkan masalah atau meminta fitur.
AWS SDK untuk Delphi mendukung semua versi Delphi baru -baru ini sejak Delphi 10.3 Rio (IE, Delphi 10.4 Sydney, Delphi 11, Delphi 12, dll.) Dan mendukung semua platform yang tersedia di versi Delphi: Windows, Linux, Android, IOS dan MacOS.
AWS SDK untuk Delphi tidak memerlukan perpustakaan pihak ke -3, itu ditulis dalam 100% kode Delphi asli dan bekerja pada semua skus versi Delphi yang didukung.
Anda dapat menginstal perpustakaan yang melakukan instalasi manuall.
Untuk setiap platform berbeda, Anda ingin menginstal SDK:
AWSPackages.groupproj Project Group di Delphi IDE Anda.<sdk_folder>/packages/d12/Win32/Release ke Delphi 12, Win32 Library Path. Setiap Layanan Web Amazon memiliki skema paket dan unit nama sendiri, yang masing -masing AWS<service>.dproj dan AWS.<service>.*.pas , masing -masing. Misalnya, untuk Amazon SQS (layanan antrian sederhana), nama paketnya adalah AWSSQS.dproj dan nama unit adalah AWS.SQS.pas (dan semua unit lain dalam paket mengikuti pola yang sama, seperti AWS.SQS.Client.pas atau AWS.SQS.ClientIntf.pas .
Sebagian besar jenis yang Anda butuhkan akan berada di unit utama, yang misalnya adalah AWS.SQS . Jadi itulah satu -satunya unit yang Anda perlukan untuk menggunakan sebagian besar fungsi. Dari sana Anda dapat mengakses semua operasi API yang tersedia. Setiap metode operasi menerima antarmuka permintaan dan mengembalikan antarmuka respons.
Singkatnya, ini adalah proses untuk melakukan permintaan API:
AWS.SQS ;TAmazonSQSClient );Contoh -contoh berikut menerima pesan dari antrian SQS dan mengeluarkan ID dan badan dari setiap pesan yang diterima:
// 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 ;Contoh berikut mengirimkan email ke alamat yang ditentukan menggunakan subjek dan pesan yang ditentukan:
// 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 ;Dalam semua objek permintaan, daftar dan kamus sudah dipakai, sedangkan objek terkait lainnya tidak. Anda tidak perlu menghancurkan antarmuka atau objek yang diteruskan atau diterima dari operasi, atau ditambahkan ke permintaan. Beberapa operasi memiliki metode kelebihan beban yang menerima lebih sedikit parameter mentah daripada objek permintaan penuh, untuk penggunaan yang lebih sederhana.
Untuk informasi lebih lanjut tentang operasi yang tersedia, silakan merujuk ke dokumentasi API dari layanan Amazon yang Anda coba gunakan. Atau, tentu saja, gunakan penyelesaian kode Delphi untuk menemukan semua metode yang tersedia di setiap klien layanan.
Anda dapat sepenuhnya menggunakan Amazon SNS: Layanan Pemberitahuan Sederhana dari AWS SDK untuk Delphi. Unit utama adalah AWS.SNS . Anda menemukan informasi lebih rinci dalam artikel ini tentang penggunaan SN Amazon dengan AWS SDK untuk Delphi, dan tentu saja Anda dapat merujuk ke referensi API Amazon SNS itu sendiri.
Membuat klien:
var
Client: IAmazonSimpleNotificationService;
begin
Client := TAmazonSimpleNotificationServiceClient.Create;
end ;Dapatkan ARN untuk semua topik yang ada:
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 ;Buat topik, dapatkan ARN, atur/dapatkan atributnya, dan hapus topik:
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 ;Berlangganan topik ke antrian SQS melalui URL antrian, menambahkan izin yang tepat:
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 ;Berlangganan topik untuk mengirim email dan mengembalikan langganan 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 ;Publikasikan pesan ke suatu topik:
// publish a message to the topic
Client.Publish(TPublishRequest.Create(TopicArn, ' Test message ' , ' Subject ' ));Hapus langganan:
// delete the subscription
Client.Unsubscribe(SubArn);Parse pesan SNS dari JSON dan validasi tanda tangan:
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 ;Kirim pesan SMS ke nomor telepon:
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 untuk Delphi mencari kredensial dalam urutan tertentu dan menggunakan set pertama yang tersedia untuk aplikasi saat ini.
TAWSConfigs.AWSProfileName .AWS_PROFILE . Properti TAWSConfigs.AWSProfilesLocation mengontrol bagaimana AWS SDK untuk Delphi menemukan profil kredensial. Jika kosong, ia mencari file kredensial AWS bersama di lokasi default. Jika profil tidak ada, cari ~/.aws/config (linux atau macOS) atau %USERPROFILE%.awsconfig (windows). Jika TAWSConfigs.AWSProfilesLocation berisi jalur ke file dalam format file kredensial AWS, maka SDK mencari kredensial hanya dalam file yang ditentukan untuk profil dengan nama yang ditentukan.
Silakan merujuk ke dokumentasi AWS untuk informasi lebih lanjut tentang pengaturan file kredensial dan profil bernama.
Anda cukup lulus ID kunci akses dan kunci rahasia secara langsung di konstruktor klien:
Client := TAmazonSQSClient.Create(myAccessKey, mySecretKey);Meskipun menggunakan profil kredensial disarankan karena lebih mudah dikelola dan juga kompatibel dengan antarmuka baris perintah AWS.
PENTING: Jangan menjalankan tes integrasi pada akun produksi.
Tes integrasi dapat ditemukan di proyek AWSTESTS . Tes -tes ini mengasumsikan bahwa profil default telah dikonfigurasi untuk kredensial. Anda dapat mengatur kredensial menggunakan file konfigurasi, profil bernama atau variabel lingkungan.
Tes dirancang untuk membuat dan menghapus sumber daya yang dibutuhkan untuk pengujian tetapi penting untuk menjaga data Anda aman. Jangan menjalankan tes ini pada akun yang berisi data atau sumber daya produksi. Karena sumber daya AWS dibuat dan dihapus selama menjalankan tes ini, biaya dapat terjadi. Untuk mengurangi biaya yang terjadi dengan menjalankan tes fokus pada sumber daya AWS yang memiliki biaya minimal.
Beberapa kelas internal OpenSSL terinspirasi dari repositori Delphi-Openssl: https://github.com/lminuti/delphi-openssl.
Unit AWS.Json.Helpers didasarkan pada rest-json-jelpers Uwe Raabe: https://github.com/uweraabe/rest-json-helpers.
AWS SDK untuk Delphi didistribusikan dengan kode adil di bawah Apache 2.0 dengan lisensi klausa Commons .