Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Membangun default dengan AWS SAM
Untuk membangun aplikasi nirserver Anda, gunakan perintah sam build
. Perintah ini juga mengumpulkan artefak bangunan dependensi aplikasi Anda dan menempatkannya dalam format dan lokasi yang tepat untuk langkah berikutnya, seperti pengujian lokal, pengemasan, dan deployment.
Anda menentukan dependensi aplikasi dalam file manifes, seperti requirements.txt
(Python) atau package.json
(Node.js), atau dengan menggunakan properti Layers
dari sumber daya fungsi. Layers
Properti ini berisi daftar AWS Lambdasumber daya lapisan yang bergantung pada fungsi Lambda.
Format artefak bangunan aplikasi Anda bergantung pada setiap fungsi properti PackageType
. Opsi untuk properti ini adalah:
-
Zip
- Arsip file .zip yang berisi kode aplikasi Anda dan dependensinya. Jika Anda mengemas kode Anda sebagai arsip file .zip, Anda harus menentukan waktu aktif Lambda untuk fungsi Anda. -
Image
– Citra kontainer termasuk sistem operasi dasar, waktu aktif, dan ekstensi, selain kode aplikasi Anda dan dependensinya.
Untuk informasi selengkapnya tentang jenis paket Lambda, lihat Paket penerapan Lambda di AWS Lambda Panduan Pengembang.
Topik
Membangun arsip file .zip
Untuk membangun aplikasi nirserver Anda sebagai arsip file .zip, nyatakan PackageType:
Zip
untuk fungsi nirserver Anda.
AWS SAM membangun aplikasi Anda untuk arsitektur yang Anda tentukan. Jika Anda tidak menentukan arsitektur, AWS SAM menggunakan secara x86_64
default.
Jika fungsi Lambda Anda bergantung pada paket yang telah dikompilasi secara native, gunakan bendera --use-container
. Bendera ini secara lokal mengkompilasi fungsi Anda dalam wadah Docker yang berperilaku seperti lingkungan Lambda, jadi mereka berada dalam format yang tepat saat Anda menerapkannya ke AWS Awan.
Saat Anda menggunakan --use-container
opsi, secara default AWS SAM menarik gambar kontainer dari Amazon ECR Public. Jika Anda ingin menarik gambar kontainer dari repositori lain, misalnya DockerHub, Anda dapat menggunakan --build-image
opsi dan memberikan gambar wadah alternatif. URI Berikut ini adalah dua contoh perintah untuk membangun aplikasi menggunakan gambar kontainer dari DockerHub repositori:
# Build a Node.js 20 application using a container image pulled from DockerHub sam build --use-container --build-image amazon/aws-sam-cli-build-image-nodejs20.x # Build a function resource using the Python 3.12 container image pulled from DockerHub sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.12
Untuk daftar yang dapat URIs Anda gunakan--build-image
, lihat Repositori gambar untuk AWS SAM yang berisi DockerHub URIs sejumlah runtime yang didukung.
Untuk contoh tambahan membangun aplikasi arsip file .zip, nanti Anda dapat melihatnya di bagian Contoh dalam topik ini.
Membangun citra kontainer
Untuk membangun aplikasi nirserver Anda sebagai citra kontainer, nyatakan PackageType:
Image
untuk fungsi nirserver Anda. Anda juga harus menyatakan atribut sumber daya Metadata
dengan entri berikut:
Dockerfile
-
Nama Dockerfile yang berkaitan dengan fungsi Lambda.
DockerContext
-
Lokasi Dockerfile.
DockerTag
-
(Opsional) tanda untuk diterapkan pada citra yang dibangun.
DockerBuildArgs
-
Bangun argumen untuk bangunan tersebut.
penting
Bagian AWS SAM CLI tidak menyunting atau mengaburkan informasi apa pun yang Anda sertakan dalam argumen.
DockerBuildArgs
Kami sangat menyarankan Anda tidak menggunakan bagian ini untuk menyimpan informasi sensitif, seperti sandi atau rahasia.
Berikut ini adalah contoh bagian atribut sumber daya Metadata
:
Metadata: Dockerfile: Dockerfile DockerContext: ./hello_world DockerTag: v1
Untuk mengunduh contoh aplikasi yang dikonfigurasi dengan jenis Image
paket, lihatTutorial: Menyebarkan aplikasi Hello World dengan AWS SAM. Saat prompt mempertanyakan tipe paket yang ingin Anda instal, pilih Image
.
catatan
Jika Anda menentukan gambar dasar multi-arsitektur di Dockerfile Anda, AWS SAM membangun gambar kontainer Anda untuk arsitektur mesin host Anda. Untuk membangun arsitektur yang berbeda, tentukan gambar dasar yang menggunakan arsitektur target tertentu.
File variabel lingkungan kontainer
Untuk menyediakan JSON file yang berisi variabel lingkungan untuk wadah build, gunakan --container-env-var-file
argumen dengan sam build
perintah. Anda dapat memberikan variabel lingkungan tunggal yang berlaku untuk semua sumber daya nirserver, atau variabel lingkungan yang berbeda untuk setiap sumber daya.
format
Format untuk meneruskan variabel lingkungan ke kontainer bangunan tergantung pada berapa banyak variabel lingkungan yang Anda berikan untuk sumber daya Anda.
Untuk menyediakan variabel lingkungan tunggal pada semua sumber daya, tentukan objek Parameters
seperti berikut:
{ "Parameters": { "GITHUB_TOKEN": "
TOKEN_GLOBAL
" } }
Untuk menyediakan variabel lingkungan yang berbeda pada setiap sumber daya, tentukan objek untuk setiap sumber daya seperti berikut:
{ "MyFunction1": { "GITHUB_TOKEN": "
TOKEN1
" }, "MyFunction2": { "GITHUB_TOKEN": "TOKEN2
" } }
Simpan variabel lingkungan Anda sebagai file, misalnya, dengan nama env.json
. Perintah berikut ini menggunakan file ini untuk meneruskan variabel lingkungan Anda ke kontainer bangunan:
sam build --use-container --container-env-var-file env.json
Precedence
-
Variabel lingkungan yang Anda berikan untuk sumber daya tertentu lebih diutamakan daripada variabel lingkungan tunggal untuk semua sumber daya.
-
Variabel lingkungan yang Anda berikan pada baris perintah lebih diutamakan daripada variabel lingkungan dalam sebuah file.
Mempercepat waktu pembuatan dengan membangun proyek Anda di folder sumber
Untuk runtime dan metode build yang didukung, Anda dapat menggunakan --build-in-source
opsi untuk membangun proyek secara langsung di folder sumber. Secara default, AWS SAM CLI dibangun di direktori sementara, yang melibatkan penyalinan kode sumber dan file proyek. Dengan--build-in-source
, AWS SAM CLI membangun langsung di folder sumber Anda, yang mempercepat proses pembuatan dengan menghapus kebutuhan untuk menyalin file ke direktori sementara.
Untuk daftar runtime dan metode build yang didukung, lihat--build-in-source
.
Contoh
Contoh 1: Arsip file .zip
Perintah sam build
berikut membangun arsip file .zip:
# Build all functions and layers, and their dependencies sam build # Run the build process inside a Docker container that functions like a Lambda environment sam build --use-container # Build a Node.js 20 application using a container image pulled from DockerHub sam build --use-container --build-image amazon/aws-sam-cli-build-image-nodejs20.x # Build a function resource using the Python 3.12 container image pulled from DockerHub sam build --use-container --build-image Function1=amazon/aws-sam-cli-build-image-python3.12 # Build and run your functions locally sam build && sam local invoke # For more options sam build --help
Contoh 2: Citra kontainer
Berikut ini AWS SAM template dibangun sebagai gambar kontainer:
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: PackageType: Image ImageConfig: Command: ["app.lambda_handler"] Metadata: Dockerfile: Dockerfile DockerContext: ./hello_world DockerTag: v1
Berikut ini adalah contoh Dockerfile:
FROM public.ecr.aws/lambda/python:3.12 COPY app.py requirements.txt ./ RUN python3.12 -m pip install -r requirements.txt # Overwrite the command by providing a different command directly in the template. CMD ["app.lambda_handler"]
Contoh 3: npm ci
Untuk aplikasi Node.js, Anda dapat menggunakan npm ci
alih-alih npm
install
menginstal dependensi. Untuk menggunakannpm ci
, tentukan UseNpmCi: True
BuildProperties
di bawah atribut Metadata
sumber daya fungsi Lambda Anda. Untuk menggunakannyanpm ci
, aplikasi Anda harus memiliki npm-shrinkwrap.json
file package-lock.json
atau yang ada di fungsi CodeUri
untuk Lambda Anda.
Contoh berikut digunakan npm ci
untuk menginstal dependensi saat Anda menjalankan: sam build
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: app.handler Runtime: nodejs20.x Architectures: - x86_64 Events: HelloWorld: Type: Api Properties: Path: /hello Method: get Metadata: BuildProperties: UseNpmCi: True
Membangun fungsi di luar AWS SAM
Secara default, saat Anda menjalankansam build, AWS SAM membangun semua sumber daya fungsi Anda. Pilihan lain termasuk:
-
Membangun semua sumber daya fungsi di luar AWS SAM— Jika Anda membangun semua sumber daya fungsi Anda secara manual atau melalui alat lain, tidak sam build diperlukan. Anda dapat melewati sam build dan melanjutkan ke langkah berikutnya dalam proses Anda, seperti melakukan pengujian lokal atau menerapkan aplikasi Anda.
-
Membangun beberapa sumber daya fungsi di luar AWS SAM— Jika Anda ingin AWS SAM untuk membangun beberapa sumber daya fungsi Anda sambil memiliki sumber daya fungsi lain yang dibangun di luar AWS SAM, Anda dapat menentukan ini di AWS SAM templat.
Membangun beberapa sumber daya fungsi di luar AWS SAM
Untuk memiliki AWS SAM lewati fungsi saat menggunakansam build, konfigurasikan yang berikut ini di AWS SAM templat:
-
Tambahkan properti
SkipBuild: True
metadata ke fungsi Anda. -
Tentukan jalur ke sumber daya fungsi bawaan Anda.
Berikut adalah contoh, dengan TestFunction
dikonfigurasi untuk dilewati. Sumber daya yang dibangun terletak dibuilt-resources/TestFunction.zip
.
TestFunction: Type: AWS::Serverless::Function Properties: CodeUri: built-resources/TestFunction.zip Handler: TimeHandler::handleRequest Runtime: java11 Metadata: SkipBuild: True
Sekarang, ketika Anda berlarisam build, AWS SAM akan melakukan hal berikut:
-
AWS SAM akan melewati fungsi yang dikonfigurasi dengan
SkipBuild: True
. -
AWS SAM akan membangun semua sumber daya fungsi lainnya dan menyimpannya di direktori
.aws-sam
build. -
Untuk fungsi yang dilewati, templatnya di direktori
.aws-sam
build akan diperbarui secara otomatis untuk mereferensikan jalur yang ditentukan ke sumber daya fungsi bawaan Anda.Berikut adalah contoh template yang di-cache untuk
TestFunction
di direktori.aws-sam
build:TestFunction: Type: AWS::Serverless::Function Properties: CodeUri: ../../built-resources/TestFunction.zip Handler: TimeHandler::handleRequest Runtime: java11 Metadata: SkipBuild: True