Pilih preferensi cookie Anda

Kami menggunakan cookie penting serta alat serupa yang diperlukan untuk menyediakan situs dan layanan. Kami menggunakan cookie performa untuk mengumpulkan statistik anonim sehingga kami dapat memahami cara pelanggan menggunakan situs dan melakukan perbaikan. Cookie penting tidak dapat dinonaktifkan, tetapi Anda dapat mengklik “Kustom” atau “Tolak” untuk menolak cookie performa.

Jika Anda setuju, AWS dan pihak ketiga yang disetujui juga akan menggunakan cookie untuk menyediakan fitur situs yang berguna, mengingat preferensi Anda, dan menampilkan konten yang relevan, termasuk iklan yang relevan. Untuk menerima atau menolak semua cookie yang tidak penting, klik “Terima” atau “Tolak”. Untuk membuat pilihan yang lebih detail, klik “Kustomisasi”.

Membuat aplikasi untuk melakukan pemeliharaan database terjadwal

Mode fokus
Membuat aplikasi untuk melakukan pemeliharaan database terjadwal - AWS Lambda

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Anda dapat menggunakan AWS Lambda untuk mengganti proses terjadwal seperti pencadangan sistem otomatis, konversi file, dan tugas pemeliharaan. Dalam contoh ini, Anda membuat aplikasi tanpa server yang melakukan pemeliharaan terjadwal rutin pada tabel DynamoDB dengan menghapus entri lama. Aplikasi ini menggunakan EventBridge Scheduler untuk menjalankan fungsi Lambda pada jadwal cron. Saat dipanggil, fungsi menanyakan tabel untuk item yang lebih tua dari satu tahun, dan menghapusnya. Fungsi mencatat setiap item yang dihapus di CloudWatch Log.

Untuk mengimplementasikan contoh ini, pertama buat tabel DynamoDB dan isi dengan beberapa data uji untuk fungsi Anda untuk query. Kemudian, buat fungsi Lambda Python dengan pemicu EventBridge Scheduler dan peran eksekusi IAM yang memberikan izin fungsi untuk membaca, dan menghapus, item dari tabel Anda.

Diagram yang menunjukkan aliran data antara jadwal EventBridge Scheduler, fungsi Lambda dan tabel DynamoDB
Tip

Jika Anda baru mengenal Lambda, kami sarankan Anda menyelesaikan tutorial Buat fungsi Lambda pertama Anda sebelum membuat aplikasi contoh ini.

Anda dapat menerapkan aplikasi secara manual dengan membuat dan mengonfigurasi sumber daya dengan aplikasi. AWS Management Console Anda juga dapat menerapkan aplikasi dengan menggunakan AWS Serverless Application Model (AWS SAM). AWS SAM adalah alat infrastruktur sebagai kode (IAc). Dengan IAc, Anda tidak membuat sumber daya secara manual, tetapi mendefinisikannya dalam kode dan kemudian menerapkannya secara otomatis.

Jika Anda ingin mempelajari lebih lanjut tentang menggunakan Lambda dengan IAc sebelum menerapkan aplikasi contoh ini, lihat. Menggunakan Lambda dengan infrastruktur sebagai kode (IAc)

Prasyarat

Sebelum Anda dapat membuat aplikasi contoh, pastikan Anda memiliki alat dan program baris perintah yang diperlukan diinstal.

  • Python

    Untuk mengisi tabel DynamoDB yang Anda buat untuk menguji aplikasi, contoh ini menggunakan skrip Python dan file CSV untuk menulis data ke dalam tabel. Pastikan Anda memiliki Python versi 3.8 atau yang lebih baru diinstal pada mesin Anda.

  • AWS SAM CLI

    Jika Anda ingin membuat tabel DynamoDB dan menerapkan aplikasi contoh AWS SAM menggunakan, Anda perlu menginstal CLI. AWS SAM Ikuti petunjuk penginstalan di Panduan AWS SAM Pengguna.

  • AWS CLI

    Untuk menggunakan skrip Python yang disediakan untuk mengisi tabel pengujian Anda, Anda harus menginstal dan mengkonfigurasi file. AWS CLI Ini karena skrip menggunakan AWS SDK for Python (Boto3), yang membutuhkan akses ke kredensil AWS Identity and Access Management (IAM) Anda. Anda juga perlu AWS CLI diinstal untuk menyebarkan sumber daya menggunakan AWS SAM. Instal CLI dengan mengikuti petunjuk penginstalan di AWS Command Line Interface Panduan Pengguna.

  • Docker

    Untuk menerapkan aplikasi menggunakan AWS SAM, Docker juga harus diinstal pada mesin build Anda. Ikuti petunjuk di Instal Docker Engine di situs web dokumentasi Docker.

Mengunduh contoh file aplikasi

Untuk membuat database contoh dan aplikasi pemeliharaan terjadwal, Anda perlu membuat file berikut di direktori proyek Anda:

Contoh file database

  • template.yaml- AWS SAM Template yang dapat Anda gunakan untuk membuat tabel DynamoDB

  • sample_data.csv- file CSV yang berisi data sampel untuk dimuat ke dalam tabel Anda

  • load_sample_data.py- skrip Python yang menulis data dalam file CSV ke dalam tabel

File aplikasi pemeliharaan terjadwal

  • lambda_function.py- kode fungsi Python untuk fungsi Lambda yang melakukan pemeliharaan database

  • requirements.txt- file manifes yang mendefinisikan dependensi yang dibutuhkan kode fungsi Python Anda

  • template.yaml- AWS SAM Template yang dapat Anda gunakan untuk menyebarkan aplikasi

File uji

  • test_app.py- skrip Python yang memindai tabel dan mengonfirmasi keberhasilan operasi fungsi Anda dengan mengeluarkan semua catatan yang lebih tua dari satu tahun

Perluas bagian berikut untuk melihat kode dan mempelajari lebih lanjut tentang peran setiap file dalam membuat dan menguji aplikasi Anda. Untuk membuat file di mesin lokal Anda, salin dan tempel kode di bawah ini.

Salin dan tempel kode berikut ke dalam file bernamatemplate.yaml.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: SAM Template for DynamoDB Table with Order_number as Partition Key and Date as Sort Key Resources: MyDynamoDBTable: Type: AWS::DynamoDB::Table DeletionPolicy: Retain UpdateReplacePolicy: Retain Properties: TableName: MyOrderTable BillingMode: PAY_PER_REQUEST AttributeDefinitions: - AttributeName: Order_number AttributeType: S - AttributeName: Date AttributeType: S KeySchema: - AttributeName: Order_number KeyType: HASH - AttributeName: Date KeyType: RANGE SSESpecification: SSEEnabled: true GlobalSecondaryIndexes: - IndexName: Date-index KeySchema: - AttributeName: Date KeyType: HASH Projection: ProjectionType: ALL PointInTimeRecoverySpecification: PointInTimeRecoveryEnabled: true Outputs: TableName: Description: DynamoDB Table Name Value: !Ref MyDynamoDBTable TableArn: Description: DynamoDB Table ARN Value: !GetAtt MyDynamoDBTable.Arn
catatan

