Serverløs backend med AWS Lambda & API Gateway · leksjon

Definering av serverløse ressurser

Skriv SAM-maler for å definere Lambda-funksjoner, API Gateway-endepunkter, DynamoDB-tabeller og andre serverløse komponenter.

Leksjon 2 av 411 trinn

Definering av serverløse ressurser er en gratis leksjon i Serverløs backend med AWS Lambda & API Gateway på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Serverløs backend med AWS Lambda & API Gateway, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Serverløs backend med AWS Lambda & API Gateway inneholder totalt 4 leksjoner.

Hva er SAM-maler

AWS Serverless Application Model (SAM)-maler er en kraftig måte å definere serverløse applikasjoner på ved hjelp av Infrastructure as Code (IaC).

I stedet for å konfigurere ressurser manuelt i AWS-konsollen beskriver du dem i en YAML- eller JSON-fil. Dette gjør distribusjonene repeterbare, versjonskontrollerte og enklere å administrere.

SAM-malens oppbygning

En SAM-mal har en tydelig struktur. De viktigste delene er:

  • AWSTemplateFormatVersion: Angir versjonen av malformatet.
  • Transform: Skal alltid være AWS::Serverless-2016-10-31 for SAM.
  • Description: En kort beskrivelse av applikasjonen.
  • Resources: Her definerer du alle AWS-komponentene dine.
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: My First SAM App

Resources:
  # Your serverless resources go here

Definere en serverløs funksjon

Kjernen i mange serverløse applikasjoner er AWS Lambda-funksjonen. I SAM deklarerer du en Lambda-funksjon ved hjelp av ressurstypen AWS::Serverless::Function.

Du må angi handleren, kjøretiden og hvor koden ligger.

Resources:
  MyLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: app.lambda_handler
      Runtime: python3.9
      CodeUri: s3://my-bucket/my-app.zip
      MemorySize: 128
      Timeout: 30

Viktige Lambda-egenskaper

La oss gå gjennom noen vanlige egenskaper for AWS::Serverless::Function:

  • Handler: Startpunktet i koden (for eksempel filename.function_name).
  • Runtime: Kjøretidsmiljøet for programmeringsspråket (for eksempel python3.9, nodejs18.x).
  • CodeUri: Banen til distribusjonspakken for funksjonen (lokalt eller i S3).
  • MemorySize: Mengden RAM som er tildelt funksjonen (MB).
  • Timeout: Maksimal kjøretid (sekunder).

API Gateway som hendelseskilde

For å gjøre Lambda-funksjonen tilgjengelig via et HTTP-endepunkt integrerer du den med Amazon API Gateway. I SAM gjør du dette ved å legge til en Events-egenskap i funksjonen.

HttpApi-typen foretrekkes ofte på grunn av enkelheten og kostnadseffektiviteten.

Resources:
  MyApiFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: app.lambda_handler
      Runtime: python3.9
      CodeUri: s3://my-bucket/api-app.zip
      Events:
        MyApiEvent:
          Type: HttpApi
          Properties:
            Path: /hello
            Method: GET

Definere en DynamoDB-tabell

For å lagre data kan du definere en DynamoDB-tabell direkte i SAM-malen. SAM tilbyr den praktiske ressurstypen AWS::Serverless::SimpleTable.

Dette oppretter en grunnleggende DynamoDB-tabell med en primærnøkkel. For mer avanserte konfigurasjoner kan du bruke AWS::DynamoDB::Table.

Resources:
  MyDataTable:
    Type: AWS::Serverless::SimpleTable
    Properties:
      PrimaryKey:
        Name: id
        Type: String
      ProvisionedThroughput:
        ReadCapacityUnits: 1
        WriteCapacityUnits: 1

IAM-tillatelser for ressurser

Lambda-funksjonene dine trenger ofte tillatelse til å samhandle med andre AWS-tjenester, for eksempel DynamoDB. Du gir disse tillatelsene ved hjelp av IAM-policyer (Identity and Access Management).

SAM lar deg knytte policyer direkte til kjøringsrollen for Lambda-funksjonen ved hjelp av egenskapen Policies.

