Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Deploy fungsi Lambda Go dengan gambar kontainer
Ada dua cara untuk membangun image kontainer untuk fungsi Go Lambda:
-
Menggunakan gambar AWS dasar khusus OS
Go diimplementasikan secara berbeda dari runtime terkelola lainnya. Karena Go mengkompilasi secara native ke biner yang dapat dieksekusi, itu tidak memerlukan runtime bahasa khusus. Gunakan gambar dasar khusus OS untuk membuat gambar Go untuk Lambda. Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan
aws-lambda-go/lambda
paket dalam gambar. -
Menggunakan gambar AWS non-dasar
Anda dapat menggunakan gambar dasar alternatif dari registri kontainer lain, seperti Alpine Linux atau Debian. Anda juga dapat menggunakan gambar kustom yang dibuat oleh organisasi Anda. Untuk membuat gambar kompatibel dengan Lambda, Anda harus menyertakan
aws-lambda-go/lambda
paket dalam gambar.
Tip
Untuk mengurangi waktu yang dibutuhkan agar fungsi kontainer Lambda menjadi aktif, lihat Menggunakan build multi-tahap
Halaman ini menjelaskan cara membuat, menguji, dan menyebarkan gambar kontainer untuk Lambda.
AWS gambar dasar untuk menerapkan fungsi Go
Go diimplementasikan secara berbeda dari runtime terkelola lainnya. Karena Go mengkompilasi secara native ke biner yang dapat dieksekusi, itu tidak memerlukan runtime bahasa khusus. Gunakan gambar dasar khusus OS untuk menerapkan fungsi Go ke Lambda.
Hanya OS | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Nama | Pengidentifikasi | Sistem operasi | Tanggal pengusangan | Buat fungsi blok | Pembaruan fungsi blok | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Runtime Khusus OS |
|
Amazon Linux 2023 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Runtime Khusus OS |
|
Amazon Linux 2 |
Galeri Publik Registri Kontainer Elastis Amazon: gallery.ecr.aws/lambda/provided
Klien antarmuka Go runtime
Paket aws-lambda-go/lambda
termasuk implementasi dari antarmuka runtime. Untuk contoh cara menggunakan aws-lambda-go/lambda
dalam gambar Anda, lihat Menggunakan gambar AWS dasar khusus OS atauMenggunakan gambar AWS non-dasar.
Menggunakan gambar AWS dasar khusus OS
Go diimplementasikan secara berbeda dari runtime terkelola lainnya. Karena Go mengkompilasi secara native ke biner yang dapat dieksekusi, itu tidak memerlukan runtime bahasa khusus. Gunakan image dasar khusus OS untuk membuat gambar kontainer untuk fungsi Go.
Tag | Waktu berjalan | Sistem operasi | Dockerfile | penghentian |
---|---|---|---|---|
al2023 |
Runtime Khusus OS | Amazon Linux 2023 | Dockerfile untuk Runtime khusus OS aktif GitHub |
|
al2 |
Runtime Khusus OS | Amazon Linux 2 | Dockerfile untuk Runtime khusus OS aktif GitHub |
Untuk informasi selengkapnya tentang gambar dasar ini, lihat disediakan
Anda harus menyertakan paket aws-lambda-go/lambda
Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
Untuk membangun dan menerapkan fungsi Go dengan image provided.al2023
dasar
-
Buat direktori untuk proyek, dan kemudian beralih ke direktori itu.
mkdir hello cd hello
-
Inisialisasi modul Go baru.
go mod init
example.com/hello-world
-
Tambahkan pustaka lambda sebagai dependensi modul baru Anda.
go get github.com/aws/aws-lambda-go/lambda
-
Buat file bernama
main.go
dan kemudian buka di editor teks. Ini adalah kode untuk fungsi Lambda. Anda dapat menggunakan kode contoh berikut untuk pengujian, atau menggantinya dengan kode Anda sendiri.package main import ( "context" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" ) func handler(ctx context.Context, event events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { response := events.APIGatewayProxyResponse{ StatusCode: 200, Body: "\"Hello from Lambda!\"", } return response, nil } func main() { lambda.Start(handler) }
-
Gunakan editor teks untuk membuat Dockerfile di direktori proyek Anda. Contoh berikut Dockerfile menggunakan build multi-tahap
. Ini memungkinkan Anda untuk menggunakan gambar dasar yang berbeda di setiap langkah. Anda dapat menggunakan satu gambar, seperti image dasar Go , untuk mengkompilasi kode Anda dan membangun biner yang dapat dieksekusi. Anda kemudian dapat menggunakan gambar yang berbeda, seperti provided.al2023
, dalamFROM
pernyataan akhir untuk menentukan gambar yang Anda terapkan ke Lambda. Proses build dipisahkan dari image penerapan akhir, sehingga gambar akhir hanya berisi file yang diperlukan untuk menjalankan aplikasi.Anda dapat menggunakan
lambda.norpc
tag opsional untuk mengecualikan komponen Remote Procedure Call (RPC) dari pustaka lambda. Komponen RPC hanya diperlukan jika Anda menggunakan runtime Go 1.x yang tidak digunakan lagi. Mengecualikan RPC mengurangi ukuran paket penyebaran. contoh — Multi-tahap membangun Dockerfile
catatan
Pastikan bahwa versi Go yang Anda tentukan di Dockerfile Anda (misalnya,
golang:1.20
) adalah versi Go yang sama dengan yang Anda gunakan untuk membuat aplikasi Anda.FROM
golang:1.20
as build WORKDIR /helloworld # Copy dependencies list COPY go.mod go.sum ./ # Build with optional lambda.norpc tag COPY main.go . RUN go build-tags lambda.norpc
-o main main.go # Copy artifacts to a clean image FROMpublic.ecr.aws/lambda/provided:al2023
COPY --from=build /helloworld/main ./main ENTRYPOINT [ "./main" ] -
Buat image Docker dengan perintah docker
build. Contoh berikut menamai gambar docker-image
dan memberinyatest
tag. docker build --platform linux/amd64 -t
docker-image
:test
.catatan
Perintah menentukan
--platform linux/amd64
opsi untuk memastikan bahwa container Anda kompatibel dengan lingkungan eksekusi Lambda terlepas dari arsitektur mesin build Anda. Jika Anda berniat untuk membuat fungsi Lambda menggunakan arsitektur set instruksi ARM64, pastikan untuk mengubah perintah untuk menggunakan opsi sebagai--platform linux/arm64
gantinya.
Gunakan emulator antarmuka runtime untuk menguji gambar Anda secara lokal. Emulator antarmuka runtime disertakan dalam gambar provided.al2023
dasar.
Untuk menjalankan emulator antarmuka runtime di mesin lokal Anda
-
Mulai gambar Docker dengan perintah docker run. Perhatikan hal berikut:
-
docker-image
adalah nama gambar dantest
tag. -
./main
adalahENTRYPOINT
dari Dockerfile Anda.
docker run -d -p 9000:8080 \ --entrypoint /usr/local/bin/aws-lambda-rie \
docker-image:test ./main
Perintah ini menjalankan gambar sebagai wadah dan membuat titik akhir lokal di
localhost:9000/2015-03-31/functions/function/invocations
. -
-
Dari jendela terminal baru, posting peristiwa ke titik akhir berikut menggunakan perintah curl:
curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'
Perintah ini memanggil fungsi dengan peristiwa kosong dan mengembalikan respons. Beberapa fungsi mungkin memerlukan payload JSON. Contoh:
curl "http://localhost:9000/2015-03-31/functions/function/invocations" -d '
{"payload":"hello world!"}
' -
Dapatkan ID kontainer.
docker ps
-
Gunakan perintah docker kill
untuk menghentikan kontainer. Dalam perintah ini, ganti 3766c4ab331c
dengan ID kontainer dari langkah sebelumnya.docker kill
3766c4ab331c
Untuk mengunggah gambar ke Amazon ECR dan membuat fungsi Lambda
-
Jalankan get-login-password
perintah untuk mengautentikasi CLI Docker ke registri Amazon ECR Anda. -
Tetapkan
--region
nilai ke Wilayah AWS tempat Anda ingin membuat repositori Amazon ECR. -
Ganti
111122223333
dengan Akun AWS ID Anda.
aws ecr get-login-password --region
us-east-1
| docker login --username AWS --password-stdin111122223333
.dkr.ecr.us-east-1
.amazonaws.com -
-
Buat repositori di Amazon ECR menggunakan perintah create-repository.
aws ecr create-repository --repository-name
hello-world
--regionus-east-1
--image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLEcatatan
Repositori Amazon ECR harus sama Wilayah AWS dengan fungsi Lambda.
Jika berhasil, Anda melihat respons seperti ini:
{ "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
-
Salin
repositoryUri
dari output pada langkah sebelumnya. -
Jalankan perintah tag docker
untuk menandai gambar lokal Anda ke repositori Amazon ECR Anda sebagai versi terbaru. Dalam perintah ini: -
Ganti
docker-image:test
dengan nama dan taggambar Docker Anda. -
Ganti
<ECRrepositoryUri>
denganrepositoryUri
yang Anda salin. Pastikan untuk menyertakan:latest
di akhir URI.
docker tag docker-image:test <ECRrepositoryUri>:latest
Contoh:
docker tag
docker-image
:test
111122223333
.dkr.ecr.us-east-1
.amazonaws.com/hello-world
:latest -
-
Jalankan perintah docker push
untuk menyebarkan gambar lokal Anda ke repositori Amazon ECR. Pastikan untuk menyertakan :latest
di akhir URI repositori.docker push
111122223333
.dkr.ecr.us-east-1
.amazonaws.com/hello-world
:latest -
Buat peran eksekusi untuk fungsi tersebut, jika Anda belum memilikinya. Anda memerlukan Nama Sumber Daya Amazon (ARN) dari peran tersebut di langkah berikutnya.
-
Buat fungsi Lambda. Untuk
ImageUri
, tentukan URI repositori dari sebelumnya. Pastikan untuk menyertakan:latest
di akhir URI.aws lambda create-function \ --function-name
hello-world
\ --package-type Image \ --code ImageUri=111122223333
.dkr.ecr.us-east-1
.amazonaws.com/hello-world
:latest \ --rolearn:aws:iam::111122223333:role/lambda-ex
catatan
Anda dapat membuat fungsi menggunakan gambar di AWS akun yang berbeda, selama gambar berada di Wilayah yang sama dengan fungsi Lambda. Untuk informasi selengkapnya, lihat Izin lintas akun Amazon ECR.
-
Memanggil fungsi.
aws lambda invoke --function-name
hello-world
response.jsonAnda akan melihat tanggapan seperti ini:
{ "ExecutedVersion": "$LATEST", "StatusCode": 200 }
-
Untuk melihat output dari fungsi, periksa
response.json
file.
Untuk memperbarui kode fungsi, Anda harus membangun gambar lagi, mengunggah gambar baru ke repositori Amazon ECR, dan kemudian menggunakan update-function-code
Menggunakan gambar AWS non-dasar
Anda dapat membuat gambar kontainer untuk Go dari gambar AWS non-dasar. Contoh Dockerfile dalam langkah-langkah berikut menggunakan gambar dasar Alpine
Anda harus menyertakan paket aws-lambda-go/lambda
Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
Untuk membangun dan menerapkan fungsi Go dengan image dasar Alpine
-
Buat direktori untuk proyek, dan kemudian beralih ke direktori itu.
mkdir hello cd hello
-
Inisialisasi modul Go baru.
go mod init
example.com/hello-world
-
Tambahkan pustaka lambda sebagai dependensi modul baru Anda.
go get github.com/aws/aws-lambda-go/lambda
-
Buat file bernama
main.go
dan kemudian buka di editor teks. Ini adalah kode untuk fungsi Lambda. Anda dapat menggunakan kode contoh berikut untuk pengujian, atau menggantinya dengan kode Anda sendiri.package main import ( "context" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" ) func handler(ctx context.Context, event events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) { response := events.APIGatewayProxyResponse{ StatusCode: 200, Body: "\"Hello from Lambda!\"", } return response, nil } func main() { lambda.Start(handler) }
-
Gunakan editor teks untuk membuat Dockerfile di direktori proyek Anda. Contoh berikut Dockerfile menggunakan gambar dasar Alpine
. contoh Dockerfile
catatan
Pastikan bahwa versi Go yang Anda tentukan di Dockerfile Anda (misalnya,
golang:1.20
) adalah versi Go yang sama dengan yang Anda gunakan untuk membuat aplikasi Anda.FROM golang:1.20.2-alpine3.16 as build WORKDIR /helloworld # Copy dependencies list COPY go.mod go.sum ./ # Build COPY main.go . RUN go build -o main main.go # Copy artifacts to a clean image FROM alpine:3.16 COPY --from=build /helloworld/main /main ENTRYPOINT [ "/main" ]
-
Buat image Docker dengan perintah docker
build. Contoh berikut menamai gambar docker-image
dan memberinyatest
tag. docker build --platform linux/amd64 -t
docker-image
:test
.catatan
Perintah menentukan
--platform linux/amd64
opsi untuk memastikan bahwa container Anda kompatibel dengan lingkungan eksekusi Lambda terlepas dari arsitektur mesin build Anda. Jika Anda berniat untuk membuat fungsi Lambda menggunakan arsitektur set instruksi ARM64, pastikan untuk mengubah perintah untuk menggunakan opsi sebagai--platform linux/arm64
gantinya.
Gunakan emulator antarmuka runtime untuk menguji gambar secara lokal. Anda dapat membangun emulator ke dalam gambar Anda atau menginstalnya di mesin lokal Anda.
Untuk menginstal dan menjalankan emulator antarmuka runtime di mesin lokal Anda
-
Dari direktori proyek Anda, jalankan perintah berikut untuk mengunduh emulator antarmuka runtime (arsitektur x86-64) dari GitHub dan menginstalnya di mesin lokal Anda.
-
Mulai gambar Docker dengan perintah docker run. Perhatikan hal berikut:
-
docker-image
adalah nama gambar dantest
tag. -
/main
adalahENTRYPOINT
dari Dockerfile Anda.
Perintah ini menjalankan gambar sebagai wadah dan membuat titik akhir lokal di
localhost:9000/2015-03-31/functions/function/invocations
.catatan
Jika Anda membuat image Docker untuk arsitektur set instruksi ARM64, pastikan untuk menggunakan
--platform linux/
opsi sebagai gantinya.arm64
--platform linux/
amd64
-
-
Posting acara ke titik akhir lokal.
-
Dapatkan ID kontainer.
docker ps
-
Gunakan perintah docker kill
untuk menghentikan kontainer. Dalam perintah ini, ganti 3766c4ab331c
dengan ID kontainer dari langkah sebelumnya.docker kill
3766c4ab331c
Untuk mengunggah gambar ke Amazon ECR dan membuat fungsi Lambda
-
Jalankan get-login-password
perintah untuk mengautentikasi CLI Docker ke registri Amazon ECR Anda. -
Tetapkan
--region
nilai ke Wilayah AWS tempat Anda ingin membuat repositori Amazon ECR. -
Ganti
111122223333
dengan Akun AWS ID Anda.
aws ecr get-login-password --region
us-east-1
| docker login --username AWS --password-stdin111122223333
.dkr.ecr.us-east-1
.amazonaws.com -
-
Buat repositori di Amazon ECR menggunakan perintah create-repository.
aws ecr create-repository --repository-name
hello-world
--regionus-east-1
--image-scanning-configuration scanOnPush=true --image-tag-mutability MUTABLEcatatan
Repositori Amazon ECR harus sama Wilayah AWS dengan fungsi Lambda.
Jika berhasil, Anda melihat respons seperti ini:
{ "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world", "registryId": "111122223333", "repositoryName": "hello-world", "repositoryUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/hello-world", "createdAt": "2023-03-09T10:39:01+00:00", "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": true }, "encryptionConfiguration": { "encryptionType": "AES256" } } }
-
Salin
repositoryUri
dari output pada langkah sebelumnya. -
Jalankan perintah tag docker
untuk menandai gambar lokal Anda ke repositori Amazon ECR Anda sebagai versi terbaru. Dalam perintah ini: -
Ganti
docker-image:test
dengan nama dan taggambar Docker Anda. -
Ganti
<ECRrepositoryUri>
denganrepositoryUri
yang Anda salin. Pastikan untuk menyertakan:latest
di akhir URI.
docker tag docker-image:test <ECRrepositoryUri>:latest
Contoh:
docker tag
docker-image
:test
111122223333
.dkr.ecr.us-east-1
.amazonaws.com/hello-world
:latest -
-
Jalankan perintah docker push
untuk menyebarkan gambar lokal Anda ke repositori Amazon ECR. Pastikan untuk menyertakan :latest
di akhir URI repositori.docker push
111122223333
.dkr.ecr.us-east-1
.amazonaws.com/hello-world
:latest -
Buat peran eksekusi untuk fungsi tersebut, jika Anda belum memilikinya. Anda memerlukan Nama Sumber Daya Amazon (ARN) dari peran tersebut di langkah berikutnya.
-
Buat fungsi Lambda. Untuk
ImageUri
, tentukan URI repositori dari sebelumnya. Pastikan untuk menyertakan:latest
di akhir URI.aws lambda create-function \ --function-name
hello-world
\ --package-type Image \ --code ImageUri=111122223333
.dkr.ecr.us-east-1
.amazonaws.com/hello-world
:latest \ --rolearn:aws:iam::111122223333:role/lambda-ex
catatan
Anda dapat membuat fungsi menggunakan gambar di AWS akun yang berbeda, selama gambar berada di Wilayah yang sama dengan fungsi Lambda. Untuk informasi selengkapnya, lihat Izin lintas akun Amazon ECR.
-
Memanggil fungsi.
aws lambda invoke --function-name
hello-world
response.jsonAnda akan melihat tanggapan seperti ini:
{ "ExecutedVersion": "$LATEST", "StatusCode": 200 }
-
Untuk melihat output dari fungsi, periksa
response.json
file.
Untuk memperbarui kode fungsi, Anda harus membangun gambar lagi, mengunggah gambar baru ke repositori Amazon ECR, dan kemudian menggunakan update-function-code