AWS SAM template menggunakan konvensi penamaan standartemplate.yaml. Dalam contoh ini, Anda memiliki dua file template - satu untuk membuat database contoh dan satu lagi untuk membuat aplikasi itu sendiri. Simpan di sub-direktori terpisah di folder proyek Anda.

AWS SAM Template ini mendefinisikan resource tabel DynamoDB yang Anda buat untuk menguji aplikasi Anda. Tabel menggunakan kunci utama Order_number dengan semacam kunciDate. Agar fungsi Lambda Anda menemukan item secara langsung berdasarkan tanggal, kami juga mendefinisikan Indeks Sekunder Global bernama. Date-index

Untuk mempelajari selengkapnya tentang membuat dan mengonfigurasi tabel DynamoDB menggunakan AWS::DynamoDB::Table sumber daya, AWS lihat: :DynamoDB: :Table di Panduan Pengguna.AWS CloudFormation

Salin dan tempel kode berikut ke dalam file bernamatemplate.yaml.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: SAM Template for DynamoDB Table with Order_number as Partition Key and Date as Sort Key Resources: MyDynamoDBTable: Type: AWS::DynamoDB::Table DeletionPolicy: Retain UpdateReplacePolicy: Retain Properties: TableName: MyOrderTable BillingMode: PAY_PER_REQUEST AttributeDefinitions: - AttributeName: Order_number AttributeType: S - AttributeName: Date AttributeType: S KeySchema: - AttributeName: Order_number KeyType: HASH - AttributeName: Date KeyType: RANGE SSESpecification: SSEEnabled: true GlobalSecondaryIndexes: - IndexName: Date-index KeySchema: - AttributeName: Date KeyType: HASH Projection: ProjectionType: ALL PointInTimeRecoverySpecification: PointInTimeRecoveryEnabled: true Outputs: TableName: Description: DynamoDB Table Name Value: !Ref MyDynamoDBTable TableArn: Description: DynamoDB Table ARN Value: !GetAtt MyDynamoDBTable.Arn
catatan

AWS SAM template menggunakan konvensi penamaan standartemplate.yaml. Dalam contoh ini, Anda memiliki dua file template - satu untuk membuat database contoh dan satu lagi untuk membuat aplikasi itu sendiri. Simpan di sub-direktori terpisah di folder proyek Anda.

AWS SAM Template ini mendefinisikan resource tabel DynamoDB yang Anda buat untuk menguji aplikasi Anda. Tabel menggunakan kunci utama Order_number dengan semacam kunciDate. Agar fungsi Lambda Anda menemukan item secara langsung berdasarkan tanggal, kami juga mendefinisikan Indeks Sekunder Global bernama. Date-index

Untuk mempelajari selengkapnya tentang membuat dan mengonfigurasi tabel DynamoDB menggunakan AWS::DynamoDB::Table sumber daya, AWS lihat: :DynamoDB: :Table di Panduan Pengguna.AWS CloudFormation

Salin dan tempel kode berikut ke dalam file bernamasample_data.csv.

Date,Order_number,CustomerName,ProductID,Quantity,TotalAmount 2023-09-01,ORD001,Alejandro Rosalez,PROD123,2,199.98 2023-09-01,ORD002,Akua Mansa,PROD456,1,49.99 2023-09-02,ORD003,Ana Carolina Silva,PROD789,3,149.97 2023-09-03,ORD004,Arnav Desai,PROD123,1,99.99 2023-10-01,ORD005,Carlos Salazar,PROD456,2,99.98 2023-10-02,ORD006,Diego Ramirez,PROD789,1,49.99 2023-10-03,ORD007,Efua Owusu,PROD123,4,399.96 2023-10-04,ORD008,John Stiles,PROD456,2,99.98 2023-10-05,ORD009,Jorge Souza,PROD789,3,149.97 2023-10-06,ORD010,Kwaku Mensah,PROD123,1,99.99 2023-11-01,ORD011,Li Juan,PROD456,5,249.95 2023-11-02,ORD012,Marcia Oliveria,PROD789,2,99.98 2023-11-03,ORD013,Maria Garcia,PROD123,3,299.97 2023-11-04,ORD014,Martha Rivera,PROD456,1,49.99 2023-11-05,ORD015,Mary Major,PROD789,4,199.96 2023-12-01,ORD016,Mateo Jackson,PROD123,2,199.99 2023-12-02,ORD017,Nikki Wolf,PROD456,3,149.97 2023-12-03,ORD018,Pat Candella,PROD789,1,49.99 2023-12-04,ORD019,Paulo Santos,PROD123,5,499.95 2023-12-05,ORD020,Richard Roe,PROD456,2,99.98 2024-01-01,ORD021,Saanvi Sarkar,PROD789,3,149.97 2024-01-02,ORD022,Shirley Rodriguez,PROD123,1,99.99 2024-01-03,ORD023,Sofia Martinez,PROD456,4,199.96 2024-01-04,ORD024,Terry Whitlock,PROD789,2,99.98 2024-01-05,ORD025,Wang Xiulan,PROD123,3,299.97

File ini berisi beberapa contoh data uji untuk mengisi tabel DynamoDB Anda dengan format nilai dipisahkan koma (CSV) standar.

Salin dan tempel kode berikut ke dalam file bernamasample_data.csv.

Date,Order_number,CustomerName,ProductID,Quantity,TotalAmount 2023-09-01,ORD001,Alejandro Rosalez,PROD123,2,199.98 2023-09-01,ORD002,Akua Mansa,PROD456,1,49.99 2023-09-02,ORD003,Ana Carolina Silva,PROD789,3,149.97 2023-09-03,ORD004,Arnav Desai,PROD123,1,99.99 2023-10-01,ORD005,Carlos Salazar,PROD456,2,99.98 2023-10-02,ORD006,Diego Ramirez,PROD789,1,49.99 2023-10-03,ORD007,Efua Owusu,PROD123,4,399.96 2023-10-04,ORD008,John Stiles,PROD456,2,99.98 2023-10-05,ORD009,Jorge Souza,PROD789,3,149.97 2023-10-06,ORD010,Kwaku Mensah,PROD123,1,99.99 2023-11-01,ORD011,Li Juan,PROD456,5,249.95 2023-11-02,ORD012,Marcia Oliveria,PROD789,2,99.98 2023-11-03,ORD013,Maria Garcia,PROD123,3,299.97 2023-11-04,ORD014,Martha Rivera,PROD456,1,49.99 2023-11-05,ORD015,Mary Major,PROD789,4,199.96 2023-12-01,ORD016,Mateo Jackson,PROD123,2,199.99 2023-12-02,ORD017,Nikki Wolf,PROD456,3,149.97 2023-12-03,ORD018,Pat Candella,PROD789,1,49.99 2023-12-04,ORD019,Paulo Santos,PROD123,5,499.95 2023-12-05,ORD020,Richard Roe,PROD456,2,99.98 2024-01-01,ORD021,Saanvi Sarkar,PROD789,3,149.97 2024-01-02,ORD022,Shirley Rodriguez,PROD123,1,99.99 2024-01-03,ORD023,Sofia Martinez,PROD456,4,199.96 2024-01-04,ORD024,Terry Whitlock,PROD789,2,99.98 2024-01-05,ORD025,Wang Xiulan,PROD123,3,299.97

