Lambda İşlevini Yürütme ve Çağırma
Bu bölümde, Lambda işlevini çalıştırma ve çalıştırma süreci ve bununla ilgili adımlar ayrıntılı olarak açıklanacaktır.
AWS Lambda Yürütme Modeli
AWS yürütme, AWS Lambda Function için eklenen yapılandırma ayrıntılarına bağlıdır. İşlev oluşturulduğunda, birmemory ve time allottedAWS Lambda işlevinin yürütülmesi için kullanılan.
Yapılandırma ayrıntılarının yardımıyla AWS Lambda bir yürütme bağlamı oluşturur. Yürütme bağlamı, varsa veritabanı bağlantısı, http uç noktaları, üçüncü taraf kitaplıkları vb. Gibi harici bağımlılıklar ile hazır hale getirilen geçici bir çalışma ortamıdır.
AWS Lambda işlevi ilk kez çağrıldığında veya lambda işlevi güncellendiğinde, yürütme bağlamı kurulumu nedeniyle çok az gecikme eklenir. Ancak, sonraki aramalar birincisine göre daha hızlıdır. Lambda işlevi daha kısa sürede çağrılırsa AWS Lambda yürütme bağlamını yeniden kullanmayı dener.
Yürütme bağlamının yeniden kullanımı aşağıdaki sonuçlara sahiptir:
Lambda'nın yürütülmesi için yapılan herhangi bir veritabanı bağlantısı varsa, bağlantı yeniden kullanılmak üzere korunur. Bu nedenle, Lambda kodu, bağlantının önce kontrol edilmesi ve varsa yeniden kullanılması gerektiği şekilde olmalıdır; aksi takdirde yeni bir bağlantı yapmamız gerekir.
Yürütme bağlamı, içinde 500MB'lık bir disk alanı sağlar /tmpdizin. Gerekli veriler bu dizinde önbelleğe alınır. Verilerin mevcut olup olmadığını görmek için kodda ek kontrol yapabilirsiniz.
Geri çağırmalar veya bazı arka plan işlemleri, Lambda işlevi çağrıldığında tamamlanmadıysa, lambda işlevi yeniden çağrıldığında yürütme başlayacaktır. Böyle bir şeye ihtiyacınız yoksa, işlevin yürütülmesi tamamlandığında tüm süreçlerinizin doğru şekilde sonlandırıldığından emin olun.
Yürütme bağlamını ve tmp dizininde depolanan verileri kullanmalısınız. Yenilerini oluşturmadan önce gerekli verilerin mevcut olup olmadığını görmek için koda gerekli kontrolleri eklemeniz gerekecektir. Bu, yürütme sırasında zamandan tasarruf edecek ve daha hızlı hale getirecektir.
AWS Lambda işlevini çağırma
AWS'yi manuel olarak çalıştırabiliriz aws cli. AWS Lambda'nın nasıl oluşturulacağını ve dağıtılacağını zaten gördük.cli. Burada ilk önce kullanarak bir fonksiyon oluşturacağızaws cli ve aynısını çağırın.
AWS CLI kullanarak AWS Lambda İşlevi Oluşturma
Aşağıdaki komutları kullanarak AWS Lambda işlevi oluşturabilirsiniz. aws cli -
Commands
create-function
--function-name <value>
--runtime <value>
--role <value>
--handler <value>
[--code <value>]
[--description <value>]
[--timeout <value>]
[--memory-size <value>]
[--environment <value>]
[--kms-key-arn <value>]
[--tags <value>]
[--zip-file <value>]
[--cli-input-json <value>]
Command with values
aws lambda create-function
--function-name "lambdainvoke"
--runtime "nodejs8.10"
--role "arn:aws:iam::625297745038:role/lambdaapipolicy"
--handler "index.handler"
--timeout 5
--memory-size 256
--zip-file "fileb://C:\nodeproject\index.zip"
Çıktı aşağıda gösterildiği gibidir -
AWS konsolunda oluşturulan işlev aşağıda gösterildiği gibidir -
Şimdi, şu komutu kullanarak işlevi çağırabilirsiniz:invoke
--function-name <value>
[--invocation-type <value>]
[--log-type <value>]
[--client-context <value>]
[--payload <value>]
[--qualifier <value>]
outfile <value>
Options
--function-name − Çağırmak istediğiniz işlevin adını belirtin.
--invocation-type(string) − varsayılan olarak çağrı türü requestresponse. İnvokation-type ile kullanılabilecek değerler:RequestResponse, Event ve DryRun.
Olay çağırma türü, zaman uyumsuz yanıt için kullanılacak.
DryRun, Lambda işlevini yürütmeye gerek kalmadan doğrulamak istediğinizde kullanılacaktır.
--log-type − Olacak Tailçağrı türü RequestResponse ise. En son 4KB base64 kodlu günlük verilerini verir. Olası değerlerTail ve None.
--client-context −İstemciye özgü ayrıntıları Lambda işlevine aktarabilirsiniz. İstemci bağlamı json biçiminde ve base64 olarak kodlanmış olmalıdır. Maksimum dosya boyutu 3583 bayttır.
--payload − json formatında girdi lambda işlevi için.
--qualifier −Lambda işlevi sürümünü veya takma adı belirtebilirsiniz. İşlev sürümünü geçerseniz, api Lambda işlevini çağırmak için nitelikli işlev arn kullanacaktır. Takma ad belirtirseniz, api Lambda işlevini çağırmak için ARN takma adını kullanır.
outfile − Bu, içeriğin kaydedileceği dosya adıdır.
Command with values
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail C:\nodeproject\outputfile.txt
Aşağıda gösterildiği gibi json formatında kukla olayı lambda işlevine göndermek için yük seçeneğini kullanabilirsiniz.
İlgili AWS Lambda kodu aşağıdaki gibidir -
exports.handler = async (event, callback) => {
console.log("Hello => "+ event.name);
console.log("Address =>"+ event.addr);
callback(null, 'Hello '+event.name +" and address is "+ event.addr);
};
Kodda konsolumuz olduğunu gözlemleyin event.name ve event.addr. Şimdi, olayı ad ve adresle aşağıdaki gibi göndermek için aws cli'de payload seçeneğini kullanalım -
aws lambda invoke --function-name "lambdainvoke" --log-type
Tail --payload file://C:\clioutput\input.txt C:\clioutput\outputfile.txt
Ardından, yükleme, aşağıda gösterildiği gibi json girdisine sahip bir dosya yolu olarak girişi alır -
{"name":"Roy Singh", "addr":"Mumbai"}
Karşılık gelen çıktı aşağıda gösterildiği gibidir -
Çıktı dosyada saklanır C:\clioutput\outputfile.txt aşağıdaki gibi -
"Hello Roy Singh and address is Mumbai"
Örnek Olaylar
Örnek bir olay geçirerek AWS Lambda işlevini test edebilirsiniz. Bu bölüm, AWS Hizmetleri için bazı örnek olayları verir. Kullanabilirsinizinvokehizmetlerden herhangi biriyle tetiklendiğinde çıktıyı test etmek için komut. Aşağıdaki ilgili örnek olaylar için verilen kodları inceleyin -
Amazon S3 Örnek Olay Koydu
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"SourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"eTag": "0123456789abcdef0123456789abcdef",
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg",
"size": 1024
},
"bucket": {
"arn": bucketarn,
"name": "Sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectCreated:Put",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}]
}
Almak için details of the file from the s3 put event, aşağıdaki komutu kullanabilirsiniz -
event.Records[0].s3.object.key //will display the name of the file
İçin get the bucket name, aşağıdaki komutu kullanabilirsiniz -
event.Records[0].s3.bucket.name //will give the name of the bucket.
İçin see the EventName, aşağıdaki komutu kullanabilirsiniz -
event.Records[0].eventName // will display the eventname
Amazon S3 Örnek Olay Silme
{
"Records": [{
"eventVersion": "2.0",
"eventTime": "1970-01-01T00:00:00.000Z",
"requestParameters": {
"SourceIPAddress": "127.0.0.1"
},
"s3": {
"configurationId": "testConfigRule",
"object": {
"sequencer": "0A1B2C3D4E5F678901",
"key": "HappyFace.jpg"
},
"bucket": {
"arn": bucketarn,
"name": "Sourcebucket",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
},
"s3SchemaVersion": "1.0"
},
"responseElements": {
"x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH",
"x-amz-request-id": "EXAMPLE123456789"
},
"awsRegion": "us-east-1",
"eventName": "ObjectRemoved:Delete",
"userIdentity": {
"principalId": "EXAMPLE"
},
"eventSource": "aws:s3"
}]
}
Amazon DynamoDB
Amazon DynamoDB, DynamoDB tablosunda değişiklik yapıldığında AWS Lambda'da bir olay olabilir. DynamodDB tablosundan kayıt ekleme, güncelleme ve kayıt silme gibi işlemler gerçekleştirebiliriz.
DynamoDB ekleme, ekleme ve silme olayı için örnek bir olay burada gösterilmektedir -
{
"Records": [{
"eventID": "1",
"eventVersion": "1.0",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"NewImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES",
"SequenceNumber": "111",
"SizeBytes": 26
},
"awsRegion": "us-west-2",
"eventName": "INSERT",
"eventSourceARN": eventSourcearn,
"eventSource": "aws:dynamodb"
},
{
"eventID": "2",
"eventVersion": "1.0",
"dynamodb": {
"OldImage": {
"Message": {
"S": "New item!"
},
"Id": {
"N": "101"
}
},
"SequenceNumber": "222",
"Keys": {
"Id": {
"N": "101"
}
},
"SizeBytes": 59,
"NewImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES"
},
"awsRegion": "us-west-2",
"eventName": "MODIFY",
"eventSourceARN": Sourcearn,
"eventSource": "aws:dynamodb"
},
{
"eventID": "3",
"eventVersion": "1.0",
"dynamodb": {
"Keys": {
"Id": {
"N": "101"
}
},
"SizeBytes": 38,
"SequenceNumber": "333",
"OldImage": {
"Message": {
"S": "This item has changed"
},
"Id": {
"N": "101"
}
},
"StreamViewType": "NEW_AND_OLD_IMAGES"
}, "awsRegion": "us-west-2",
"eventName": "REMOVE",
"eventSourceARN": Sourcearn,
"eventSource": "aws:dynamodb"
}]
}
Amazon Basit Bildirim Hizmeti
AWS Lambda, içinde oluşturulan bildirimi işlemek için yardımcı olabilir. Simple Notification Service (SNS). SNS'de her mesaj yayınlandığında, Lambda işlevi mesajların ayrıntılarını içeren bir SNS olayı ile tetiklenebilir. Bu mesajlar Lambda işlevi içinde işlenebilir ve ihtiyaca göre diğer hizmetlere gönderilebilir.
Mesaj girildiğinde, SNS Lambda işlevini tetikleyecektir. Herhangi bir hata Lambda işlevini çağırmaya çalışırsa, SNS lambda işlevini en fazla üç kez çağırmayı yeniden deneyecektir.
Amazon SNS Örnek Etkinliği
AWS Lambda işlevinde mevcut tüm ayrıntıları içeren örnek olay, daha sonraki işlemi gerçekleştirmek için aşağıda gösterilmiştir -
{
"Records": [{
"EventVersion": "1.0",
"EventSubscriptionArn": eventsubscriptionarn,
"EventSource": "aws:sns",
"Sns": {
"SignatureVersion": "1",
"Timestamp": "1970-01-01T00:00:00.000Z",
"Signature": "EXAMPLE",
"SigningCertUrl": "EXAMPLE",
"MessageId": "95df01b4-ee98-5cb9-9903-4c221d41eb5e",
"Message": "Hello from SNS!",
"MessageAttributes": {
"Test": {
"Type": "String",
"Value": "TestString"
},
"TestBinary": {
"Type": "Binary",
"Value": "TestBinary"
}
},
"Type": "Notification",
"UnsubscribeUrl": "EXAMPLE",
"TopicArn": topicarn,
"Subject": "TestInvoke"
}
}]
}
Amazon Basit Posta Hizmeti
Amazon Simple Mail Service, mesaj göndermek ve ayrıca mesaj almak için kullanılabilir. AWS Lambda işlevi, ileti alındığında Basit Posta Hizmetinde çağrılabilir.
Amazon SES E-postası Alma Örnek Olayı
AWS Lambda içinde kullanıldığında SES olayının ayrıntıları aşağıda gösterilmiştir -
{
"Records": [{
"eventVersion": "1.0",
"ses": {
"mail": {
"commonHeaders": {
"from": [
"Jane Doe <[email protected]>"
],
"to": [
"[email protected]"
],
"returnPath": "[email protected]",
"messageId": "<0123456789Source.com>",
"date": "Wed, 7 Oct 2015 12:34:56 -0700",
"subject": "Test Subject"
},
"example": "[email protected]",
"timestamp": "1970-01-01T00:00:00.000Z",
"destination": [
"[email protected]"
],
"headers": [{
"name": "Return-Path",
"value": "<[email protected]>"
},
{
"name": "Received",
"value": "from mailer.example.com (mailer.example.com [203.0.113.1]) by inbound-smtp.us-west-2.amazonaws.com with SMTP id o3vrnil0e2ic for [email protected]; Wed, 07 Oct 2015 12:34:56 +0000 (UTC)"
},
{
"name": "DKIM-Signature",
"value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=example; h=mime-version:from:date:message-id:subject:to:content-type; bh=jX3F0bCAI7sIbkHyy3mLYO28ieDQz2R0P8HwQkklFj4=; b=sQwJ+LMe9RjkesGu+vqU56asvMhrLRRYrWCbV"
},
{
"name": "MIME-Version",
"value": "1.0"
},
{
"name": "From",
"value": "Jane Doe <[email protected]>"
},
{
"name": "Date",
"value": "Wed, 7 Oct 2015 12:34:56 -0700"
},
{
"name": "Message-ID",
"value": "<0123456789example.com>"
},
{
"name": "Subject",
"value": "Test Subject"
},
{
"name": "To",
"value": "[email protected]"
},
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
}],
"headersTruncated": false,
"messageId": "o3vrnil0e2ic28tr"
},
"receipt": {
"recipients": [
"[email protected]"
],
"timestamp": "1970-01-01T00:00:00.000Z",
"spamVerdict": {
"status": "PASS"
},
"dkimVerdict": {
"status": "PASS"
},
"processingTimeMillis": 574,
"action": {
"type": "Lambda",
"invocationType": "Event",
"functionArn": "arn:aws:lambda:us-west-2:012345678912:function:example"
},
"spfVerdict": {
"status": "PASS"
},
"virusVerdict": {
"status": "PASS"
}
}
},
"eventexample": "aws:ses"
}]
}
Amazon Cloudwatch Günlükleri
AWS Lambda, aşağıdakiler kullanılarak Amazon CloudWatch Günlüklerinden tetiklenebilir CloudWatch Logs Subscriptions. CloudWatch Logs abonelikleri, AWS Lambda içinde işlenip analiz edilebilen veya diğer sistemlere yüklemek için kullanılabilen günlükler hakkında gerçek zamanlı verilere sahiptir.
Amazon CloudWatch Günlükleri Örnek Olay
{
"awslogs": {
"data": "H4sIAAAAAAAAAHWPwQqCQBCGX0Xm7EFtK+smZBEUgXoLCdMhFtKV3akI8d0bLYmibvPPN3wz00CJxmQnTO41whwW
QRIctmEcB6sQbFC3CjW3XW8kxpOpP+OC22d1Wml1qZkQGtoMsScxaczKN3plG8zlaHIta5KqWsozoTYw3/djzwhpL
wivWFGHGpAFe7DL68JlBUk+l7KSN7tCOEJ4M3/qOI49vMHj+zCKdlFqLaU2ZHV2a4Ct/an0/ivdX8oYc1UVX860fQ
DQiMdxRQEAAA=="
}
}
Amazon API Ağ Geçidi
AWS Lambda işlevi şu tarihte çağrılabilir: httpsurl. BT yapılabilirGET, POST, PUT. Https url çağrıldığında, AWS Lambda işlevi de tetiklenir ve get / post kullanılarak https'ye iletilen veriler, DynamoDB'ye eklemek veya posta göndermek vb. İçin kullanılmak üzere AWS Lambda içinde kullanılabilir hale getirilebilir.
API Ağ Geçidi Proxy İsteği Etkinliği
{
"path": "/test/hello",
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"pathParameters": {
"proxy": "hello"
},
"requestContext": {
"accountId": "123456789012",
"reexampleId": "us4z18",
"stage": "test",
"requestId": "41b45ea3-70b5-11e6-b7bd-69b5aaebc7d9",
"identity": {
"cognitoIdentityPoolId": "",
"accountId": "",
"cognitoIdentityId": "",
"caller": "",
"apiKey": "",
"exampleIp": "192.168.100.1",
"cognitoAuthenticationType": "",
"cognitoAuthenticationProvider": "",
"userArn": "",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"user": ""
},
"reexamplePath": "/{proxy+}",
"httpMethod": "GET",
"apiId": "wt6mne2s9k"
},
"reexample": "/{proxy+}",
"httpMethod": "GET",
"queryStringParameters": {
"name": "me"
},
"stageVariables": {
"stageVarName": "stageVarValue"
}
}
API Ağ Geçidi Proxy Yanıtı Etkinliği
{
"statusCode": 200,
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, lzma, sdch, br",
"Accept-Language": "en-US,en;q=0.8",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Host": "wt6mne2s9k.execute-api.us-west-2.amazonaws.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36 OPR/39.0.2256.48",
"Via": "1.1 fb7cca60f0ecd82ce07790c9c5eef16c.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "nBsWBOrSHMgnaROZJK1wGCZ9PcRcSpq_oSXZNQwQ10OTZL4cimZo3g==",
"X-Forwarded-For": "192.168.100.1, 192.168.1.1",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},
"body": "Hello World"
}