Menggunakan Lambda dengan AWS CLI - AWS Lambda

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

Menggunakan Lambda dengan AWS CLI

Anda dapat menggunakan AWS Command Line Interface untuk mengelola fungsi dan sumber daya AWS Lambda lainnya. AWS CLI menggunakan AWS SDK for Python (Boto) untuk berinteraksi dengan API Lambda. Anda dapat menggunakannya untuk mempelajari tentang API, dan menerapkan pengetahuan tersebut dalam membangun aplikasi yang menggunakan Lambda dengan AWS.

Dalam tutorial ini, Anda mengelola dan mengaktifkan fungsi Lambda dengan AWS CLI. Untuk informasi selengkapnya, lihat Apa itu AWS CLI? di Panduan Pengguna AWS Command Line Interface.

Prasyarat

Tutorial ini mengasumsikan Anda memiliki pengetahuan tentang operasi Lambda dan konsol Lambda dasar. Jika belum, ikuti petunjuk di Membuat fungsi Lambda dengan konsol.

Untuk menyelesaikan langkah-langkah berikut, Anda memerlukan AWS Command Line Interface(AWS CLI) versi 2. Perintah dan output yang diharapkan dicantumkan dalam blok terpisah:

aws --version

Anda akan melihat output berikut:

aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2

Untuk perintah panjang, karakter escape (\) digunakan untuk memisahkan perintah menjadi beberapa baris.

Di Linux dan macOS, gunakan shell dan manajer paket pilihan Anda.

catatan

Di Windows, beberapa perintah Bash CLI yang biasa Anda gunakan dengan Lambda (zipseperti) tidak didukung oleh terminal bawaan sistem operasi. Untuk mendapatkan versi terintegrasi Windows dari Ubuntu dan Bash, instal Windows Subsystem untuk Linux. Contoh perintah CLI dalam panduan ini menggunakan pemformatan Linux. Perintah yang menyertakan dokumen JSON sebaris harus diformat ulang jika Anda menggunakan CLI Windows.

Buat peran eksekusi

Buat peran eksekusi yang memberikan izin kepada fungsi Anda untuk mengakses sumber daya AWS. Untuk membuat peran eksekusi dengan AWS CLI, gunakan perintah create-role.

Dalam contoh berikut, Anda menentukan kebijakan kepercayaan sebaris. Persyaratan untuk kutipan yang keluar di string JSON bervariasi tergantung pada shell Anda.

aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'

Anda juga dapat menentukan kebijakan kepercayaan untuk peran menggunakan file JSON. Dalam contoh berikut, trust-policy.json adalah file dalam direktori saat ini. Kebijakan kepercayaan ini memungkinkan Lambda untuk menggunakan izin peran dengan memberikan lambda.amazonaws.com izin utama layanan untuk memanggil tindakan AWS Security Token Service ()AWS STS. AssumeRole

contoh trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
aws iam create-role --role-name lambda-ex --assume-role-policy-document file://trust-policy.json

Anda akan melihat output berikut:

