Layered Lambdas: AWS SAM dan Python
Sedikit penggunaan kembali kode tidak pernah berbahaya
Berikut adalah instruksi langkah demi langkah tentang cara menambahkan lapisan ke AWS Lambdas - dalam bahasa Python. Akan menggunakan kode dasar yang dihasilkan oleh contoh template HelloWorld standar.
Dan ya, tentu saja Anda perlu memiliki semua Python dan hal-hal AWS SAM terinstal sebelumnya dan dikonfigurasi.
Menghasilkan dan menjalankan proyek contoh
Sekarang panggil sam init
dan jawab pertanyaan dengan cara standar, seperti ini:
akan menampilkan ringkasan
dan akan membuat folder proyek dengan struktur dan beberapa file. template.yaml cukup standar.
dan kode fungsi juga (saya akan membersihkan komentar yang dihasilkan ekstra)
import json
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
# "location": ip.text.replace("\n", "")
}),
}
Sekarang mari kita bangun dan panggil fungsi ini secara lokal
sam validate && sam build --use-container && sam local invoke HelloWorldFunction --event events/event.json
Akhir dari respons harus mendekati yang berikut:
.....
START RequestId: 6da35464-7c6a-40b2-bcc0-60796994317a Version: $LATEST
END RequestId: 737ae28d-2b99-49e6-baae-40ab9bb99599
REPORT RequestId: 737ae28d-2b99-49e6-baae-40ab9bb99599 Init Duration: 0.04 ms Duration: 28.40 ms Billed Duration: 29 ms Memory Size: 128 MB Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"hello world\"}"}
Menambahkan lapisan
Tambahkan deskripsi lapisan ke template.yaml
Dua bagian:
- ApiSharedLayer - blok yang mendeskripsikannya
- Layers: … - !Ref ApiSharedLayer - dalam fungsi yang menggunakan lapisan tersebut
.....
Resources:
# added code start
ApiSharedLayer:
Type: AWS::Serverless::LayerVersion
Properties:
ContentUri: api_shared_layer/
LayerName: api-shared-layer
Description: My api-shared-layer
CompatibleRuntimes:
- python3.9
RetentionPolicy: Delete
Metadata:
BuildMethod: python3.9 # Diperlukan untuk membuat lapisan ini dengan AWS SAM
# added code end
HelloWorldFunction:
Type: AWS::Serverless::Function # Informasi lebih lanjut tentang Resource Fungsi: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
Properties:
CodeUri: hello_world/
Handler: app.lambda_handler
Runtime: python3.9
Architectures:
- x86_64
# added code start
Layers:
- !Ref ApiSharedLayer
# added code end
Events:
.....
Tambahkan kode lapisan
ke dalam folder api_shared_layer
tambahkan beberapa kode
Perbarui fungsi untuk menggunakan kode ini
import json
from api_version import API_VERSION
def lambda_handler(event, context):
return {
"statusCode": 200,
"body": json.dumps({
"message": "hello world",
"version": API_VERSION
}),
}
Jalankan Uji
Kembali:
sam validate && sam build --use-container && sam local invoke HelloWorldFunction --event events/event.json
Akhir dari respons harus mendekati yang berikut:
.....
START RequestId: 88eb1887-ae94-479d-a059-f87c4b71a282 Version: $LATEST
END RequestId: 927f7d05-4d13-44ba-9377-03e6d3e8bacf
REPORT RequestId: 927f7d05-4d13-44ba-9377-03e6d3e8bacf Init Duration: 0.72 ms Duration: 34.80 ms Billed Duration: 35 ms Memory Size: 128 MB Max Memory Used: 128 MB
{"statusCode": 200, "body": "{\"message\": \"hello world\", \"version\": \"1.1.1\"}"}
Bagus.