File ini berisi beberapa contoh data uji untuk mengisi tabel DynamoDB Anda dengan format nilai dipisahkan koma (CSV) standar.

Salin dan tempel kode berikut ke dalam file bernamaload_sample_data.py.

import boto3 import csv from decimal import Decimal # Initialize the DynamoDB client dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('MyOrderTable') print("DDB client initialized.") def load_data_from_csv(filename): with open(filename, 'r') as file: csv_reader = csv.DictReader(file) for row in csv_reader: item = { 'Order_number': row['Order_number'], 'Date': row['Date'], 'CustomerName': row['CustomerName'], 'ProductID': row['ProductID'], 'Quantity': int(row['Quantity']), 'TotalAmount': Decimal(str(row['TotalAmount'])) } table.put_item(Item=item) print(f"Added item: {item['Order_number']} - {item['Date']}") if __name__ == "__main__": load_data_from_csv('sample_data.csv') print("Data loading completed.")

Script Python ini pertama kali menggunakan AWS SDK for Python (Boto3) untuk membuat koneksi ke tabel DynamoDB Anda. Kemudian iterasi di setiap baris dalam file CSV contoh-data, membuat item dari baris itu, dan menulis item ke tabel DynamoDB menggunakan boto3 SDK.

Salin dan tempel kode berikut ke dalam file bernamaload_sample_data.py.

import boto3 import csv from decimal import Decimal # Initialize the DynamoDB client dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('MyOrderTable') print("DDB client initialized.") def load_data_from_csv(filename): with open(filename, 'r') as file: csv_reader = csv.DictReader(file) for row in csv_reader: item = { 'Order_number': row['Order_number'], 'Date': row['Date'], 'CustomerName': row['CustomerName'], 'ProductID': row['ProductID'], 'Quantity': int(row['Quantity']), 'TotalAmount': Decimal(str(row['TotalAmount'])) } table.put_item(Item=item) print(f"Added item: {item['Order_number']} - {item['Date']}") if __name__ == "__main__": load_data_from_csv('sample_data.csv') print("Data loading completed.")

Script Python ini pertama kali menggunakan AWS SDK for Python (Boto3) untuk membuat koneksi ke tabel DynamoDB Anda. Kemudian iterasi di setiap baris dalam file CSV contoh-data, membuat item dari baris itu, dan menulis item ke tabel DynamoDB menggunakan boto3 SDK.

Salin dan tempel kode berikut ke dalam file bernamalambda_function.py.

import boto3 from datetime import datetime, timedelta from boto3.dynamodb.conditions import Key, Attr import logging logger = logging.getLogger() logger.setLevel("INFO") def lambda_handler(event, context): # Initialize the DynamoDB client dynamodb = boto3.resource('dynamodb') # Specify the table name table_name = 'MyOrderTable' table = dynamodb.Table(table_name) # Get today's date today = datetime.now() # Calculate the date one year ago one_year_ago = (today - timedelta(days=365)).strftime('%Y-%m-%d') # Scan the table using a global secondary index response = table.scan( IndexName='Date-index', FilterExpression='#date < :one_year_ago', ExpressionAttributeNames={ '#date': 'Date' }, ExpressionAttributeValues={ ':one_year_ago': one_year_ago } ) # Delete old items with table.batch_writer() as batch: for item in response['Items']: Order_number = item['Order_number'] batch.delete_item( Key={ 'Order_number': Order_number, 'Date': item['Date'] } ) logger.info(f'deleted order number {Order_number}') # Check if there are more items to scan while 'LastEvaluatedKey' in response: response = table.scan( IndexName='DateIndex', FilterExpression='#date < :one_year_ago', ExpressionAttributeNames={ '#date': 'Date' }, ExpressionAttributeValues={ ':one_year_ago': one_year_ago }, ExclusiveStartKey=response['LastEvaluatedKey'] ) # Delete old items with table.batch_writer() as batch: for item in response['Items']: batch.delete_item( Key={ 'Order_number': item['Order_number'], 'Date': item['Date'] } ) return { 'statusCode': 200, 'body': 'Cleanup completed successfully' }

Kode fungsi Python berisi fungsi handler () lambda_handler yang dijalankan Lambda saat fungsi Anda dipanggil.

Ketika fungsi dipanggil oleh EventBridge Scheduler, ia menggunakan AWS SDK for Python (Boto3) untuk membuat koneksi ke tabel DynamoDB di mana tugas pemeliharaan terjadwal akan dilakukan. Kemudian menggunakan datetime pustaka Python untuk menghitung tanggal satu tahun yang lalu, sebelum memindai tabel untuk item yang lebih tua dari ini dan menghapusnya.

Perhatikan bahwa tanggapan dari kueri DynamoDB dan operasi pemindaian dibatasi hingga ukuran maksimum 1 MB. Jika respon lebih besar dari 1 MB, DynamoDB paginates data dan mengembalikan LastEvaluatedKey elemen dalam respon. Untuk memastikan bahwa fungsi kami memproses semua catatan dalam tabel, kami memeriksa keberadaan kunci ini dan terus melakukan pemindaian tabel dari posisi yang dievaluasi terakhir hingga seluruh tabel dipindai.

Salin dan tempel kode berikut ke dalam file bernamalambda_function.py.

import boto3 from datetime import datetime, timedelta from boto3.dynamodb.conditions import Key, Attr import logging logger = logging.getLogger() logger.setLevel("INFO") def lambda_handler(event, context): # Initialize the DynamoDB client dynamodb = boto3.resource('dynamodb') # Specify the table name table_name = 'MyOrderTable' table = dynamodb.Table(table_name) # Get today's date today = datetime.now() # Calculate the date one year ago one_year_ago = (today - timedelta(days=365)).strftime('%Y-%m-%d') # Scan the table using a global secondary index response = table.scan( IndexName='Date-index', FilterExpression='#date < :one_year_ago', ExpressionAttributeNames={ '#date': 'Date' }, ExpressionAttributeValues={ ':one_year_ago': one_year_ago } ) # Delete old items with table.batch_writer() as batch: for item in response['Items']: Order_number = item['Order_number'] batch.delete_item( Key={ 'Order_number': Order_number, 'Date': item['Date'] } ) logger.info(f'deleted order number {Order_number}') # Check if there are more items to scan while 'LastEvaluatedKey' in response: response = table.scan( IndexName='DateIndex', FilterExpression='#date < :one_year_ago', ExpressionAttributeNames={ '#date': 'Date' }, ExpressionAttributeValues={ ':one_year_ago': one_year_ago }, ExclusiveStartKey=response['LastEvaluatedKey'] ) # Delete old items with table.batch_writer() as batch: for item in response['Items']: batch.delete_item( Key={ 'Order_number': item['Order_number'], 'Date': item['Date'] } ) return { 'statusCode': 200, 'body': 'Cleanup completed successfully' }