{ "Role": { "Path": "/", "RoleName": "lambda-ex", "RoleId": "AROAQFOXMPL6TZ6ITKWND", "Arn": "arn:aws:iam::123456789012:role/lambda-ex", "CreateDate": "2020-01-17T23:19:12Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }

Untuk menambahkan izin peran, gunakan perintah attach-policy-to-role. Mulai dengan menambahkan kebijakan yang dikelola AWSLambdaBasicExecutionRole.

aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

AWSLambdaBasicExecutionRoleKebijakan ini memiliki izin yang diperlukan fungsi untuk menulis log ke CloudWatch Log.

Buat fungsi

Contoh berikut mencatat nilai variabel lingkungan dan objek peristiwa.

contoh index.js
exports.handler = async function(event, context) { console.log("ENVIRONMENT VARIABLES\n" + JSON.stringify(process.env, null, 2)) console.log("EVENT\n" + JSON.stringify(event, null, 2)) return context.logStreamName }
Untuk membuat fungsi
  1. Salin kode sampel ke file dengan nama index.js.

  2. Buat paket deployment.

    zip function.zip index.js
  3. Buat fungsi Lambda dengan perintah create-function. Ganti teks yang disorot dalam peran ARN dengan ID akun Anda.

    aws lambda create-function --function-name my-function \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs20.x \ --role arn:aws:iam::123456789012:role/lambda-ex

    Anda akan melihat output berikut:

    { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "Handler": "index.handler", "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff", ... }

Untuk mendapatkan log untuk invokasi dari baris perintah, gunakan opsi --log-type. Respons mencakup bidang LogResult yang memuat hingga 4 KB log berkode base64 dari invokasi.

aws lambda invoke --function-name my-function out --log-type Tail

Anda akan melihat output berikut:

{ "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }

Anda dapat menggunakan utilitas base64 untuk mendekodekan log.

aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d

Anda akan melihat output berikut:

START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB

Utilitas base64 tersedia di Linux, , dan Ubuntu pada Windows. Untuk MacOS, perintahnya adalah base64 -D.

Untuk mendapatkan log acara lengkap dari baris perintah, Anda dapat menyertakan nama pengaliran log di output fungsi Anda, seperti yang ditunjukkan pada contoh sebelumnya. Skrip contoh berikut memicu fungsi yang disebut my-function dan mengunduh lima kejadian log terakhir.

contoh Skrip get-logs.sh

Contoh ini mengharuskan my-function mengembalikan ID pengaliran log.

#!/bin/bash aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out sed -i'' -e 's/"//g' out sleep 15 aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name $(cat out) --limit 5

Skrip menggunakan sed untuk menghapus kutipan dari file output, dan akan tidur selama 15 detik untuk memberikan waktu hingga log tersedia. Output mencakup respons dari Lambda dan output dari perintah get-log-events.

./get-logs.sh

Anda akan melihat output berikut:

{ "StatusCode": 200, "ExecutedVersion": "$LATEST" } { "events": [ { "timestamp": 1559763003171, "message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n", "ingestionTime": 1559763003309 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r \"key\": \"value\"\r}\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n", "ingestionTime": 1559763018353 } ], "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795", "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080" }

Perbarui fungsi

Setelah Anda membuat fungsi, Anda dapat mengonfigurasi kemampuan tambahan untuk fungsi tersebut, seperti pemicu, akses jaringan, dan akses sistem file. Anda juga dapat menyesuaikan sumber daya yang terkait dengan fungsi, seperti memori dan konkurensi. Konfigurasi ini berlaku untuk fungsi yang didefinisikan sebagai arsip file.zip dan fungsi yang didefinisikan sebagai gambar kontainer.

Gunakan update-function-configurationperintah untuk mengkonfigurasi fungsi. Contoh berikut mengatur memori fungsi untuk 256 MB.

contoh update-function-configuration perintah
aws lambda update-function-configuration \ --function-name my-function \ --memory-size 256

Cantumkan fungsi Lambda di akun Anda

Jalankan perintah AWS CLI list-functions berikut untuk mengambil daftar fungsi yang telah Anda buat.

aws lambda list-functions --max-items 10

Anda akan melihat output berikut:

{ "Functions": [ { "FunctionName": "cli", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "Handler": "index.handler", ... }, { "FunctionName": "random-error", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:random-error", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "index.handler", ... }, ... ], "NextToken": "eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxMH0=" }

Sebagai respons, Lambda mengembalikan daftar yang berisi hingga 10 fungsi. Jika ada lebih banyak fungsi yang dapat Anda ambil, NextToken memberikan penanda yang dapat Anda gunakan dalam permintaan list-functions berikutnya. Perintah list-functions AWS CLI berikut adalah contoh yang menunjukkan parameter --starting-token.

aws lambda list-functions --max-items 10 --starting-token eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxMH0=

Mengambil fungsi Lambda

Perintah get-function Lambda CLI mengembalikan metadata fungsi Lambda dan URL yang telah ditandatangani sebelumnya yang dapat Anda gunakan untuk mengunduh paket deployment fungsi.

aws lambda get-function --function-name my-function

Anda akan melihat output berikut:

{ "Configuration": { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff", ... }, "Code": { "RepositoryType": "S3", "Location": "https://awslambda-us-east-2-tasks.s3.us-east-2.amazonaws.com/snapshots/123456789012/my-function-4203078a-b7c9-4f35-..." } }

Untuk informasi lebih lanjut, lihat GetFunction.

Hapus

Jalankan perintah delete-function berikut ini untuk menghapus fungsi my-function.

aws lambda delete-function --function-name my-function

Hapus IAM role yang Anda buat di konsol IAM. Untuk informasi tentang menghapus peran, lihat Menghapus peran atau profil instans dalam Panduan Pengguna IAM.