Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pengantar bangunan dengan AWS SAM
Gunakan AWS Serverless Application Model perintah Command Line Interface (AWS SAMCLI) sam build
untuk mempersiapkan aplikasi tanpa server Anda untuk langkah-langkah selanjutnya dalam alur kerja pengembangan Anda, seperti pengujian lokal atau penerapan ke file. AWS Cloud Perintah ini membuat .aws-sam
direktori yang menyusun aplikasi Anda dalam format dan lokasi yang sam local
sam deploy
dibutuhkan.
-
Untuk pengantar AWS SAMCLI, lihatApa itu AWS SAM CLI?.
-
Untuk daftar opsi
sam build
perintah, lihatsam build. -
Untuk contoh penggunaan
sam build
selama alur kerja pengembangan tipikal, lihatLangkah 2: Bangun aplikasi Anda.
catatan
Menggunakan sam build
mengharuskan Anda memulai dengan komponen dasar aplikasi tanpa server pada mesin pengembangan Anda. Ini termasuk AWS SAM template, kode AWS Lambda fungsi, dan file dan dependensi khusus bahasa apa pun. Untuk mempelajari selengkapnya, lihat Buat aplikasi Anda di AWS SAM.
Topik
Membangun aplikasi dengan sam build
Sebelum menggunakansam build
, pertimbangkan untuk mengonfigurasi hal berikut:
-
Fungsi dan lapisan Lambda —
sam build
Perintah dapat membangun fungsi dan lapisan Lambda. Untuk mempelajari lebih lanjut tentang lapisan Lambda, lihat. Membangun lapisan Lambda di AWS SAM -
Lambda runtime — Runtime menyediakan lingkungan khusus bahasa yang menjalankan fungsi Anda di lingkungan eksekusi saat dipanggil. Anda dapat mengonfigurasi runtime asli dan kustom.
-
Runtime asli - Buat fungsi Lambda Anda dalam runtime Lambda yang didukung dan buat fungsi Anda untuk menggunakan runtime Lambda asli di. AWS Cloud
-
Custom runtime - Buat fungsi Lambda Anda menggunakan bahasa pemrograman apa pun dan buat runtime Anda menggunakan proses kustom yang ditentukan dalam pembuat atau pihak ketiga makefile seperti. esbuild Untuk mempelajari selengkapnya, lihat Membangun fungsi Lambda dengan runtime khusus di AWS SAM.
-
-
Jenis paket Lambda - Fungsi Lambda dapat dikemas dalam jenis paket penyebaran Lambda berikut:
-
.zip file archive - Berisi kode aplikasi Anda dan dependensinya.
-
Gambar kontainer - Berisi sistem operasi dasar, runtime, ekstensi Lambda, kode aplikasi Anda dan dependensinya.
-
Pengaturan aplikasi ini dapat dikonfigurasi saat menginisialisasi aplikasi menggunakansam init
.
-
Untuk mempelajari lebih lanjut tentang menggunakan
sam init
, lihatBuat aplikasi Anda di AWS SAM. -
Untuk mempelajari lebih lanjut tentang mengonfigurasi setelan ini di aplikasi Anda, lihatMembangun default dengan AWS SAM.
Untuk membangun aplikasi
-
cd
ke akar proyek Anda. Ini adalah lokasi yang sama dengan AWS SAM template Anda.$
cd
sam-app
-
Jalankan hal berikut:
sam-app $
sam build
<arguments>
<options>
catatan
Opsi yang umum digunakan adalah
--use-container
. Untuk mempelajari selengkapnya, lihat Membangun fungsi Lambda di dalam wadah yang disediakan.Berikut ini adalah contoh dari AWS SAMCLI output:
sam-app $
sam build
Starting Build use cache Manifest file is changed (new hash: 3298f1304...d4d421) or dependency folder (.aws-sam/deps/4d3dfad6-a267-47a6-a6cd-e07d6fae318c) is missing for (HelloWorldFunction), downloading dependencies and copying/building source Building codeuri: /Users/.../sam-app/hello_world runtime: python3.12 metadata: {} architecture: x86_64 functions: HelloWorldFunction Running PythonPipBuilder:CleanUp Running PythonPipBuilder:ResolveDependencies Running PythonPipBuilder:CopySource Running PythonPipBuilder:CopySource Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next ========================= [*] Validate SAM template: sam validate [*] Invoke Function: sam local invoke [*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch [*] Deploy: sam deploy --guided -
AWS SAMCLIMembuat direktori
.aws-sam
build. Berikut adalah contohnya:.aws-sam ├── build │ ├── HelloWorldFunction │ │ ├── __init__.py │ │ ├── app.py │ │ └── requirements.txt │ └── template.yaml └── build.toml
Tergantung pada bagaimana aplikasi Anda dikonfigurasi, AWS SAMCLI melakukan hal berikut:
-
Mengunduh, menginstal, dan mengatur dependensi di direktori.
.aws-sam/build
-
Siapkan kode Lambda Anda. Ini dapat mencakup kompilasi kode Anda, membuat binari yang dapat dieksekusi, dan membangun gambar kontainer.
-
Salinan membangun artefak ke
.aws-sam
direktori. Formatnya akan bervariasi berdasarkan jenis paket aplikasi Anda.-
Untuk jenis paket.zip, artefak belum di-zip sehingga dapat digunakan untuk pengujian lokal. AWS SAMCLIRitsleting aplikasi Anda saat menggunakan
sam deploy
. -
Untuk jenis paket gambar kontainer, gambar kontainer dibuat secara lokal dan direferensikan dalam file.
.aws-sam/build.toml
-
-
Salin AWS SAM template ke
.aws-sam
direktori dan memodifikasinya dengan jalur file baru bila diperlukan.
Berikut ini adalah komponen utama yang membentuk artefak build Anda di .aws-sam
direktori:
-
Direktori build — Berisi fungsi dan lapisan Lambda Anda yang terstruktur secara independen satu sama lain. Ini menghasilkan struktur unik untuk setiap fungsi atau lapisan dalam
.aws-sam/build
direktori. -
AWS SAM Template — Dimodifikasi dengan nilai yang diperbarui berdasarkan perubahan selama proses pembuatan.
-
File BUILD.TOLL — File konfigurasi yang berisi pengaturan build yang digunakan oleh file. AWS SAMCLI
Pengujian dan penyebaran lokal
Saat melakukan pengujian lokal dengan sam local
atau penerapan dengansam deploy
, AWS SAMCLI melakukan hal berikut:
-
Ini pertama memeriksa untuk melihat apakah
.aws-sam
direktori ada dan apakah AWS SAM template terletak di dalam direktori itu. Jika kondisi ini terpenuhi, AWS SAMCLI menganggap ini sebagai direktori root aplikasi Anda. -
Jika kondisi ini tidak terpenuhi, AWS SAMCLI menganggap lokasi asli AWS SAM template Anda sebagai direktori root aplikasi Anda.
Saat mengembangkan, jika perubahan dilakukan pada file aplikasi asli Anda, jalankan sam build
untuk memperbarui .aws-sam
direktori sebelum menguji secara lokal.
Praktik terbaik
-
Jangan mengedit kode apa pun di bawah
.aws-sam/build
direktori. Sebagai gantinya, perbarui kode sumber asli Anda di folder proyek Anda dan jalankansam build
untuk memperbarui.aws-sam/build
direktori. -
Saat Anda memodifikasi file asli Anda, jalankan
sam build
untuk memperbarui.aws-sam/build
direktori. -
Anda mungkin AWS SAMCLI ingin mereferensikan direktori root asli proyek Anda alih-alih
.aws-sam
direktori, seperti saat mengembangkan dan menguji dengansam local
. Hapus.aws-sam
direktori atau AWS SAM template dalam.aws-sam
direktori untuk AWS SAMCLI mengenali direktori proyek asli Anda sebagai direktori proyek root. Saat siap, jalankansam build
lagi untuk membuat.aws-sam
direktori. -
Ketika Anda menjalankan
sam build
,.aws-sam/build
direktori akan ditimpa setiap kali..aws-sam
Direktori tidak. Jika Anda ingin menyimpan file, seperti log, simpan.aws-sam
untuk mencegahnya ditimpa.
Opsi untuk sam build
Membangun sumber daya tunggal
Berikan ID logis sumber daya untuk hanya membangun sumber daya itu. Berikut adalah contohnya:
$
sam build
HelloWorldFunction
Untuk membangun sumber daya aplikasi atau tumpukan bersarang, berikan ID logis aplikasi atau tumpukan bersama dengan ID logis sumber daya menggunakan format
:<stack-logical-id>
/<resource-logical-id>
$
sam build
MyNestedStack/MyFunction
Membangun fungsi Lambda di dalam wadah yang disediakan
--use-container
Opsi mengunduh gambar kontainer dan menggunakannya untuk membangun fungsi Lambda Anda. Wadah lokal kemudian direferensikan dalam .aws-sam/build.toml
file Anda.
Opsi ini Docker harus diinstal. Untuk petunjuk, lihat Menginstal Docker.
Berikut ini adalah contoh dari perintah ini:
$
sam build --use-container
Anda dapat menentukan gambar kontainer yang akan digunakan dengan --build-image
opsi. Berikut adalah contohnya:
$
sam build --use-container --build-image
amazon/aws-sam-cli-build-image-nodejs20.x
Untuk menentukan gambar kontainer yang akan digunakan untuk satu fungsi, berikan fungsi ID logis. Berikut adalah contohnya:
$
sam build --use-container --build-image
Function1=amazon/aws-sam-cli-build-image-python3.12
Teruskan variabel lingkungan ke wadah build
Gunakan --container-env-var
untuk meneruskan variabel lingkungan ke wadah build. Berikut adalah contohnya:
$
sam build --use-container --container-env-var
Function1.GITHUB_TOKEN=<token1>
--container-env-varGLOBAL_ENV_VAR=<global-token>
Untuk meneruskan variabel lingkungan dari file, gunakan --container-env-var-file
opsi. Berikut adalah contohnya:
$
sam build --use-container --container-env-var-file
<env.json>
Contoh env.json
file:
{ "MyFunction1": { "GITHUB_TOKEN": "TOKEN1" }, "MyFunction2": { "GITHUB_TOKEN": "TOKEN2" } }
Mempercepat pembangunan aplikasi yang berisi banyak fungsi
Ketika Anda menjalankan sam build
aplikasi dengan beberapa fungsi, AWS SAMCLI membangun setiap fungsi satu per satu. Untuk mempercepat proses pembuatan, gunakan --parallel
opsi. Ini membangun semua fungsi dan lapisan Anda secara bersamaan.
Berikut ini adalah contoh dari perintah ini:
$
sam build —-parallel
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 build dalam direktori sementara, yang melibatkan penyalinan kode sumber dan file proyek. Dengan--build-in-source
, AWS SAM CLI build 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
.
Pemecahan Masalah
Untuk memecahkan masalah AWS SAMCLI, lihat. AWS SAMCLIpemecahan masalah
Contoh
Membangun aplikasi yang menggunakan runtime asli dan tipe paket.zip
Untuk contoh ini, lihatTutorial: Menyebarkan aplikasi Hello World dengan AWS SAM.
Membangun aplikasi yang menggunakan runtime asli dan tipe paket gambar
Pertama, kita jalankan sam init
untuk menginisialisasi aplikasi baru. Selama aliran interaktif, kami memilih jenis Image
paket. Berikut adalah contohnya:
$
sam init
...
Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice:1
Choose an AWS Quick Start application template 1 - Hello World Example 2 - Multi-step workflow 3 - Serverless API 4 - Scheduled task 5 - Standalone function 6 - Data processing 7 - Hello World Example With Powertools 8 - Infrastructure event management 9 - Serverless Connector Hello World Example 10 - Multi-step workflow with Connectors 11 - Lambda EFS example 12 - DynamoDB Example 13 - Machine Learning Template:1
Use the most popular runtime and package type? (Python and zip) [y/N]:ENTER
Which runtime would you like to use?...
10 - java8 11 - nodejs20.x 12 - nodejs18.x 13 - nodejs16.x...
Runtime:12
What package type would you like to use? 1 - Zip 2 - Image Package type:2
Based on your selections, the only dependency manager available is npm. We will proceed copying the template using npm. Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]:ENTER
Would you like to enable monitoring using CloudWatch Application Insights? For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]:ENTER
Project name [sam-app]:ENTER
Cloning from https://github.com/aws/aws-sam-cli-app-templates (process may take a moment) ----------------------- Generating application: ----------------------- Name: sam-app Base Image: amazon/nodejs18.x-base Architectures: x86_64 Dependency Manager: npm Output Directory: . Configuration file: sam-app/samconfig.toml Next steps can be found in the README file at sam-app/README.md...
AWS SAMCLIMenginisialisasi aplikasi dan membuat direktori proyek berikut:
sam-app ├── README.md ├── events │ └── event.json ├── hello-world │ ├── Dockerfile │ ├── app.mjs │ ├── package.json │ └── tests │ └── unit │ └── test-handler.mjs ├── samconfig.toml └── template.yaml
Selanjutnya, kami menjalankan sam build
untuk membangun aplikasi kami:
sam-app $
sam build
Building codeuri: /Users/.../build-demo/sam-app runtime: None metadata: {'DockerTag': 'nodejs18.x-v1', 'DockerContext': '/Users/.../build-demo/sam-app/hello-world', 'Dockerfile': 'Dockerfile'} architecture: arm64 functions: HelloWorldFunction Building image for HelloWorldFunction function Setting DockerBuildArgs: {} for HelloWorldFunction function Step 1/4 : FROM public.ecr.aws/lambda/nodejs:18 ---> f5b68038c080 Step 2/4 : COPY app.mjs package*.json ./ ---> Using cache ---> 834e565aae80 Step 3/4 : RUN npm install ---> Using cache ---> 31c2209dd7b5 Step 4/4 : CMD ["app.lambdaHandler"] ---> Using cache ---> 2ce2a438e89d Successfully built 2ce2a438e89d Successfully tagged helloworldfunction:nodejs18.x-v1 Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next ========================= [*] Validate SAM template: sam validate [*] Invoke Function: sam local invoke [*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch [*] Deploy: sam deploy --guided
Membangun aplikasi yang mencakup bahasa pemrograman yang dikompilasi
Dalam contoh ini, kita membangun sebuah aplikasi yang berisi fungsi Lambda menggunakan runtime. Go
Pertama, kami menginisialisasi aplikasi baru menggunakan sam init
dan mengonfigurasi aplikasi kami untuk digunakanGo:
$
sam init
...
Which template source would you like to use? 1 - AWS Quick Start Templates 2 - Custom Template Location Choice:1
Choose an AWS Quick Start application template 1 - Hello World Example 2 - Multi-step workflow 3 - Serverless API...
Template:1
Use the most popular runtime and package type? (Python and zip) [y/N]:ENTER
Which runtime would you like to use?...
4 - dotnetcore3.1 5 - go1.x 6 - go (provided.al2)...
Runtime:5
What package type would you like to use? 1 - Zip 2 - Image Package type:1
Based on your selections, the only dependency manager available is mod. We will proceed copying the template using mod. Would you like to enable X-Ray tracing on the function(s) in your application? [y/N]:ENTER
Would you like to enable monitoring using CloudWatch Application Insights? For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]:ENTER
Project name [sam-app]:ENTER
Cloning from https://github.com/aws/aws-sam-cli-app-templates (process may take a moment) ----------------------- Generating application: ----------------------- Name: sam-app Runtime: go1.x Architectures: x86_64 Dependency Manager: mod Application Template: hello-world Output Directory: . Configuration file: sam-app/samconfig.toml Next steps can be found in the README file at sam-app-go/README.md...
AWS SAMCLIMenginisialisasi aplikasi. Berikut ini adalah contoh struktur direktori aplikasi:
sam-app ├── Makefile ├── README.md ├── events │ └── event.json ├── hello-world │ ├── go.mod │ ├── go.sum │ ├── main.go │ └── main_test.go ├── samconfig.toml └── template.yaml
Kami mereferensikan README.md
file untuk persyaratan aplikasi ini.
...
## Requirements * AWS CLI already configured with Administrator permission * [Docker installed](https://www.docker.com/community-edition) * [Golang](https://golang.org) * SAM CLI - [Install the SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html)...
Selanjutnya, kita jalankan sam local invoke
untuk menguji fungsi kita. Kesalahan perintah ini sejak Go tidak diinstal pada mesin lokal kami:
sam-app $
sam local invoke
Invoking hello-world (go1.x) Local image was not found. Removing rapid images for repo public.ecr.aws/sam/emulation-go1.x Building image................................................................................................................................................................................................................................................. Using local image: public.ecr.aws/lambda/go:1-rapid-x86_64. Mounting /Users/.../Playground/build/sam-app/hello-world as /var/task:ro,delegated inside runtime container START RequestId: c6c5eddf-042b-4e1e-ba66-745f7c86dd31 Version: $LATEST fork/exec /var/task/hello-world: no such file or directory: PathError null END RequestId: c6c5eddf-042b-4e1e-ba66-745f7c86dd31 REPORT RequestId: c6c5eddf-042b-4e1e-ba66-745f7c86dd31 Init Duration: 0.88 ms Duration: 175.75 ms Billed Duration: 176 ms Memory Size: 128 MB Max Memory Used: 128 MB {"errorMessage":"fork/exec /var/task/hello-world: no such file or directory","errorType":"PathError"}%
Selanjutnya, kita jalankan sam build
untuk membangun aplikasi kita. Kami menemukan kesalahan karena Go tidak diinstal pada mesin lokal kami:
sam-app $
sam build
Starting Build use cache Cache is invalid, running build and copying resources for following functions (HelloWorldFunction) Building codeuri: /Users/.../Playground/build/sam-app/hello-world runtime: go1.x metadata: {} architecture: x86_64 functions: HelloWorldFunction Build Failed Error: GoModulesBuilder:Resolver - Path resolution for runtime: go1.x of binary: go was not successful
Meskipun kami dapat mengonfigurasi mesin lokal kami untuk membangun fungsi kami dengan benar, kami malah menggunakan --use-container
opsi dengansam build
. AWS SAMCLIDownload gambar kontainer, membangun fungsi kita menggunakan native GoModulesBuilder, dan menyalin biner yang dihasilkan ke .aws-sam/build/HelloWorldFunction
direktori kita.
sam-app $
sam build --use-container Starting Build use cache Starting Build inside a container Cache is invalid, running build and copying resources for following functions (HelloWorldFunction) Building codeuri: /Users/.../build/sam-app/hello-world runtime: go1.x metadata: {} architecture: x86_64 functions: HelloWorldFunction Fetching public.ecr.aws/sam/build-go1.x:latest-x86_64 Docker container image..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... Mounting /Users/.../build/sam-app/hello-world as /tmp/samcli/source:ro,delegated inside runtime container Running GoModulesBuilder:Build Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next ========================= [*] Validate SAM template: sam validate [*] Invoke Function: sam local invoke [*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch [*] Deploy: sam deploy --guided
Berikut ini adalah contoh .aws-sam
direktori:
.aws-sam ├── build │ ├── HelloWorldFunction │ │ └── hello-world │ └── template.yaml ├── build.toml ├── cache │ └── c860d011-4147-4010-addb-2eaa289f4d95 │ └── hello-world └── deps
Selanjutnya, kita larisam local invoke
. Fungsi kami berhasil dipanggil:
sam-app $
sam local invoke
Invoking hello-world (go1.x) Local image is up-to-date Using local image: public.ecr.aws/lambda/go:1-rapid-x86_64. Mounting /Users/.../Playground/build/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container START RequestId: cfc8ffa8-29f2-49d4-b461-45e8c7c80479 Version: $LATEST END RequestId: cfc8ffa8-29f2-49d4-b461-45e8c7c80479 REPORT RequestId: cfc8ffa8-29f2-49d4-b461-45e8c7c80479 Init Duration: 1.20 ms Duration: 1782.46 ms Billed Duration: 1783 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode":200,"headers":null,"multiValueHeaders":null,"body":"Hello, 72.21.198.67\n"}%
Pelajari selengkapnya
Untuk mempelajari lebih lanjut tentang menggunakan sam build
perintah, lihat berikut ini:
-
Pembelajaran AWS SAM: sam build
— Seri “Pembelajaran AWS SAM” Tanah Tanpa Server aktif. YouTube -
Belajar AWS SAM | sam build | E3 — Seri
“Pembelajaran AWS SAM” Tanah Tanpa Server di. YouTube -
AWS SAM build: bagaimana menyediakan artefak untuk penerapan (Sesi Dengan SAM S2E8) — Sesi
dengan seri aktif. AWS SAM YouTube -
AWS SAM build kustom: Cara menggunakan Makefiles untuk menyesuaikan build in SAM (S2E9) - Sesi
dengan seri aktif. AWS SAM YouTube