Bagaimana cara AWS SAM kerja - AWS Serverless Application Model

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

Bagaimana cara AWS SAM kerja

AWS SAM terdiri dari dua komponen utama yang Anda gunakan untuk membuat aplikasi tanpa server Anda:

  1. Bagian AWS SAM proyek— Folder dan file yang dibuat saat Anda menjalankan sam init perintah. Direktori ini mencakup AWS SAM template, file penting yang mendefinisikan AWS sumber daya Anda. Template ini mencakup spesifikasi AWS SAM template — kerangka kerja sumber terbuka yang dilengkapi dengan sintaks singkat yang disederhanakan yang Anda gunakan untuk menentukan fungsi, peristiwa, konfigurasiAPIs, dan izin aplikasi tanpa server Anda.

  2. The AWS SAMCLI— Alat baris perintah yang dapat Anda gunakan dengan AWS SAM proyek Anda dan mendukung integrasi pihak ketiga untuk membangun dan menjalankan aplikasi tanpa server Anda. The AWS SAM CLI adalah alat yang Anda gunakan untuk menjalankan perintah pada AWS SAM proyek Anda dan akhirnya mengubahnya menjadi aplikasi tanpa server Anda.

Untuk mengekspresikan sumber daya, pemetaan sumber peristiwa, dan properti lain yang menentukan aplikasi tanpa server Anda, Anda menentukan sumber daya dan mengembangkan aplikasi Anda dalam AWS SAM template dan file lain dalam proyek Anda. AWS SAM Anda menggunakan AWS SAM CLI untuk menjalankan perintah pada AWS SAM proyek Anda, yang merupakan cara Anda menginisialisasi, membangun, menguji, dan menerapkan aplikasi tanpa server Anda.

Baru mengenal tanpa server?

Apa spesifikasi AWS SAM templatenya?

Spesifikasi AWS SAM template adalah kerangka kerja sumber terbuka yang dapat Anda gunakan untuk menentukan dan mengelola kode infrastruktur aplikasi tanpa server Anda. Spesifikasi AWS SAM template adalah:

  • Dibangun pada AWS CloudFormation - Anda menggunakan AWS CloudFormation sintaks langsung di AWS SAM template Anda, mengambil keuntungan dari dukungan ekstensif sumber daya dan konfigurasi properti. Jika Anda sudah terbiasa AWS CloudFormation, Anda tidak perlu mempelajari layanan baru untuk mengelola kode infrastruktur aplikasi Anda.

  • Perpanjangan AWS CloudFormation - AWS SAM menawarkan sintaks uniknya sendiri yang berfokus secara khusus pada mempercepat pengembangan tanpa server. Anda dapat menggunakan kedua AWS CloudFormation dan AWS SAM sintaks dalam template yang sama.

  • Sintaks abstrak dan pendek — Menggunakan AWS SAM sintaks, Anda dapat menentukan infrastruktur Anda dengan cepat, dalam baris kode yang lebih sedikit, dan dengan kemungkinan kesalahan yang lebih rendah. Sintaksnya secara khusus dikuratori untuk mengabstraksikan kompleksitas dalam mendefinisikan infrastruktur aplikasi tanpa server Anda.

  • Transformasional — AWS SAM melakukan pekerjaan kompleks mengubah template Anda menjadi kode yang diperlukan untuk menyediakan infrastruktur Anda. AWS CloudFormation

Apa AWS SAM proyek dan AWS SAM templatnya?

AWS SAM Proyek ini mencakup AWS SAM template yang berisi spesifikasi AWS SAM template. Spesifikasi ini adalah kerangka kerja sumber terbuka yang Anda gunakan untuk menentukan infrastruktur aplikasi tanpa server Anda AWS, dengan beberapa komponen tambahan yang membuatnya lebih mudah untuk dikerjakan. Dalam hal ini, AWS SAM template adalah perpanjangan dari AWS CloudFormation template.

Berikut adalah contoh aplikasi tanpa server dasar. Aplikasi ini memproses permintaan untuk mendapatkan semua item dari database melalui HTTP permintaan. Ini terdiri dari bagian-bagian berikut:

  1. Fungsi yang berisi logika untuk memproses permintaan.

  2. An HTTP API untuk berfungsi sebagai komunikasi antara klien (pemohon) dan aplikasi.

  3. Database untuk menyimpan item.

  4. Izin agar aplikasi berjalan dengan aman.