Resources:
  MyLambdaWithDbAccess:
    Type: AWS::Serverless::Function
    Properties:
      Handler: app.lambda_handler
      Runtime: python3.9
      CodeUri: s3://my-bucket/db-app.zip
      Policies:
        - DynamoDBReadWriteAccess:
            TableName: !Ref MyDataTable # Grants access to MyDataTable
      Events:
        MyApiEvent:
          Type: HttpApi
          Properties:
            Path: /items
            Method: GET
  MyDataTable:
    Type: AWS::Serverless::SimpleTable
    Properties:
      PrimaryKey:
        Name: id
        Type: String

Eksportere viktige verdier

Etter at du har distribuert den serverløse applikasjonen, trenger du ofte å vite API-ets endepunkt-URL eller navnet på DynamoDB-tabellen.

Outputs-seksjonen i SAM-malen lar deg eksportere disse verdiene, slik at de blir lett tilgjengelige etter distribusjonen.

Outputs:
  ApiUrl:
    Description: "API Gateway endpoint URL for Prod stage for Hello World function"
    Value: !Sub "https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/hello"

En komplett serverløs mal

Her er en mer komplett SAM-mal som definerer et HTTP API-endepunkt, en Lambda-funksjon som håndterer forespørsler, og en DynamoDB-tabell for datalagring.

Legg merke til hvordan ulike ressurstyper deklareres og kobles sammen.

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: A complete serverless API with Lambda and DynamoDB

Resources:
  MyApiFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: app.lambda_handler
      Runtime: python3.9
      CodeUri: s3://my-bucket/full-app.zip
      Policies:
        - DynamoDBReadWriteAccess:
            TableName: !Ref MyItemsTable
      Events:
        MyApiEvent:
          Type: HttpApi
          Properties:
            Path: /items
            Method: GET

  MyItemsTable:
    Type: AWS::Serverless::SimpleTable
    Properties:
      PrimaryKey:
        Name: itemId
        Type: String

Outputs:
  ApiEndpoint:
    Description: "API Gateway endpoint URL"
    Value: !Sub "https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/items"

Sjekk av SAM-malen

Hvilke av de følgende er gyldige seksjoner på øverste nivå i en SAM-mal?

Oppsummering: Definere serverløse ressurser

I denne leksjonen lærte du hvordan du definerer ulike serverløse ressurser i en SAM-mal. Vi gikk gjennom:

  • Den grunnleggende strukturen til en SAM-mal.
  • Deklarering av AWS::Serverless::Function for Lambda.
  • Integrering av Lambda med API Gateway ved hjelp av Events.
  • Definering av AWS::Serverless::SimpleTable for DynamoDB.
  • Tildeling av tillatelser med IAM-Policies.
  • Bruk av Outputs-seksjonen til å eksportere verdier.

Deretter skal vi lære hvordan disse malene distribueres til AWS!

Gratis å komme i gang

Lær deg Serverløs backend med AWS Lambda & API Gateway med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Definering av serverløse ressurser» gratis?

Ja – hele teksten i «Definering av serverløse ressurser» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Serverløs backend med AWS Lambda & API Gateway-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Serverløs backend med AWS Lambda & API Gateway inneholder totalt 4 leksjoner.

Hva lærer jeg i «Definering av serverløse ressurser»?

Skriv SAM-maler for å definere Lambda-funksjoner, API Gateway-endepunkter, DynamoDB-tabeller og andre serverløse komponenter. Du øver på Serverløs backend med AWS Lambda & API Gateway med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Serverløs backend med AWS Lambda & API Gateway?

Ingen tidligere erfaring er nødvendig. Serverløs backend med AWS Lambda & API Gateway på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Definering av serverløse ressurser»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Serverløs backend med AWS Lambda & API Gateway-leksjonen?

Ja. Alle Serverløs backend med AWS Lambda & API Gateway-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Introduksjon til AWS SAM
  2. Definering av serverløse ressurser
  3. Distribusjon av SAM-applikasjoner
  4. Lokal testing og feilsøking med SAM CLI
← Tilbake til Serverløs backend med AWS Lambda & API Gateway