Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan fungsi Lambda di AWS SAM dan Komposer Infrastruktur
Dalam tutorial ini, Anda dapat mulai menggunakan IaC dengan Lambda dengan membuat AWS SAM template dari fungsi Lambda yang ada dan kemudian membangun aplikasi tanpa server di Infrastructure Composer dengan menambahkan sumber daya lainnya. AWS
Saat Anda melaksanakan tutorial ini, Anda akan mempelajari beberapa konsep dasar, seperti bagaimana AWS sumber daya ditentukan di AWS SAM. Anda juga akan belajar cara menggunakan Infrastructure Composer untuk membangun aplikasi tanpa server yang dapat Anda terapkan menggunakan AWS SAM atau CloudFormation.
Untuk menyelesaikan tutorial ini, Anda akan melakukan langkah-langkah berikut:
-
Buat contoh fungsi Lambda
-
Gunakan konsol Lambda untuk melihat AWS SAM template untuk fungsi
-
Ekspor konfigurasi fungsi Anda ke AWS Infrastructure Composer dan rancang aplikasi tanpa server sederhana berdasarkan konfigurasi fungsi Anda
-
Simpan AWS SAM template yang diperbarui yang dapat Anda gunakan sebagai dasar untuk menerapkan aplikasi tanpa server Anda
Prasyarat
Dalam tutorial ini, Anda menggunakan fitur sinkronisasi lokal Infrastructure Composer untuk menyimpan template dan file kode Anda ke mesin build lokal Anda. Untuk menggunakan fitur ini, Anda memerlukan browser yang mendukung File System Access API, yang memungkinkan aplikasi web membaca, menulis, dan menyimpan file di sistem file lokal Anda. Sebaiknya gunakan Google Chrome atau Microsoft Edge. Untuk informasi selengkapnya tentang API Akses Sistem File, lihat Apa itu API Akses Sistem File?
Buat fungsi Lambda
Pada langkah pertama ini, Anda membuat fungsi Lambda yang dapat Anda gunakan untuk menyelesaikan sisa tutorial. Agar semuanya tetap sederhana, Anda menggunakan konsol Lambda untuk membuat fungsi dasar 'Hello world' menggunakan runtime Python 3.11.
Untuk membuat fungsi Lambda 'Hello world' menggunakan konsol
-
Buka Konsol Lambda
. -
Pilih Buat fungsi.
-
Biarkan Penulis dari awal dipilih, dan di bawah Informasi Das ar,
LambdaIaCDemomasukkan nama Fungsi. -
Untuk Runtime, pilih Python 3.11.
-
Pilih Buat fungsi.
Lihat AWS SAM template untuk fungsi Anda
Sebelum Anda mengekspor konfigurasi fungsi Anda ke Infrastructure Composer, gunakan konsol Lambda untuk melihat konfigurasi fungsi Anda saat ini sebagai AWS SAM templat. Dengan mengikuti langkah-langkah di bagian ini, Anda akan belajar tentang anatomi AWS SAM template dan cara mendefinisikan sumber daya seperti fungsi Lambda untuk mulai menentukan aplikasi tanpa server.
Untuk melihat AWS SAM template untuk fungsi Anda
-
Buka halaman Fungsi
di konsol Lambda. -
Pilih fungsi yang baru saja Anda buat (
LambdaIaCDemo). -
Di panel I khtisar fungsi, pilih Template.
Di tempat diagram yang mewakili konfigurasi fungsi Anda, Anda akan melihat AWS SAM template untuk fungsi Anda. Template akan terlihat seperti berikut ini.
# This AWS SAM template has been generated from your function's # configuration. If your function has one or more triggers, note # that the AWS resources associated with these triggers aren't fully # specified in this template and include placeholder values.Open this template # in AWS Application Composer or your favorite IDE and modify # it to specify a serverless application with other AWS resources. AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Specification template describing your function. Resources: LambdaIaCDemo: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 3 Handler: lambda_function.lambda_handler Runtime: python3.11 Architectures: - x86_64 EventInvokeConfig: MaximumEventAgeInSeconds: 21600 MaximumRetryAttempts: 2 EphemeralStorage: Size: 512 RuntimeManagementConfig: UpdateRuntimeOn: Auto SnapStart: ApplyOn: None PackageType: Zip Policies: Statement: - Effect: Allow Action: - logs:CreateLogGroup Resource: arn:aws:logs:us-east-1:123456789012:* - Effect: Allow Action: - logs:CreateLogStream - logs:PutLogEvents Resource: - >- arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/LambdaIaCDemo:*
Mari kita luangkan waktu sejenak untuk melihat template YAML untuk fungsi Anda dan memahami beberapa konsep kunci.
Template dimulai dengan deklarasiTransform: AWS::Serverless-2016-10-31. Deklarasi ini diperlukan karena di balik layar, AWS SAM template digunakan melalui CloudFormation. Menggunakan Transform pernyataan mengidentifikasi template sebagai file AWS SAM template.
Setelah Transform deklarasi muncul Resources bagian. Di sinilah AWS sumber daya yang ingin Anda terapkan dengan AWS SAM template Anda ditentukan. AWS SAM template dapat berisi kombinasi AWS SAM sumber daya dan CloudFormation sumber daya. Ini karena selama penerapan, AWS SAM template diperluas ke CloudFormation templat, sehingga CloudFormation sintaks yang valid dapat ditambahkan ke AWS SAM template.
Saat ini, hanya ada satu sumber daya yang ditentukan di Resources bagian template, fungsi LambdaIaCDemo Lambda Anda. Untuk menambahkan fungsi Lambda ke AWS SAM template, Anda menggunakan jenis AWS::Serverless::Function sumber daya. Sumber Properties daya fungsi Lambda menentukan runtime fungsi, pengendali fungsi, dan opsi konfigurasi lainnya. Jalur ke kode sumber fungsi Anda yang AWS SAM harus digunakan untuk menerapkan fungsi juga didefinisikan di sini. Untuk mempelajari lebih lanjut tentang sumber daya fungsi Lambda di AWS SAM, lihat AWS::Serverless: :Function di Panduan Peng AWS SAM embang.
Selain properti fungsi dan konfigurasi, template juga menentukan kebijakan AWS Identity and Access Management (IAM) untuk fungsi Anda. Kebijakan ini memberikan izin fungsi Anda untuk menulis log ke Amazon CloudWatch Logs. Saat Anda membuat fungsi di konsol Lambda, Lambda secara otomatis melampirkan kebijakan ini ke fungsi Anda. Untuk mempelajari selengkapnya tentang menentukan kebijakan IAM untuk fungsi dalam AWS SAM template, lihat policies properti di halaman AWS::Serverless: :Function pada Panduan Peng AWS SAM embang.
Untuk mempelajari lebih lanjut tentang struktur AWS SAM templat, lihat anatomi AWS SAM template.
Gunakan AWS Infrastructure Composer untuk merancang aplikasi tanpa server
Untuk mulai membangun aplikasi tanpa server sederhana menggunakan AWS SAM template fungsi Anda sebagai titik awal, Anda mengekspor konfigurasi fungsi Anda ke Infrastructure Composer dan mengaktifkan mode sinkronisasi lokal Infrastructure Composer. Sinkronisasi lokal secara otomatis menyimpan kode fungsi dan AWS SAM template Anda ke mesin build lokal Anda dan menjaga template yang disimpan Anda tetap disinkronkan saat Anda menambahkan AWS sumber daya lain di Infrastructure Composer.
Untuk mengekspor fungsi Anda ke Infrastructure Composer
-
Di panel I khtisar Fungsi, pilih Ekspor ke Komposer Aplikasi.
Untuk mengekspor konfigurasi dan kode fungsi Anda ke Infrastructure Composer, Lambda membuat bucket Amazon S3 di akun Anda untuk menyimpan sementara data ini.
-
Di kotak dialog, pilih Kon firmasi dan buat proyek untuk menerima nama default untuk bucket ini dan ekspor konfigurasi dan kode fungsi Anda ke Komposer Infrastruktur.
-
(Opsional) Untuk memilih nama lain untuk bucket Amazon S3 yang dibuat Lambda, masukkan nama baru dan pilih Kon firmasi dan buat proyek. Nama bucket Amazon S3 harus unik secara global dan mengikuti aturan penamaan bucket.
Memilih Kon firmasi dan buat proyek membuka konsol Infrastructure Composer. Di kan vas, Anda akan melihat fungsi Lambda Anda.
-
Dari menu dropdown, pilih Aktifkan sinkronisasi lokal.
-
Di kotak dialog yang terbuka, pilih Pilih folder dan pilih folder pada mesin build lokal Anda.
-
Pilih Aktif kan untuk mengaktifkan sinkronisasi lokal.
Untuk mengekspor fungsi Anda ke Infrastructure Composer, Anda memerlukan izin untuk menggunakan tindakan API tertentu. Jika Anda tidak dapat mengekspor fungsi Anda, lihat Izin yang diperlukan dan pastikan Anda memiliki izin yang Anda butuhkan.
catatan
Harga Amazon S3 standar
Untuk menghindari biaya tambahan yang ditambahkan ke Anda Akun AWS, ikuti petunjuk di Menghapus bucket setelah Anda mengekspor fungsi Anda ke Komposer Infrastruktur. Untuk informasi selengkapnya tentang bucket Amazon S3 yang dibuat Lambda, lihatPenggunaan AWS Lambda dengan AWS Infrastructure Composer.
Untuk merancang aplikasi tanpa server Anda di Infrastructure Composer
Setelah mengaktifkan sinkronisasi lokal, perubahan yang Anda buat di Infrastructure Composer tercermin dalam AWS SAM template yang disimpan di mesin build lokal Anda. Anda sekarang dapat menyeret dan melepas AWS sumber daya tambahan ke kanvas Infrastructure Composer untuk membangun aplikasi Anda. Dalam contoh ini, Anda menambahkan antrian sederhana Amazon SQS sebagai pemicu untuk fungsi Lambda Anda dan tabel DynamoDB untuk fungsi untuk menulis data.
-
Tambahkan pemicu Amazon SQS ke fungsi Lambda Anda dengan melakukan hal berikut:
-
Di bidang pencarian di palet Sumber Daya, masukkan
SQS. -
Seret sumber daya SQS Queue ke kanvas Anda dan posisikan di sebelah kiri fungsi Lambda Anda.
-
Pilih Detail, dan untuk Logical ID masukkan
LambdaIaCQueue. -
Pilih Simpan.
-
Hubungkan sumber daya Amazon SQS dan Lambda Anda dengan mengklik port Langganan pada kartu antrian SQS dan menyeretnya ke port sebelah kiri pada kartu fungsi Lambda. Munculnya garis antara dua sumber daya menunjukkan koneksi yang berhasil. Infrastructure Composer juga menampilkan pesan di bagian bawah kanvas yang menunjukkan bahwa kedua sumber daya berhasil terhubung.
-
-
Tambahkan tabel Amazon DynamoDB untuk fungsi Lambda Anda untuk menulis data dengan melakukan hal berikut:
-
Di bidang pencarian di palet Sumber Daya, masukkan
DynamoDB. -
Seret sumber daya Tabel DynamoDB ke kanvas Anda dan posisikan di sebelah kanan fungsi Lambda Anda.
-
Pilih Detail, dan untuk Logical ID masukkan
LambdaIaCTable. -
Pilih Simpan.
-
Hubungkan tabel DynamoDB ke fungsi Lambda Anda dengan mengklik port sebelah kanan kartu fungsi Lambda dan menyeretnya ke port sebelah kiri pada kartu DynamoDB.
-
Sekarang setelah Anda menambahkan sumber daya tambahan ini, mari kita lihat AWS SAM template terbaru yang telah dibuat oleh Infrastructure Composer.
Untuk melihat pembaruan AWS SAM templat
-
Pada kanvas Infrastructure Composer, pilih Template untuk beralih dari tampilan kanvas ke tampilan template.
AWS SAM Template Anda sekarang harus berisi sumber daya dan properti tambahan berikut:
-
Antrian Amazon SQS dengan pengenal
LambdaIaCQueueLambdaIaCQueue: Type: AWS::SQS::Queue Properties: MessageRetentionPeriod: 345600Saat Anda menambahkan antrian Amazon SQS menggunakan Infrastructure Composer, Infrastructure Composer menetapkan
MessageRetentionPeriodproperti. Anda juga dapat mengaturFifoQueueproperti dengan memilih Detail pada kartu Antrian SQS dan memeriksa atau menghapus centang antrian Fifo.Untuk mengatur properti lain untuk antrian Anda, Anda dapat mengedit template secara manual untuk menambahkannya. Untuk mempelajari lebih lanjut tentang
AWS::SQS::Queuesumber daya dan propertinya yang tersedia, lihat AWS: :SQS: :Queue di Panduan Pengguna. CloudFormation -
Pro
Eventsperti dalam definisi fungsi Lambda yang menentukan antrian Amazon SQS sebagai pemicu fungsiEvents: LambdaIaCQueue: Type: SQS Properties: Queue: !GetAtt LambdaIaCQueue.Arn BatchSize: 1Pro
Eventsperti terdiri dari tipe peristiwa dan sekumpulan properti yang bergantung pada jenisnya. Untuk mempelajari tentang perbedaan yang dapat Layanan AWS Anda konfigurasi untuk memicu fungsi Lambda dan properti yang dapat Anda atur, lihat EventSource di Panduan Peng AWS SAM embang. -
Tabel DynamoDB dengan pengidentifikasi
LambdaIaCTableLambdaIaCTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: id KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGESSaat menambahkan tabel DynamoDB menggunakan Infrastructure Composer, Anda dapat mengatur kunci tabel dengan memilih Detail pada kartu tabel DynamoDB dan mengedit nilai-nilai kunci. Infrastructure Composer juga menetapkan nilai default untuk sejumlah properti lain termasuk
BillingModedanStreamViewType.Untuk mempelajari lebih lanjut tentang properti ini dan properti lain yang dapat Anda tambahkan ke AWS SAM template Anda, lihat AWS: :DynamoDB: :Table di Panduan Pengguna. CloudFormation
-
Kebijakan IAM baru yang memberikan izin fungsi Anda untuk melakukan operasi CRUD pada tabel DynamoDB yang Anda tambahkan.
Policies: ... - DynamoDBCrudPolicy: TableName: !Ref LambdaIaCTable
AWS SAM Template akhir lengkap akan terlihat seperti berikut ini.
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: An AWS Serverless Specification template describing your function. Resources: LambdaIaCDemo: Type: AWS::Serverless::Function Properties: CodeUri: . Description: '' MemorySize: 128 Timeout: 3 Handler: lambda_function.lambda_handler Runtime: python3.11 Architectures: - x86_64 EventInvokeConfig: MaximumEventAgeInSeconds: 21600 MaximumRetryAttempts: 2 EphemeralStorage: Size: 512 RuntimeManagementConfig: UpdateRuntimeOn: Auto SnapStart: ApplyOn: None PackageType: Zip Policies: - Statement: - Effect: Allow Action: - logs:CreateLogGroup Resource: arn:aws:logs:us-east-1:594035263019:* - Effect: Allow Action: - logs:CreateLogStream - logs:PutLogEvents Resource: - arn:aws:logs:us-east-1:594035263019:log-group:/aws/lambda/LambdaIaCDemo:* - DynamoDBCrudPolicy: TableName: !Ref LambdaIaCTable Events: LambdaIaCQueue: Type: SQS Properties: Queue: !GetAtt LambdaIaCQueue.Arn BatchSize: 1 Environment: Variables: LAMBDAIACTABLE_TABLE_NAME: !Ref LambdaIaCTable LAMBDAIACTABLE_TABLE_ARN: !GetAtt LambdaIaCTable.Arn LambdaIaCQueue: Type: AWS::SQS::Queue Properties: MessageRetentionPeriod: 345600 LambdaIaCTable: Type: AWS::DynamoDB::Table Properties: AttributeDefinitions: - AttributeName: id AttributeType: S BillingMode: PAY_PER_REQUEST KeySchema: - AttributeName: id KeyType: HASH StreamSpecification: StreamViewType: NEW_AND_OLD_IMAGES
Menyebarkan aplikasi tanpa server Anda menggunakan AWS SAM (opsional)
Jika Anda ingin menggunakan AWS SAM untuk menyebarkan aplikasi tanpa server menggunakan template yang baru saja Anda buat di Infrastructure Composer, Anda harus terlebih dahulu menginstal. AWS SAM CLI Untuk melakukan ini, ikuti instruksi di Memasang AWS SAM CLI.
Sebelum menerapkan aplikasi Anda, Anda juga perlu memperbarui kode fungsi yang disimpan oleh Infrastructure Composer bersama dengan template Anda. Saat ini, lambda_function.py file yang disimpan Infrastructure Composer hanya berisi kode dasar 'Halo dunia' yang disediakan Lambda saat Anda membuat fungsi.
Untuk memperbarui kode fungsi Anda, salin kode berikut dan tempel ke lambda_function.py file Infrastructure Composer yang disimpan ke mesin build lokal Anda. Anda menentukan direktori untuk Infrastructure Composer untuk menyimpan file ini ketika Anda mengaktifkan mode Sinkronisasi Lokal.
Kode ini menerima pasangan nilai kunci dalam pesan dari antrian Amazon SQS yang Anda buat di Infrastructure Composer. Jika kunci dan nilai adalah string, kode kemudian menggunakannya untuk menulis item ke tabel DynamoDB yang ditentukan dalam template Anda.
import boto3 import os import json # define the DynamoDB table that Lambda will connect to tablename = os.environ['LAMBDAIACTABLE_TABLE_NAME'] # create the DynamoDB resource dynamo = boto3.client('dynamodb') def lambda_handler(event, context): # get the message out of the SQS event message = event['Records'][0]['body'] data = json.loads(message) # write event data to DDB table if check_message_format(data): key = next(iter(data)) value = data[key] dynamo.put_item( TableName=tablename, Item={ 'id': {'S': key}, 'Value': {'S': value} } ) else: raise ValueError("Input data not in the correct format") # check that the event object contains a single key value # pair that can be written to the database def check_message_format(message): if len(message) != 1: return False key, value = next(iter(message.items())) if not (isinstance(key, str) and isinstance(value, str)): return False else: return True
Untuk menyebarkan aplikasi tanpa server
Untuk menerapkan aplikasi Anda menggunakan AWS SAM CLI, lakukan langkah-langkah berikut. Agar fungsi Anda dapat membangun dan menerapkan dengan benar, Python versi 3.11 harus diinstal pada mesin build Anda dan di komputer AndaPATH.
-
Jalankan perintah berikut dari direktori tempat Infrastructure Composer menyimpan
lambda_function.pyfiletemplate.yamldan Anda.sam buildPerintah ini mengumpulkan artefak build untuk aplikasi Anda dan menempatkannya dalam format dan lokasi yang tepat untuk menyebarkannya.
-
Untuk menerapkan aplikasi Anda dan membuat sumber daya Lambda, Amazon SQS, dan DynamoDB yang ditentukan dalam AWS SAM template Anda, jalankan perintah berikut.
sam deploy --guidedMenggunakan
--guidedbendera berarti itu AWS SAM akan menunjukkan kepada Anda petunjuk untuk memandu Anda melalui proses penerapan. Untuk penerapan ini, terima opsi default dengan menekan Enter.
Selama proses penerapan, AWS SAM buat sumber daya berikut di Akun AWS:
-
Tum CloudFormation pukan bernama
sam-app -
Fungsi Lambda dengan format nama
sam-app-LambdaIaCDemo-99VXPpYQVv1M -
Antrian Amazon SQS dengan format nama
sam-app-LambdaIaCQueue-xL87VeKsGiIo -
Tabel DynamoDB dengan format nama
sam-app-LambdaIaCTable-CN0S66C0VLNV
AWS SAM juga membuat peran dan kebijakan IAM yang diperlukan agar fungsi Lambda Anda dapat membaca pesan dari antrian Amazon SQS dan melakukan operasi CRUD pada tabel DynamoDB.
Menguji aplikasi yang Anda gunakan (opsional)
Untuk mengonfirmasi bahwa aplikasi tanpa server digunakan dengan benar, kirim pesan ke antrian Amazon SQS berisi pasangan nilai kunci dan periksa apakah Lambda menulis item ke tabel DynamoDB menggunakan nilai-nilai ini.
Untuk menguji aplikasi tanpa server
-
Buka halaman
Antrian konsol Amazon SQS dan pilih antrian yang AWS SAM dibuat dari template Anda. Nama memiliki format sam-app-LambdaIaCQueue-.xL87VeKsGiIo -
Pilih Kirim dan terima pesan dan tempelkan JSON berikut ke Konten pesan di bagian Kirim pesan.
{ "myKey": "myValue" } -
Pilih Kirim pesan.
Mengirim pesan Anda ke antrian menyebabkan Lambda memanggil fungsi Anda melalui pemetaan sumber peristiwa yang ditentukan dalam template Anda AWS SAM . Untuk mengonfirmasi bahwa Lambda telah memanggil fungsi Anda seperti yang diharapkan, konfirmasikan bahwa item telah ditambahkan ke tabel DynamoDB Anda.
-
Buka halaman
Tabel konsol DynamoDB dan pilih tabel Anda. Nama memiliki format sam-app-LambdaIaCTable-.CN0S66C0VLNV -
Pilih Jelajahi item tabel. Di panel I tem dikembalikan, Anda akan melihat item dengan id
myKeydan NilaimyValue.