

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

# Menginvokasi fungsi Lambda dengan prosedur tersimpan Aurora MySQL (sudah dihentikan)
<a name="AuroraMySQL.Integrating.ProcLambda"></a>

Anda dapat memanggil AWS Lambda fungsi dari cluster DB MySQL Aurora dengan memanggil prosedur. `mysql.lambda_async` Pendekatan ini dapat berguna ketika Anda ingin mengintegrasikan database Anda berjalan di Aurora MySQL dengan layanan lain. AWS Misalnya, Anda mungkin ingin mengirim notifikasi menggunakan Amazon Simple Notification Service (Amazon SNS) setiap kali sebuah baris dimasukkan ke dalam tabel tertentu di basis data Anda. 

**Contents**
+ [Pertimbangan versi Aurora MySQL](#AuroraMySQL.Integrating.ProcLambda.caveats)
+ [Menggunakan prosedur mysql.lambda\$1async untuk menginvokasi fungsi Lambda (sudah dihentikan)](#AuroraMySQL.Integrating.Lambda.mysql_lambda_async)
  + [Sintaksis](#AuroraMySQL.Integrating.Lambda.mysql_lambda_async.Syntax)
  + [Parameter](#AuroraMySQL.Integrating.Lambda.mysql_lambda_async.Parameters)
  + [Contoh](#AuroraMySQL.Integrating.Lambda.mysql_lambda_async.Examples)

## Pertimbangan versi Aurora MySQL
<a name="AuroraMySQL.Integrating.ProcLambda.caveats"></a>

Mulai dari Aurora MySQL versi 2, Anda dapat menggunakan metode fungsi native, bukan prosedur tersimpan ini untuk menginvokasi fungsi Lambda. Untuk informasi selengkapnya tentang fungsi native, lihat [Menggunakan fungsi native untuk menginvokasi fungsi Lambda](AuroraMySQL.Integrating.NativeLambda.md#AuroraMySQL.Integrating.NativeLambda.lambda_functions).

Di Aurora MySQL versi 2, prosedur tersimpan `mysql.lambda_async` tidak didukung lagi. Sebaiknya gunakan fungsi Lambda native sebagai gantinya.

Di Aurora MySQL versi 3, prosedur tersimpan tidak tersedia.

## Menggunakan prosedur mysql.lambda\$1async untuk menginvokasi fungsi Lambda (sudah dihentikan)
<a name="AuroraMySQL.Integrating.Lambda.mysql_lambda_async"></a>

Prosedur `mysql.lambda_async` adalah prosedur tersimpan default yang menginvokasi fungsi Lambda secara asinkron. Untuk menggunakan prosedur ini, pengguna basis data Anda harus memiliki hak akses `EXECUTE` pada prosedur tersimpan `mysql.lambda_async`.

### Sintaksis
<a name="AuroraMySQL.Integrating.Lambda.mysql_lambda_async.Syntax"></a>

Prosedur `mysql.lambda_async` memiliki sintaksis berikut.

```
CALL mysql.lambda_async (
  lambda_function_ARN,
  lambda_function_input
)
```

### Parameter
<a name="AuroraMySQL.Integrating.Lambda.mysql_lambda_async.Parameters"></a>

Prosedur `mysql.lambda_async` memiliki parameter berikut.

* lambda\$1function\$1ARN *  
Amazon Resource Name (ARN) dari fungsi Lambda yang akan diinvokasi.

* lambda\$1function\$1input *  
String input, dalam format JSON, untuk fungsi Lambda yang diinvokasi.

### Contoh
<a name="AuroraMySQL.Integrating.Lambda.mysql_lambda_async.Examples"></a>

Sebagai praktik terbaik, sebaiknya selesaikan panggilan ke prosedur `mysql.lambda_async` dalam prosedur tersimpan yang dapat dipanggil dari sumber berbeda seperti pemicu atau kode klien. Pendekatan ini dapat membantu menghindari masalah ketidakcocokan impedansi dan memudahkan Anda untuk menginvokasi fungsi Lambda. 

**catatan**  
Hati-hati saat menjalankan AWS Lambda fungsi dari pemicu pada tabel yang mengalami lalu lintas tulis tinggi. `INSERT`,`UPDATE`, dan `DELETE` pemicu diaktifkan per baris. Beban kerja sarat penulisan pada tabel dengan pemicu `INSERT`, `UPDATE`, atau `DELETE` akan menghasilkan banyak panggilan ke fungsi AWS Lambda Anda.   
Meskipun panggilan ke prosedur `mysql.lambda_async` bersifat asinkron, pemicunya bersifat sinkron. Pernyataan yang menghasilkan sejumlah besar aktivasi pemicu tidak menunggu panggilan ke fungsi AWS Lambda selesai, tetapi menunggu pemicu selesai sebelum mengembalikan kontrol ke klien.

**Example Contoh: Memanggil AWS Lambda fungsi untuk mengirim email**  
Contoh berikut membuat prosedur tersimpan yang dapat Anda panggil dalam kode basis data Anda untuk mengirim email menggunakan fungsi Lambda.  
**AWS Lambda Fungsi**  

```
import boto3

ses = boto3.client('ses')

def SES_send_email(event, context):

    return ses.send_email(
        Source=event['email_from'],
        Destination={
            'ToAddresses': [
            event['email_to'],
            ]
        },

        Message={
            'Subject': {
            'Data': event['email_subject']
            },
            'Body': {
                'Text': {
                    'Data': event['email_body']
                }
            }
        }
    )
```
**Prosedur Tersimpan**  

```
DROP PROCEDURE IF EXISTS SES_send_email;
DELIMITER ;;
  CREATE PROCEDURE SES_send_email(IN email_from VARCHAR(255),
                                  IN email_to VARCHAR(255),
                                  IN subject VARCHAR(255),
                                  IN body TEXT) LANGUAGE SQL
  BEGIN
    CALL mysql.lambda_async(
         'arn:aws:lambda:us-west-2:123456789012:function:SES_send_email',
         CONCAT('{"email_to" : "', email_to,
             '", "email_from" : "', email_from,
             '", "email_subject" : "', subject,
             '", "email_body" : "', body, '"}')
     );
  END
  ;;
DELIMITER ;
```
**Panggil Prosedur Tersimpan untuk Menginvokasi Fungsi AWS Lambda **  

```
mysql> call SES_send_email('example_from@amazon.com', 'example_to@amazon.com', 'Email subject', 'Email content');
```

**Example Contoh: Memanggil AWS Lambda fungsi untuk mempublikasikan peristiwa dari pemicu**  
Contoh berikut membuat prosedur tersimpan yang menerbitkan peristiwa dengan menggunakan Amazon SNS. Kode tersebut memanggil prosedur dari pemicu ketika baris ditambahkan ke tabel.  
**AWS Lambda Fungsi**  

```
import boto3

sns = boto3.client('sns')

def SNS_publish_message(event, context):

    return sns.publish(
        TopicArn='arn:aws:sns:us-west-2:123456789012:Sample_Topic',
        Message=event['message'],
        Subject=event['subject'],
        MessageStructure='string'
    )
```
**Prosedur Tersimpan**  

```
DROP PROCEDURE IF EXISTS SNS_Publish_Message;
DELIMITER ;;
CREATE PROCEDURE SNS_Publish_Message (IN subject VARCHAR(255),
                                      IN message TEXT) LANGUAGE SQL
BEGIN
  CALL mysql.lambda_async('arn:aws:lambda:us-west-2:123456789012:function:SNS_publish_message',
     CONCAT('{ "subject" : "', subject,
            '", "message" : "', message, '" }')
     );
END
;;
DELIMITER ;
```
**Tabel**  

```
CREATE TABLE 'Customer_Feedback' (
  'id' int(11) NOT NULL AUTO_INCREMENT,
  'customer_name' varchar(255) NOT NULL,
  'customer_feedback' varchar(1024) NOT NULL,
  PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
**Pemicu**  

```
DELIMITER ;;
CREATE TRIGGER TR_Customer_Feedback_AI
  AFTER INSERT ON Customer_Feedback
  FOR EACH ROW
BEGIN
  SELECT CONCAT('New customer feedback from ', NEW.customer_name), NEW.customer_feedback INTO @subject, @feedback;
  CALL SNS_Publish_Message(@subject, @feedback);
END
;;
DELIMITER ;
```
**Sisipkan Baris ke dalam Tabel untuk Memicu Notifikasi**  

```
mysql> insert into Customer_Feedback (customer_name, customer_feedback) VALUES ('Sample Customer', 'Good job guys!');
```