

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

# Memanggil DAGs dengan fungsi Lambda
<a name="samples-lambda"></a>

Contoh kode berikut menggunakan [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)fungsi untuk mendapatkan token CLI Apache Airflow dan memanggil grafik asiklik terarah (DAG) di lingkungan Amazon MWAA.

**Topics**
+ [Versi](#samples-lambda-version)
+ [Prasyarat](#samples-lambda-prereqs)
+ [Izin](#samples-lambda-permissions)
+ [Dependensi](#samples-lambda-dependencies)
+ [Contoh kode](#samples-lambda-code)

## Versi
<a name="samples-lambda-version"></a>

**[Anda dapat menggunakan contoh kode pada halaman ini dengan **Apache Airflow v2 di Python 3.10 dan Apache Airflow**[v3 di Python 3.11](https://peps.python.org/pep-0619/).](https://peps.python.org/pep-0664/)**

## Prasyarat
<a name="samples-lambda-prereqs"></a>

Untuk menggunakan contoh kode ini, Anda harus:
+ Gunakan [mode akses jaringan publik untuk lingkungan](configuring-networking.md#webserver-options-public-network-onconsole) [Amazon MWAA](get-started.md) Anda.
+ Memiliki [fungsi Lambda menggunakan runtime](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) Python terbaru.

**catatan**  
Jika fungsi Lambda dan lingkungan Amazon MWAA Anda berada di VPC yang sama, Anda dapat menggunakan kode ini di jaringan pribadi. Untuk konfigurasi ini, peran eksekusi fungsi Lambda memerlukan izin untuk memanggil operasi API Amazon Elastic Compute Cloud (Amazon EC2). **CreateNetworkInterface** Anda dapat memberikan izin ini menggunakan kebijakan [https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole$jsonEditor](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole$jsonEditor) AWS-managed.

## Izin
<a name="samples-lambda-permissions"></a>

Untuk menggunakan contoh kode di halaman ini, peran eksekusi lingkungan Amazon MWAA Anda memerlukan akses untuk melakukan tindakan. `airflow:CreateCliToken` Anda dapat memberikan izin ini menggunakan kebijakan `AmazonMWAAAirflowCliAccess` AWS-managed:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "airflow:CreateCliToken"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Untuk informasi lebih lanjut, lihat[Kebijakan CLI Apache Airflow: Amazon MWAAAirflow CliAccess](access-policies.md#cli-access).

## Dependensi
<a name="samples-lambda-dependencies"></a>

Untuk menggunakan contoh kode ini dengan Apache Airflow v2 dan yang lebih baru, tidak diperlukan dependensi tambahan. Gunakan [aws-mwaa-docker-images](https://github.com/aws/amazon-mwaa-docker-images)untuk menginstal Apache Airflow.

## Contoh kode
<a name="samples-lambda-code"></a>

1. Buka AWS Lambda konsol di [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Pilih fungsi Lambda Anda dari daftar **Fungsi**.

1. Pada halaman fungsi, salin kode berikut dan ganti yang berikut ini dengan nama sumber daya Anda:
   + `YOUR_ENVIRONMENT_NAME`— Nama lingkungan Amazon MWAA Anda.
   + `YOUR_DAG_NAME`— Nama DAG yang ingin Anda panggil.

   ```
   import boto3
   import http.client
   import base64
   import ast
   mwaa_env_name = 'YOUR_ENVIRONMENT_NAME'
   dag_name = 'YOUR_DAG_NAME'
   mwaa_cli_command = 'dags trigger'
   ​
   client = boto3.client('mwaa')
   ​
   def lambda_handler(event, context):
       # get web token
       mwaa_cli_token = client.create_cli_token(
           Name=mwaa_env_name
       )
       
       conn = http.client.HTTPSConnection(mwaa_cli_token['WebServerHostname'])
       payload = mwaa_cli_command + " " + dag_name
       headers = {
         'Authorization': 'Bearer ' + mwaa_cli_token['CliToken'],
         'Content-Type': 'text/plain'
       }
       conn.request("POST", "/aws_mwaa/cli", payload, headers)
       res = conn.getresponse()
       data = res.read()
       dict_str = data.decode("UTF-8")
       mydata = ast.literal_eval(dict_str)
       return base64.b64decode(mydata['stdout'])
   ```

1. Pilih **Deploy**.

1. Pilih **Uji** untuk menjalankan fungsi Anda menggunakan konsol Lambda.

1. Untuk memverifikasi bahwa Lambda berhasil memanggil DAG, gunakan konsol Amazon MWAA untuk menavigasi ke UI Apache Airflow lingkungan Anda, lalu lakukan hal berikut:

   1. Pada **DAGs**halaman, cari DAG target baru Anda dalam daftar DAGs.

   1. Di bawah **Last Run**, periksa stempel waktu untuk menjalankan DAG terbaru. Stempel waktu ini harus sangat cocok dengan stempel waktu terbaru `invoke_dag` di lingkungan Anda yang lain.

   1. Di bawah **Tugas Terbaru**, periksa apakah proses terakhir berhasil.