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 ไม่ต้องการห้องสมุดบุคคลที่สามใด ๆ มันเขียนด้วยรหัส Delphi ดั้งเดิม 100% และทำงานกับ SKUs ทั้งหมดของเวอร์ชัน Delphi ที่รองรับ
คุณสามารถติดตั้งไลบรารีที่ดำเนินการติดตั้ง Manuall
สำหรับ แต่ละแพลตฟอร์มที่แตกต่างกัน คุณต้องการติดตั้ง SDK:
AWSPackages.groupproj กลุ่มโครงการใน Delphi IDE ของคุณ<sdk_folder>/packages/d12/Win32/Release โฟลเดอร์ลงใน Delphi 12, เส้นทางห้องสมุด Win32 บริการเว็บของ Amazon แต่ละแห่งมีแพ็คเกจและรูปแบบชื่อหน่วยของตัวเองซึ่งเป็น AWS<service>.dproj และ AWS.<service>.*.pas ตามลำดับ ตัวอย่างเช่นสำหรับ Amazon SQS (บริการคิวง่าย ๆ ) ชื่อแพ็คเกจคือ AWSSQS.dproj และชื่อหน่วยคือ AWS.SQS.pas (และหน่วยอื่น ๆ ทั้งหมดในแพ็คเกจทำตามรูปแบบเดียวกันเช่น AWS.SQS.Client.pas หรือ AWS.SQS.ClientIntf.pas
ประเภทส่วนใหญ่ที่คุณต้องการจะอยู่ในหน่วยหลักซึ่งตัวอย่างเช่น AWS.SQS นั่นเป็นหน่วยเดียวที่คุณจะต้องใช้ฟังก์ชั่นส่วนใหญ่ จากนั้นคุณสามารถเข้าถึงการดำเนินการ API ที่มีอยู่ทั้งหมด แต่ละวิธีการดำเนินการจะได้รับอินเทอร์เฟซคำขอและส่งคืนอินเทอร์เฟซตอบกลับ
โดยสรุปนี่เป็นกระบวนการในการดำเนินการตามคำขอ API:
AWS.SQS ;TAmazonSQSClient );ตัวอย่างต่อไปนี้ได้รับข้อความจากคิว SQS และส่งออก ID และเนื้อหาของแต่ละข้อความที่ได้รับ:
// 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 คุณค้นหาข้อมูลรายละเอียดเพิ่มเติมในบทความนี้เกี่ยวกับการใช้ Amazon SNS กับ 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.AWSProfileNameAWS_PROFILE คุณสมบัติ TAWSConfigs.AWSProfilesLocation ควบคุมวิธีการที่ AWS SDK สำหรับ Delphi ค้นหาโปรไฟล์ข้อมูลรับรอง หากว่างเปล่าจะค้นหาไฟล์ข้อมูลรับรอง AWS ที่ใช้ร่วมกันในตำแหน่งเริ่มต้น หากโปรไฟล์ไม่อยู่ที่นั่นให้ค้นหา ~/.aws/config (linux หรือ macOS) หรือ %USERPROFILE%.awsconfig (windows) หาก TAWSConfigs.AWSProfilesLocation มีพา ธ ไปยังไฟล์ในรูปแบบไฟล์รับรอง AWS ดังนั้น SDK จะค้นหาข้อมูลรับรอง เฉพาะ ในไฟล์ที่ระบุสำหรับโปรไฟล์ที่มีชื่อที่ระบุ
โปรดดูเอกสาร AWS สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าไฟล์ข้อมูลรับรองและโปรไฟล์ชื่อ
คุณสามารถส่งรหัสการเข้าถึงรหัสและคีย์ลับได้โดยตรงในตัวสร้างไคลเอนต์:
Client := TAmazonSQSClient.Create(myAccessKey, mySecretKey);แม้ว่าจะแนะนำให้ใช้โปรไฟล์ข้อมูลรับรองเนื่องจากง่ายต่อการจัดการและเข้ากันได้กับอินเตอร์เฟสบรรทัดคำสั่ง AWS
สำคัญ: อย่าเรียกใช้การทดสอบการรวมในบัญชีการผลิต
การทดสอบการรวมสามารถพบได้ในโครงการ Awstests การทดสอบเหล่านี้สันนิษฐานว่าโปรไฟล์เริ่มต้นได้รับการกำหนดค่าสำหรับข้อมูลรับรอง คุณสามารถตั้งค่าข้อมูลรับรองโดยใช้ไฟล์การกำหนดค่าโปรไฟล์หรือตัวแปรสภาพแวดล้อม
การทดสอบได้รับการออกแบบมาเพื่อสร้างและลบทรัพยากรที่จำเป็นสำหรับการทดสอบ แต่เป็นสิ่งสำคัญที่จะทำให้ข้อมูลของคุณปลอดภัย อย่าเรียกใช้การทดสอบเหล่านี้ในบัญชีที่มีข้อมูลการผลิตหรือทรัพยากร เนื่องจากทรัพยากร AWS ถูกสร้างและลบในระหว่างการทดสอบเหล่านี้จึงสามารถเกิดค่าใช้จ่ายได้ เพื่อลดค่าใช้จ่ายที่เกิดขึ้นโดยการเรียกใช้การทดสอบมุ่งเน้นไปที่ทรัพยากร AWS ที่มีค่าใช้จ่ายน้อยที่สุด
ชั้นเรียนภายใน OpenSSL บางแห่งได้รับแรงบันดาลใจจากที่เก็บ delphi-openssl: https://github.com/lminuti/delphi-Openssl
หน่วย AWS.Json.Helpers ขึ้นอยู่กับ Rest-json-helpers ของ Uwe Raabe: https://github.com/uweraabe/rest-json-helpers
AWS SDK สำหรับ Delphi มีการกระจายรหัสอย่างยุติธรรมภายใต้ Apache 2.0 พร้อมใบอนุญาตมาตรา Commons