Arsitektur aplikasi aplikasi tanpa server sederhana.

Kode infrastruktur aplikasi ini dapat didefinisikan dalam AWS SAM template berikut:

AWSTemplateFormatVersion: 2010-09-09 Transform: AWS::Serverless-2016-10-31 Resources: getAllItemsFunction: Type: AWS::Serverless::Function Properties: Handler: src/get-all-items.getAllItemsHandler Runtime: nodejs20.x Events: Api: Type: HttpApi Properties: Path: / Method: GET Connectors: MyConn: Properties: Destination: Id: SampleTable Permissions: - Read SampleTable: Type: AWS::Serverless::SimpleTable

Dalam 23 baris kode, infrastruktur berikut didefinisikan:

  • Fungsi yang menggunakan AWS Lambda layanan.

  • HTTPAPIMenggunakan layanan Amazon API Gateway.

  • Database yang menggunakan layanan Amazon DynamoDB.

  • Izin AWS Identity and Access Management (IAM) yang diperlukan untuk layanan ini untuk berinteraksi satu sama lain.

Untuk menyediakan infrastruktur ini, template dikerahkan ke AWS CloudFormation. Selama penyebaran, AWS SAM mengubah 23 baris kode menjadi AWS CloudFormation sintaks yang diperlukan untuk menghasilkan sumber daya ini di. AWS AWS CloudFormation Template yang diubah berisi lebih dari 200 baris kode!

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "getAllItemsFunction": { "Type": "AWS::Lambda::Function", "Metadata": { "SamResourceId": "getAllItemsFunction" }, "Properties": { "Code": { "S3Bucket": "aws-sam-cli-managed-default-samclisourcebucket-1a4x26zbcdkqr", "S3Key": "what-is-app/a6f856abf1b2c4f7488c09b367540b5b" }, "Handler": "src/get-all-items.getAllItemsHandler", "Role": { "Fn::GetAtt": [ "getAllItemsFunctionRole", "Arn" ] }, "Runtime": "nodejs12.x", "Tags": [ { "Key": "lambda:createdBy", "Value": "SAM" } ] } }, "getAllItemsFunctionRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": [ "sts:AssumeRole" ], "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] } } ] }, "ManagedPolicyArns": [ "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" ], "Tags": [ { "Key": "lambda:createdBy", "Value": "SAM" } ] } }, "getAllItemsFunctionApiPermission": { "Type": "AWS::Lambda::Permission", "Properties": { "Action": "lambda:InvokeFunction", "FunctionName": { "Ref": "getAllItemsFunction" }, "Principal": "apigateway.amazonaws.com", "SourceArn": { "Fn::Sub": [ "arn:${AWS::Partition}:execute-api:${AWS::Region}:${AWS::AccountId}:${__ApiId__}/${__Stage__}/GET/", { "__ApiId__": { "Ref": "ServerlessHttpApi" }, "__Stage__": "*" } ] } } }, "ServerlessHttpApi": { "Type": "AWS::ApiGatewayV2::Api", "Properties": { "Body": { "info": { "version": "1.0", "title": { "Ref": "AWS::StackName" } }, "paths": { "/": { "get": { "x-amazon-apigateway-integration": { "httpMethod": "POST", "type": "aws_proxy", "uri": { "Fn::Sub": "arn:${AWS::Partition}:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${getAllItemsFunction.Arn}/invocations" }, "payloadFormatVersion": "2.0" }, "responses": {} } } }, "openapi": "3.0.1", "tags": [ { "name": "httpapi:createdBy", "x-amazon-apigateway-tag-value": "SAM" } ] } } }, "ServerlessHttpApiApiGatewayDefaultStage": { "Type": "AWS::ApiGatewayV2::Stage", "Properties": { "ApiId": { "Ref": "ServerlessHttpApi" }, "StageName": "$default", "Tags": { "httpapi:createdBy": "SAM" }, "AutoDeploy": true } }, "SampleTable": { "Type": "AWS::DynamoDB::Table", "Metadata": { "SamResourceId": "SampleTable" }, "Properties": { "AttributeDefinitions": [ { "AttributeName": "id", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "id", "KeyType": "HASH" } ], "BillingMode": "PAY_PER_REQUEST" } }, "getAllItemsFunctionMyConnPolicy": { "Type": "AWS::IAM::ManagedPolicy", "Metadata": { "aws:sam:connectors": { "getAllItemsFunctionMyConn": { "Source": { "Type": "AWS::Serverless::Function" }, "Destination": { "Type": "AWS::Serverless::SimpleTable" } } } }, "Properties": { "PolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:BatchGetItem", "dynamodb:ConditionCheckItem", "dynamodb:PartiQLSelect" ], "Resource": [ { "Fn::GetAtt": [ "SampleTable", "Arn" ] }, { "Fn::Sub": [ "${DestinationArn}/index/*", { "DestinationArn": { "Fn::GetAtt": [ "SampleTable", "Arn" ] } } ] } ] } ] }, "Roles": [ { "Ref": "getAllItemsFunctionRole" } ] } } } }

Dengan menggunakan AWS SAM, Anda menentukan 23 baris kode infrastruktur. AWS SAM mengubah kode Anda menjadi 200+ baris AWS CloudFormation kode yang diperlukan untuk menyediakan aplikasi Anda.

Apa itu AWS SAM CLI?

The AWS SAM CLI adalah alat baris perintah yang dapat Anda gunakan dengan AWS SAM templat dan integrasi pihak ketiga yang didukung untuk membangun dan menjalankan aplikasi tanpa server Anda. Gunakan AWS SAM CLI ke:

  • Menginisialisasi proyek aplikasi baru dengan cepat.

  • Bangun aplikasi Anda untuk penerapan.

  • Lakukan debugging dan pengujian lokal.

  • Men-deploy aplikasi Anda.

  • Konfigurasikan pipeline penyebaran CI/CD.

  • Pantau dan pecahkan masalah aplikasi Anda di cloud.

  • Sinkronkan perubahan lokal ke cloud saat Anda mengembangkan.

  • Dan banyak lagi!

The AWS SAM CLI paling baik digunakan saat digunakan dengan AWS SAM dan AWS CloudFormation template. Ini juga bekerja dengan produk pihak ketiga seperti Terraform.

Inisialisasi proyek baru

Pilih dari template pemula atau pilih lokasi template kustom untuk memulai proyek baru.

Di sini, kita menggunakan sam init perintah untuk menginisialisasi proyek aplikasi baru. Kami memilih proyek Hello World Example untuk memulai. The AWS SAM CLI mengunduh template pemula dan membuat struktur direktori folder proyek kami.

Menggunakan sam init untuk memulai proyek aplikasi baru dengan AWS SAM CLI.

Untuk detail selengkapnya, lihat Buat aplikasi Anda di AWS SAM.

Membangun aplikasi Anda untuk penerapan

Package dependensi fungsi Anda dan atur kode proyek dan struktur folder Anda untuk mempersiapkan penerapan.

Di sini, kami menggunakan sam build perintah untuk mempersiapkan aplikasi kami untuk penyebaran. The AWS SAM CLI membuat .aws-sam direktori dan mengatur dependensi dan file aplikasi kami di sana untuk penerapan.

Menggunakan sam build untuk menyiapkan aplikasi untuk penyebaran.

Untuk detail selengkapnya, lihat Bangun aplikasi Anda.

Lakukan debugging dan pengujian lokal

Di mesin lokal Anda, simulasikan peristiwa, ujiAPIs, panggil fungsi, dan lainnya untuk men-debug dan menguji aplikasi Anda.

Di sini, kita menggunakan sam local invoke perintah untuk memanggil kita secara HelloWorldFunction lokal. Untuk mencapai hal ini, AWS SAM CLI membuat wadah lokal, membangun fungsi kita, memanggilnya, dan mengeluarkan hasilnya. Anda dapat menggunakan aplikasi seperti Docker untuk menjalankan kontainer di mesin Anda.

Menggunakan AWS SAM CLI sam local invokeperintah untuk memanggil fungsi secara lokal.

Untuk lebih jelasnya, lihat Uji aplikasi Anda danDebug aplikasi Anda.

Men-deploy aplikasi Anda

Konfigurasikan setelan penerapan aplikasi Anda dan terapkan ke AWS Cloud untuk menyediakan sumber daya Anda.

Di sini, kami menggunakan sam deploy --guided perintah untuk menyebarkan aplikasi kami melalui aliran interaktif. The AWS SAM CLI memandu kami melalui konfigurasi pengaturan penerapan aplikasi kami, mengubah template kami menjadi AWS CloudFormation, dan menyebarkan AWS CloudFormation untuk membuat sumber daya kami.

Menggunakan AWS SAM CLI sam deployperintah untuk menyebarkan aplikasi ke AWS Cloud.

Untuk detail selengkapnya, lihat Menyebarkan aplikasi dan sumber daya Anda.

Konfigurasikan pipeline penyebaran CI/CD

Buat pipeline integrasi dan pengiriman berkelanjutan (CI/CD) yang aman, menggunakan sistem CI/CD yang didukung.

Di sini, kita menggunakan sam pipeline init --bootstrap perintah untuk mengkonfigurasi pipeline penyebaran CI/CD untuk aplikasi kita. The AWS SAM CLI memandu kami melalui opsi kami dan menghasilkan AWS sumber daya dan file konfigurasi untuk digunakan dengan sistem CI/CD kami.

Menggunakan AWS SAM CLI sam pipeline init --bootstrapperintah untuk mengkonfigurasi CI/CD pipeline with our preferred CI/CD sistem.

Untuk detail selengkapnya, lihat Menyebarkan dengan sistem CI/CD dan saluran pipa.

Pantau dan pecahkan masalah aplikasi Anda di cloud

Lihat informasi penting tentang sumber daya yang Anda gunakan, kumpulkan log, dan gunakan alat pemantauan bawaan seperti. AWS X-Ray

Di sini, kami menggunakan sam list perintah untuk melihat sumber daya yang kami gunakan. Kami mendapatkan API titik akhir kami dan memanggilnya, yang memicu fungsi kami. Kemudian, kita gunakan sam logs untuk melihat log fungsi kita.

Menggunakan AWS SAM CLI sam listperintah untuk mendapatkan API titik akhir kami. Kemudian, sam logs digunakan untuk melihat log fungsi kita.

Untuk detail selengkapnya, lihat Pantau aplikasi Anda.

Sinkronkan perubahan lokal ke cloud saat Anda mengembangkan

Saat Anda mengembangkan di komputer lokal Anda, secara otomatis menyinkronkan perubahan ke cloud. Lihat perubahan Anda dengan cepat dan lakukan pengujian dan validasi di cloud.

Di sini, kita menggunakan sam sync --watch perintah untuk memiliki AWS SAM CLI perhatikan perubahan lokal. Kami memodifikasi HelloWorldFunction kode kami dan AWS SAM CLI secara otomatis mendeteksi perubahan dan menyebarkan pembaruan kami ke cloud.

Menggunakan AWS SAM CLI sam syncperintah untuk menyinkronkan perubahan lokal ke AWS Cloud.

Uji sumber daya yang didukung di cloud

Memanggil dan meneruskan acara ke sumber daya yang didukung di cloud.

Di sini, kami menggunakan sam remote invoke perintah untuk menguji fungsi Lambda yang diterapkan di cloud. Kami menjalankan fungsi Lambda kami dan menerima log dan tanggapannya. Dengan fungsi Lambda kami yang dikonfigurasi untuk mengalirkan respons, AWS SAM CLI mengalirkan responsnya kembali secara real time.

Menggunakan AWS SAM CLI sam remote invokeperintah untuk menguji fungsi yang kami gunakan di AWS Cloud.

Pelajari selengkapnya

Untuk terus mempelajarinya AWS SAM, lihat sumber daya berikut:

  • AWS SAM Lokakarya Lengkap — Lokakarya yang dirancang untuk mengajarkan Anda banyak fitur utama yang AWS SAM menyediakan.

  • Sesi dengan SAM - Seri video yang dibuat oleh tim Advokat Pengembang AWS Tanpa Server kami saat menggunakan. AWS SAM

  • Serverless Land — Situs yang menyatukan informasi terbaru, blog, video, kode, dan sumber belajar untuk AWS tanpa server.

Langkah selanjutnya

Jika ini adalah pertama kalinya Anda menggunakan AWS SAM, lihatMemulai dengan AWS SAM.