Kode fungsi Python berisi fungsi handler () lambda_handler yang dijalankan Lambda saat fungsi Anda dipanggil.

Ketika fungsi dipanggil oleh EventBridge Scheduler, ia menggunakan AWS SDK for Python (Boto3) untuk membuat koneksi ke tabel DynamoDB di mana tugas pemeliharaan terjadwal akan dilakukan. Kemudian menggunakan datetime pustaka Python untuk menghitung tanggal satu tahun yang lalu, sebelum memindai tabel untuk item yang lebih tua dari ini dan menghapusnya.

Perhatikan bahwa tanggapan dari kueri DynamoDB dan operasi pemindaian dibatasi hingga ukuran maksimum 1 MB. Jika respon lebih besar dari 1 MB, DynamoDB paginates data dan mengembalikan LastEvaluatedKey elemen dalam respon. Untuk memastikan bahwa fungsi kami memproses semua catatan dalam tabel, kami memeriksa keberadaan kunci ini dan terus melakukan pemindaian tabel dari posisi yang dievaluasi terakhir hingga seluruh tabel dipindai.

Salin dan tempel kode berikut ke dalam file bernamarequirements.txt.

boto3

Untuk contoh ini, kode fungsi Anda hanya memiliki satu dependensi yang bukan bagian dari pustaka Python standar - SDK for Python (Boto3) yang digunakan fungsi untuk memindai dan menghapus item dari tabel DynamoDB.

catatan

Versi SDK untuk Python (Boto3) disertakan sebagai bagian dari runtime Lambda, sehingga kode Anda akan berjalan tanpa menambahkan Boto3 ke paket penerapan fungsi Anda. Namun, untuk mempertahankan kontrol penuh dependensi fungsi Anda dan menghindari kemungkinan masalah dengan misalignment versi, praktik terbaik untuk Python adalah menyertakan semua dependensi fungsi dalam paket penerapan fungsi Anda. Lihat Dependensi runtime dengan Python untuk mempelajari selengkapnya.

Salin dan tempel kode berikut ke dalam file bernamarequirements.txt.

boto3

Untuk contoh ini, kode fungsi Anda hanya memiliki satu dependensi yang bukan bagian dari pustaka Python standar - SDK for Python (Boto3) yang digunakan fungsi untuk memindai dan menghapus item dari tabel DynamoDB.

catatan

Versi SDK untuk Python (Boto3) disertakan sebagai bagian dari runtime Lambda, sehingga kode Anda akan berjalan tanpa menambahkan Boto3 ke paket penerapan fungsi Anda. Namun, untuk mempertahankan kontrol penuh dependensi fungsi Anda dan menghindari kemungkinan masalah dengan misalignment versi, praktik terbaik untuk Python adalah menyertakan semua dependensi fungsi dalam paket penerapan fungsi Anda. Lihat Dependensi runtime dengan Python untuk mempelajari selengkapnya.

Salin dan tempel kode berikut ke dalam file bernamatemplate.yaml.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: SAM Template for Lambda function and EventBridge Scheduler rule Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: FunctionName: ScheduledDBMaintenance CodeUri: ./ Handler: lambda_function.lambda_handler Runtime: python3.11 Architectures: - x86_64 Events: ScheduleEvent: Type: ScheduleV2 Properties: ScheduleExpression: cron(0 3 1 * ? *) Description: Run on the first day of every month at 03:00 AM Policies: - CloudWatchLogsFullAccess - Statement: - Effect: Allow Action: - dynamodb:Scan - dynamodb:BatchWriteItem Resource: !Sub 'arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/MyOrderTable' LambdaLogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub /aws/lambda/${MyLambdaFunction} RetentionInDays: 30 Outputs: LambdaFunctionName: Description: Lambda Function Name Value: !Ref MyLambdaFunction LambdaFunctionArn: Description: Lambda Function ARN Value: !GetAtt MyLambdaFunction.Arn
catatan

AWS SAM template menggunakan konvensi penamaan standartemplate.yaml. Dalam contoh ini, Anda memiliki dua file template - satu untuk membuat database contoh dan satu lagi untuk membuat aplikasi itu sendiri. Simpan di sub-direktori terpisah di folder proyek Anda.

AWS SAM Template ini mendefinisikan resource untuk aplikasi Anda. Kami mendefinisikan fungsi Lambda menggunakan sumber daya. AWS::Serverless::Function Jadwal EventBridge Scheduler dan pemicu untuk memanggil fungsi Lambda dibuat dengan menggunakan Events properti sumber daya ini menggunakan jenis. ScheduleV2 Untuk mempelajari selengkapnya tentang menentukan jadwal EventBridge Penjadwal dalam AWS SAM templat, lihat ScheduleV2 di Panduan Pengembang.AWS Serverless Application Model

Selain fungsi Lambda dan jadwal EventBridge Scheduler, kami juga mendefinisikan grup CloudWatch log untuk fungsi Anda untuk mengirim catatan item yang dihapus ke.

Salin dan tempel kode berikut ke dalam file bernamatemplate.yaml.

AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: SAM Template for Lambda function and EventBridge Scheduler rule Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: FunctionName: ScheduledDBMaintenance CodeUri: ./ Handler: lambda_function.lambda_handler Runtime: python3.11 Architectures: - x86_64 Events: ScheduleEvent: Type: ScheduleV2 Properties: ScheduleExpression: cron(0 3 1 * ? *) Description: Run on the first day of every month at 03:00 AM Policies: - CloudWatchLogsFullAccess - Statement: - Effect: Allow Action: - dynamodb:Scan - dynamodb:BatchWriteItem Resource: !Sub 'arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/MyOrderTable' LambdaLogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub /aws/lambda/${MyLambdaFunction} RetentionInDays: 30 Outputs: LambdaFunctionName: Description: Lambda Function Name Value: !Ref MyLambdaFunction LambdaFunctionArn: Description: Lambda Function ARN Value: !GetAtt MyLambdaFunction.Arn
catatan

AWS SAM template menggunakan konvensi penamaan standartemplate.yaml. Dalam contoh ini, Anda memiliki dua file template - satu untuk membuat database contoh dan satu lagi untuk membuat aplikasi itu sendiri. Simpan di sub-direktori terpisah di folder proyek Anda.

AWS SAM Template ini mendefinisikan resource untuk aplikasi Anda. Kami mendefinisikan fungsi Lambda menggunakan sumber daya. AWS::Serverless::Function Jadwal EventBridge Scheduler dan pemicu untuk memanggil fungsi Lambda dibuat dengan menggunakan Events properti sumber daya ini menggunakan jenis. ScheduleV2 Untuk mempelajari selengkapnya tentang menentukan jadwal EventBridge Penjadwal dalam AWS SAM templat, lihat ScheduleV2 di Panduan Pengembang.AWS Serverless Application Model

Selain fungsi Lambda dan jadwal EventBridge Scheduler, kami juga mendefinisikan grup CloudWatch log untuk fungsi Anda untuk mengirim catatan item yang dihapus ke.

Salin dan tempel kode berikut ke dalam file bernamatest_app.py.

import boto3 from datetime import datetime, timedelta import json # Initialize the DynamoDB client dynamodb = boto3.resource('dynamodb') # Specify your table name table_name = 'YourTableName' table = dynamodb.Table(table_name) # Get the current date current_date = datetime.now() # Calculate the date one year ago one_year_ago = current_date - timedelta(days=365) # Convert the date to string format (assuming the date in DynamoDB is stored as a string) one_year_ago_str = one_year_ago.strftime('%Y-%m-%d') # Scan the table response = table.scan( FilterExpression='#date < :one_year_ago', ExpressionAttributeNames={ '#date': 'Date' }, ExpressionAttributeValues={ ':one_year_ago': one_year_ago_str } ) # Process the results old_records = response['Items'] # Continue scanning if we have more items (pagination) while 'LastEvaluatedKey' in response: response = table.scan( FilterExpression='#date < :one_year_ago', ExpressionAttributeNames={ '#date': 'Date' }, ExpressionAttributeValues={ ':one_year_ago': one_year_ago_str }, ExclusiveStartKey=response['LastEvaluatedKey'] ) old_records.extend(response['Items']) for record in old_records: print(json.dumps(record)) # The total number of old records should be zero. print(f"Total number of old records: {len(old_records)}")

Skrip pengujian ini menggunakan AWS SDK for Python (Boto3) untuk membuat koneksi ke tabel DynamoDB Anda dan memindai item yang lebih tua dari satu tahun. Untuk mengonfirmasi apakah fungsi Lambda telah berjalan dengan sukses, pada akhir pengujian, fungsi mencetak jumlah catatan yang lebih tua dari satu tahun masih dalam tabel. Jika fungsi Lambda berhasil, jumlah catatan lama dalam tabel harus nol.

Salin dan tempel kode berikut ke dalam file bernamatest_app.py.

import boto3 from datetime import datetime, timedelta import json # Initialize the DynamoDB client dynamodb = boto3.resource('dynamodb') # Specify your table name table_name = 'YourTableName' table = dynamodb.Table(table_name) # Get the current date current_date = datetime.now() # Calculate the date one year ago one_year_ago = current_date - timedelta(days=365) # Convert the date to string format (assuming the date in DynamoDB is stored as a string) one_year_ago_str = one_year_ago.strftime('%Y-%m-%d') # Scan the table response = table.scan( FilterExpression='#date < :one_year_ago', ExpressionAttributeNames={ '#date': 'Date' }, ExpressionAttributeValues={ ':one_year_ago': one_year_ago_str } ) # Process the results old_records = response['Items'] # Continue scanning if we have more items (pagination) while 'LastEvaluatedKey' in response: response = table.scan( FilterExpression='#date < :one_year_ago', ExpressionAttributeNames={ '#date': 'Date' }, ExpressionAttributeValues={ ':one_year_ago': one_year_ago_str }, ExclusiveStartKey=response['LastEvaluatedKey'] ) old_records.extend(response['Items']) for record in old_records: print(json.dumps(record)) # The total number of old records should be zero. print(f"Total number of old records: {len(old_records)}")

Skrip pengujian ini menggunakan AWS SDK for Python (Boto3) untuk membuat koneksi ke tabel DynamoDB Anda dan memindai item yang lebih tua dari satu tahun. Untuk mengonfirmasi apakah fungsi Lambda telah berjalan dengan sukses, pada akhir pengujian, fungsi mencetak jumlah catatan yang lebih tua dari satu tahun masih dalam tabel. Jika fungsi Lambda berhasil, jumlah catatan lama dalam tabel harus nol.

Membuat dan mengisi tabel contoh DynamoDB

Untuk menguji aplikasi pemeliharaan terjadwal, pertama-tama Anda membuat tabel DynamoDB dan mengisinya dengan beberapa data sampel. Anda dapat membuat tabel baik secara manual menggunakan AWS Management Console atau dengan menggunakan AWS SAM. Kami menyarankan Anda menggunakan AWS SAM untuk membuat dan mengkonfigurasi tabel dengan cepat menggunakan beberapa AWS CLI perintah.

Console
Untuk membuat tabel DynamoDB
  1. Buka halaman Tabel di konsol DynamoDB.

  2. Pilih Buat tabel.

  3. Buat tabel dengan melakukan hal berikut:

    1. Di bawah Rincian tabel, untuk nama Tabel, masukkanMyOrderTable.

    2. Untuk kunci Partition, masukkan Order_number dan biarkan tipe sebagai String.

    3. Untuk tombol Sort, masukkan Date dan biarkan tipe sebagai String.

    4. Biarkan pengaturan Tabel diatur ke Pengaturan default dan pilih Buat tabel.

  4. Ketika tabel Anda telah selesai dibuat dan Statusnya ditampilkan sebagai Aktif, buat indeks sekunder global (GSI) dengan melakukan hal berikut. Aplikasi Anda akan menggunakan GSI ini untuk mencari item secara langsung berdasarkan tanggal untuk menentukan apa yang akan dihapus.

    1. Pilih MyOrderTabledari daftar tabel.

    2. Pilih tab Indeks.

    3. Di bawah Indeks sekunder global, pilih Buat indeks.

    4. Di bawah Detail indeks, masukkan Date untuk kunci Partition dan biarkan tipe Data diatur ke String.

    5. Untuk Nama indeks, masukkan Date-index.

    6. Biarkan semua parameter lain diatur ke nilai defaultnya, gulir ke bagian bawah halaman, dan pilih Buat indeks.

AWS SAM
Untuk membuat tabel DynamoDB
  1. Arahkan ke folder tempat Anda menyimpan template.yaml file untuk tabel DynamoDB. Perhatikan bahwa contoh ini menggunakan dua template.yaml file. Pastikan mereka disimpan dalam sub-folder terpisah dan bahwa Anda berada di folder yang benar berisi template untuk membuat tabel DynamoDB Anda.

  2. Jalankan perintah berikut.

    sam build

    Perintah ini mengumpulkan artefak build untuk sumber daya yang ingin Anda terapkan dan menempatkannya dalam format dan lokasi yang tepat untuk menerapkannya.

  3. Untuk membuat sumber daya DynamoDB yang ditentukan dalam template.yaml file, jalankan perintah berikut.

    sam deploy --guided

    Menggunakan --guided tanda berarti itu AWS SAM akan menunjukkan kepada Anda petunjuk untuk memandu Anda melalui proses penerapan. Untuk penyebaran ini, masukkan a Stack name daricron-app-test-db, dan terima default untuk semua opsi lain dengan menggunakan Enter.

    Setelah AWS SAM selesai membuat sumber daya DynamoDB, Anda akan melihat pesan berikut.

    Successfully created/updated stack - cron-app-test-db in us-west-2
  4. Anda juga dapat mengonfirmasi bahwa tabel DynamoDB telah dibuat dengan membuka halaman Tabel dari konsol DynamoDB. Anda harus melihat tabel bernamaMyOrderTable.

Untuk membuat tabel DynamoDB
  1. Buka halaman Tabel di konsol DynamoDB.

  2. Pilih Buat tabel.

  3. Buat tabel dengan melakukan hal berikut:

    1. Di bawah Rincian tabel, untuk nama Tabel, masukkanMyOrderTable.

    2. Untuk kunci Partition, masukkan Order_number dan biarkan tipe sebagai String.

    3. Untuk tombol Sort, masukkan Date dan biarkan tipe sebagai String.

    4. Biarkan pengaturan Tabel diatur ke Pengaturan default dan pilih Buat tabel.

  4. Ketika tabel Anda telah selesai dibuat dan Statusnya ditampilkan sebagai Aktif, buat indeks sekunder global (GSI) dengan melakukan hal berikut. Aplikasi Anda akan menggunakan GSI ini untuk mencari item secara langsung berdasarkan tanggal untuk menentukan apa yang akan dihapus.

    1. Pilih MyOrderTabledari daftar tabel.

    2. Pilih tab Indeks.

    3. Di bawah Indeks sekunder global, pilih Buat indeks.

    4. Di bawah Detail indeks, masukkan Date untuk kunci Partition dan biarkan tipe Data diatur ke String.

    5. Untuk Nama indeks, masukkan Date-index.

    6. Biarkan semua parameter lain diatur ke nilai defaultnya, gulir ke bagian bawah halaman, dan pilih Buat indeks.

Setelah membuat tabel, Anda selanjutnya menambahkan beberapa data sampel untuk menguji aplikasi Anda. File CSV yang sample_data.csv Anda unduh sebelumnya berisi sejumlah contoh entri yang terdiri dari nomor pesanan, tanggal, dan informasi pelanggan dan pesanan. Gunakan skrip python yang disediakan load_sample_data.py untuk menambahkan data ini ke tabel Anda.

Untuk menambahkan data sampel ke tabel
  1. Arahkan ke direktori yang berisi load_sample_data.py file sample_data.csv dan. Jika file-file ini berada di direktori terpisah, pindahkan agar file tersebut disimpan di lokasi yang sama.

  2. Buat lingkungan virtual Python untuk menjalankan skrip dengan menjalankan perintah berikut. Kami menyarankan Anda menggunakan lingkungan virtual karena pada langkah berikut Anda harus menginstal AWS SDK for Python (Boto3).

    python -m venv venv
  3. Aktifkan lingkungan virtual dengan menjalankan perintah berikut.

    source venv/bin/activate
  4. Instal SDK for Python (Boto3) di lingkungan virtual Anda dengan menjalankan perintah berikut. Skrip menggunakan pustaka ini untuk terhubung ke tabel DynamoDB Anda dan menambahkan item.

    pip install boto3
  5. Jalankan skrip untuk mengisi tabel dengan menjalankan perintah berikut.

    python load_sample_data.py

    Jika skrip berjalan dengan sukses, skrip harus mencetak setiap item ke konsol saat memuat dan melaporkannyaData loading completed.

  6. Nonaktifkan lingkungan virtual dengan menjalankan perintah berikut.

    deactivate
  7. Anda dapat memverifikasi bahwa data telah dimuat ke tabel DynamoDB Anda dengan melakukan hal berikut:

    1. Buka halaman Jelajahi item dari konsol DynamoDB dan pilih tabel Anda (). MyOrderTable

    2. Di panel Item yang dikembalikan, Anda akan melihat 25 item dari file CSV yang ditambahkan skrip ke tabel.

Membuat aplikasi pemeliharaan terjadwal

Anda dapat membuat dan menerapkan sumber daya untuk aplikasi contoh ini langkah demi langkah menggunakan AWS Management Console atau dengan menggunakan AWS SAM. Dalam lingkungan produksi, kami menyarankan Anda menggunakan alat Infrustracture-as-Code (IAc) seperti AWS SAM menyebarkan aplikasi tanpa server secara berulang tanpa menggunakan proses manual.

Untuk contoh ini, ikuti petunjuk konsol untuk mempelajari cara mengonfigurasi setiap AWS sumber daya secara terpisah, atau ikuti AWS SAM petunjuk untuk menerapkan aplikasi dengan cepat menggunakan AWS CLI perintah.

Console
Untuk membuat fungsi menggunakan AWS Management Console

Pertama, buat fungsi yang berisi kode starter dasar. Anda kemudian mengganti kode ini dengan kode fungsi Anda sendiri dengan menyalin dan menempelkan kode langsung di editor kode Lambda, atau dengan mengunggah kode Anda sebagai paket. .zip Untuk tugas ini, kami sarankan hanya menyalin dan menempelkan kode.

  1. Buka halaman Fungsi di konsol Lambda.

  2. Pilih Buat fungsi.

  3. Pilih Penulis dari scratch.

  4. Di bagian Informasi dasar, lakukan hal berikut:

    1. Untuk Nama fungsi, masukkan ScheduledDBMaintenance.

    2. Untuk Runtime pilih versi Python terbaru.

    3. Untuk Arsitektur, pilih x86_64.

  5. Pilih Buat fungsi.

  6. Setelah fungsi Anda dibuat, Anda dapat mengonfigurasi fungsi Anda dengan kode fungsi yang disediakan.

    1. Di panel sumber Kode, ganti kode Hello world yang dibuat Lambda dengan kode fungsi Python dari file yang Anda simpan lambda_function.py sebelumnya.

    2. Di bagian DEPLOY, pilih Deploy untuk memperbarui kode fungsi Anda:

      Tombol terapkan di editor kode konsol Lambda
Untuk mengkonfigurasi memori fungsi dan batas waktu (konsol)
  1. Pilih tab Konfigurasi untuk fungsi Anda.

  2. Di panel konfigurasi Umum, pilih Edit.

  3. Atur Memori ke 256 MB dan Timeout menjadi 15 detik. Jika Anda memproses tabel besar dengan banyak catatan, misalnya dalam kasus lingkungan produksi, Anda dapat mempertimbangkan untuk mengatur Timeout ke jumlah yang lebih besar. Ini memberi fungsi Anda lebih banyak waktu untuk memindai, dan membersihkan database.

  4. Pilih Simpan.

Untuk mengkonfigurasi format log (konsol)

Anda dapat mengonfigurasi fungsi Lambda untuk mengeluarkan log dalam teks tidak terstruktur atau format JSON. Kami menyarankan Anda menggunakan format JSON untuk log agar lebih mudah untuk mencari dan memfilter data log. Untuk mempelajari lebih lanjut tentang opsi konfigurasi log Lambda, lihat. Mengkonfigurasi kontrol logging lanjutan untuk fungsi Lambda

  1. Pilih tab Konfigurasi untuk fungsi Anda.

  2. Pilih Alat pemantauan dan operasi.

  3. Di panel konfigurasi Logging, pilih Edit.

  4. Untuk konfigurasi Logging, pilih JSON.

  5. Pilih Simpan.

Untuk mengatur izin IAM

Untuk memberikan fungsi Anda izin yang diperlukan untuk membaca dan menghapus item DynamoDB, Anda perlu menambahkan kebijakan ke peran eksekusi fungsi Anda yang menentukan izin yang diperlukan.

  1. Buka tab Konfigurasi, lalu pilih Izin dari bilah navigasi kiri.

  2. Pilih nama peran di bawah Peran eksekusi.

  3. Di konsol IAM, pilih Tambahkan izin, lalu Buat kebijakan sebaris.

  4. Gunakan editor JSON dan masukkan kebijakan berikut:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:Scan", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource": "arn:aws:dynamodb:*:*:table/MyOrderTable" } ] }
  5. Beri nama kebijakanDynamoDBCleanupPolicy, lalu buat.

Untuk mengatur EventBridge Scheduler sebagai pemicu (konsol)
  1. Buka konsol EventBridge .

  2. Di panel navigasi kiri, pilih Penjadwal di bawah bagian Penjadwal.

  3. Pilih Buat jadwal.

  4. Konfigurasikan jadwal dengan melakukan hal berikut:

    1. Di bawah nama Jadwal, masukkan nama untuk jadwal Anda (misalnya,DynamoDBCleanupSchedule).

    2. Di bawah Pola jadwal, pilih Jadwal berulang.

    3. Untuk jenis Jadwal biarkan default sebagai jadwal berbasis Cron, lalu masukkan detail jadwal berikut:

      • Menit: 0

      • Jam: 3

      • Hari bulan: 1

      • Bulan: *

      • Hari dalam seminggu: ?

      • Tahun: *

      Saat dievaluasi, ekspresi cron ini berjalan pada hari pertama setiap bulan pukul 03:00 pagi.

    4. Untuk jendela waktu Fleksibel, pilih Mati.

  5. Pilih Berikutnya.

  6. Konfigurasikan pemicu untuk fungsi Lambda Anda dengan melakukan hal berikut:

    1. Di panel Detail target, biarkan API Target disetel ke target Templated, lalu pilih AWS Lambda Invoke.

    2. Di bawah Invoke, pilih fungsi Lambda Anda ScheduledDBMaintenance () dari daftar dropdown.

    3. Biarkan Payload kosong dan pilih Berikutnya.

    4. Gulir ke bawah ke Izin dan pilih Buat peran baru untuk jadwal ini. Saat Anda membuat jadwal EventBridge Scheduler baru menggunakan konsol, EventBridge Scheduler membuat kebijakan baru dengan izin yang diperlukan yang dibutuhkan jadwal untuk menjalankan fungsi Anda. Untuk informasi selengkapnya tentang mengelola izin jadwal Anda, lihat Jadwal berbasis cron. dalam Panduan Pengguna EventBridge Penjadwal.

    5. Pilih Berikutnya.

  7. Tinjau pengaturan Anda dan pilih Buat jadwal untuk menyelesaikan pembuatan jadwal dan pemicu Lambda.

AWS SAM
Untuk menerapkan aplikasi menggunakan AWS SAM
  1. Arahkan ke folder tempat Anda menyimpan template.yaml file untuk aplikasi. Perhatikan bahwa contoh ini menggunakan dua template.yaml file. Pastikan mereka disimpan dalam sub-folder terpisah dan bahwa Anda berada di folder yang benar berisi template untuk membuat aplikasi.

  2. Salin requirements.txt file lambda_function.py dan file yang Anda unduh sebelumnya ke folder yang sama. Lokasi kode yang ditentukan dalam AWS SAM template adalah./, yang berarti lokasi saat ini. AWS SAM akan mencari di folder ini untuk kode fungsi Lambda ketika Anda mencoba menerapkan aplikasi.

  3. Jalankan perintah berikut.

    sam build --use-container

    Perintah ini mengumpulkan artefak build untuk sumber daya yang ingin Anda terapkan dan menempatkannya dalam format dan lokasi yang tepat untuk menerapkannya. Menentukan --use-container opsi membangun fungsi Anda di dalam wadah Docker seperti Lambda. Kami menggunakannya di sini sehingga Anda tidak perlu menginstal Python 3.12 di mesin lokal Anda agar build berfungsi.

  4. Untuk membuat sumber daya Lambda dan EventBridge Scheduler yang ditentukan dalam template.yaml file, jalankan perintah berikut.

    sam deploy --guided

    Menggunakan --guided tanda berarti itu AWS SAM akan menunjukkan kepada Anda petunjuk untuk memandu Anda melalui proses penerapan. Untuk penyebaran ini, masukkan a Stack name daricron-maintenance-app, dan terima default untuk semua opsi lain dengan menggunakan Enter.

    Setelah AWS SAM selesai membuat sumber daya Lambda dan EventBridge Scheduler, Anda akan melihat pesan berikut.

    Successfully created/updated stack - cron-maintenance-app in us-west-2
  5. Anda juga dapat mengonfirmasi bahwa fungsi Lambda telah dibuat dengan membuka halaman Fungsi konsol Lambda. Anda akan melihat fungsi bernamaScheduledDBMaintenance.

Untuk membuat fungsi menggunakan AWS Management Console

Pertama, buat fungsi yang berisi kode starter dasar. Anda kemudian mengganti kode ini dengan kode fungsi Anda sendiri dengan menyalin dan menempelkan kode langsung di editor kode Lambda, atau dengan mengunggah kode Anda sebagai paket. .zip Untuk tugas ini, kami sarankan hanya menyalin dan menempelkan kode.

  1. Buka halaman Fungsi di konsol Lambda.

  2. Pilih Buat fungsi.

  3. Pilih Penulis dari scratch.

  4. Di bagian Informasi dasar, lakukan hal berikut:

    1. Untuk Nama fungsi, masukkan ScheduledDBMaintenance.

    2. Untuk Runtime pilih versi Python terbaru.

    3. Untuk Arsitektur, pilih x86_64.

  5. Pilih Buat fungsi.

  6. Setelah fungsi Anda dibuat, Anda dapat mengonfigurasi fungsi Anda dengan kode fungsi yang disediakan.

    1. Di panel sumber Kode, ganti kode Hello world yang dibuat Lambda dengan kode fungsi Python dari file yang Anda simpan lambda_function.py sebelumnya.

    2. Di bagian DEPLOY, pilih Deploy untuk memperbarui kode fungsi Anda:

      Tombol terapkan di editor kode konsol Lambda
Untuk mengkonfigurasi memori fungsi dan batas waktu (konsol)
  1. Pilih tab Konfigurasi untuk fungsi Anda.

  2. Di panel konfigurasi Umum, pilih Edit.

  3. Atur Memori ke 256 MB dan Timeout menjadi 15 detik. Jika Anda memproses tabel besar dengan banyak catatan, misalnya dalam kasus lingkungan produksi, Anda dapat mempertimbangkan untuk mengatur Timeout ke jumlah yang lebih besar. Ini memberi fungsi Anda lebih banyak waktu untuk memindai, dan membersihkan database.

  4. Pilih Simpan.

Untuk mengkonfigurasi format log (konsol)

Anda dapat mengonfigurasi fungsi Lambda untuk mengeluarkan log dalam teks tidak terstruktur atau format JSON. Kami menyarankan Anda menggunakan format JSON untuk log agar lebih mudah untuk mencari dan memfilter data log. Untuk mempelajari lebih lanjut tentang opsi konfigurasi log Lambda, lihat. Mengkonfigurasi kontrol logging lanjutan untuk fungsi Lambda

  1. Pilih tab Konfigurasi untuk fungsi Anda.

  2. Pilih Alat pemantauan dan operasi.

  3. Di panel konfigurasi Logging, pilih Edit.

  4. Untuk konfigurasi Logging, pilih JSON.

  5. Pilih Simpan.

Untuk mengatur izin IAM

Untuk memberikan fungsi Anda izin yang diperlukan untuk membaca dan menghapus item DynamoDB, Anda perlu menambahkan kebijakan ke peran eksekusi fungsi Anda yang menentukan izin yang diperlukan.

  1. Buka tab Konfigurasi, lalu pilih Izin dari bilah navigasi kiri.

  2. Pilih nama peran di bawah Peran eksekusi.

  3. Di konsol IAM, pilih Tambahkan izin, lalu Buat kebijakan sebaris.

  4. Gunakan editor JSON dan masukkan kebijakan berikut:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:Scan", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource": "arn:aws:dynamodb:*:*:table/MyOrderTable" } ] }
  5. Beri nama kebijakanDynamoDBCleanupPolicy, lalu buat.

Untuk mengatur EventBridge Scheduler sebagai pemicu (konsol)
  1. Buka konsol EventBridge .

  2. Di panel navigasi kiri, pilih Penjadwal di bawah bagian Penjadwal.

  3. Pilih Buat jadwal.

  4. Konfigurasikan jadwal dengan melakukan hal berikut:

    1. Di bawah nama Jadwal, masukkan nama untuk jadwal Anda (misalnya,DynamoDBCleanupSchedule).

    2. Di bawah Pola jadwal, pilih Jadwal berulang.

    3. Untuk jenis Jadwal biarkan default sebagai jadwal berbasis Cron, lalu masukkan detail jadwal berikut:

      • Menit: 0

      • Jam: 3

      • Hari bulan: 1

      • Bulan: *

      • Hari dalam seminggu: ?

      • Tahun: *

      Saat dievaluasi, ekspresi cron ini berjalan pada hari pertama setiap bulan pukul 03:00 pagi.

    4. Untuk jendela waktu Fleksibel, pilih Mati.

  5. Pilih Berikutnya.

  6. Konfigurasikan pemicu untuk fungsi Lambda Anda dengan melakukan hal berikut:

    1. Di panel Detail target, biarkan API Target disetel ke target Templated, lalu pilih AWS Lambda Invoke.

    2. Di bawah Invoke, pilih fungsi Lambda Anda ScheduledDBMaintenance () dari daftar dropdown.

    3. Biarkan Payload kosong dan pilih Berikutnya.

    4. Gulir ke bawah ke Izin dan pilih Buat peran baru untuk jadwal ini. Saat Anda membuat jadwal EventBridge Scheduler baru menggunakan konsol, EventBridge Scheduler membuat kebijakan baru dengan izin yang diperlukan yang dibutuhkan jadwal untuk menjalankan fungsi Anda. Untuk informasi selengkapnya tentang mengelola izin jadwal Anda, lihat Jadwal berbasis cron. dalam Panduan Pengguna EventBridge Penjadwal.

    5. Pilih Berikutnya.

  7. Tinjau pengaturan Anda dan pilih Buat jadwal untuk menyelesaikan pembuatan jadwal dan pemicu Lambda.

Menguji aplikasi

Untuk menguji apakah jadwal Anda memicu fungsi Anda dengan benar, dan bahwa fungsi Anda membersihkan catatan dengan benar dari database, Anda dapat mengubah jadwal sementara untuk dijalankan sekali pada waktu tertentu. Anda kemudian dapat menjalankan sam deploy lagi untuk mengatur ulang jadwal pengulangan Anda agar berjalan sebulan sekali.

Untuk menjalankan aplikasi menggunakan AWS Management Console
  1. Arahkan kembali ke halaman konsol EventBridge Scheduler.

  2. Pilih jadwal Anda, lalu pilih Edit.

  3. Di bagian Pola jadwal, di bawah Perulangan, pilih Jadwal satu kali.

  4. Atur waktu pemanggilan Anda ke beberapa menit dari sekarang, tinjau pengaturan Anda, lalu pilih Simpan.

Setelah jadwal berjalan dan memanggil targetnya, Anda menjalankan test_app.py skrip untuk memverifikasi bahwa fungsi Anda berhasil menghapus semua catatan lama dari tabel DynamoDB.

Untuk memverifikasi bahwa catatan lama dihapus menggunakan skrip Python
  1. Di jendela baris perintah Anda, arahkan ke folder tempat Anda menyimpantest_app.py.

  2. Jalankan penulisan.

    python test_app.py

    Jika berhasil, Anda akan melihat output berikut.

    Total number of old records: 0

Langkah selanjutnya

Anda sekarang dapat memodifikasi jadwal EventBridge Scheduler untuk memenuhi persyaratan aplikasi partifuclar Anda. EventBridge Scheduler mendukung ekspresi jadwal berikut: cron, rate, dan jadwal satu kali.

Untuk informasi selengkapnya tentang Ekspresi EventBridge jadwal penjadwal, lihat Jenis jadwal di Panduan Pengguna EventBridge Penjadwal.

PrivasiSyarat situsPreferensi cookie
© 2025, Amazon Web Services, Inc. atau afiliasinya. Semua hak dilindungi undang-undang.