Skip to content

yarik2215/AWS-Lambda-Notes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

4 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

AWS Lambda notes

Serverless and FAAS

БСзсСрвСрныС вычислСния (Π°Π½Π³Π». serverless computing) β€” стратСгия ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… услуг, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ±Π»Π°ΠΊΠΎ автоматичСски ΠΈ динамичСски управляСт Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов Π² зависимости ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Основная Π·Π°Π΄Π°Ρ‡Π° Ρ‚Π°ΠΊΠΎΠΉ стратСгии β€” рСализация шаблона «функция ΠΊΠ°ΠΊ услуга» (FAAS), ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ для выполнСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса (Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) создаётся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина, ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ послС выполнСния.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… услуг ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Π½Π°ΠΌ Тизнь, ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ большС Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎΠ± инфраструктурС, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡ€ΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅, обновлСнию систСмы ΠΈ Ρ‚.Π΄., Π² Ρ†Π΅Π»ΠΎΠΌ говоря ΠΎ Ρ…Π°Ρ€Π΄Π²Π°Ρ€Π½Ρ‹Ρ… Π²Π΅Ρ‰Π°Ρ….

Новый Π²ΠΈΡ‚ΠΎΠΊ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ?

faas

Π—Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΡ€ΡƒΡ‚ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π° Π½Π΅ Π·Π°ΠΌΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ инфраструктурой ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠΌΠΈ дСвопсовскими ΡˆΡ‚ΡƒΡ‡ΠΊΠ°ΠΌΠΈ, это позволяСт Π½Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ бизнСс Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ бизнСс Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‡Ρ‚ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ time to market - ΠΈ это Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π§Ρ‚ΠΎ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° Serverless это Π½ΠΎΠ²Ρ‹ΠΉ шаг Π² Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠΈ Π²Π΅Π±Π°? И Π΄Π° ΠΈ Π½Π΅Ρ‚. Π”Π° это Π½ΠΎΠ²Ρ‹ΠΉ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ интСрСсный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½ΠΎ нСльзя относится ΠΊ Π½Π΅ΠΌΡƒ ΠΊΠ°ΠΊ ΠΊ ΠΏΠ°Π½Π°Ρ†Π΅Π΅ ΠΈΠ»ΠΈ Π²ΠΎΠ»ΡˆΠ΅Π±Π½ΠΎΠΌΡƒ ΡˆΠ²Π΅ΠΉΡ†Π°Ρ€ΡΠΊΠΎΠΌΡƒ Π½ΠΎΠΆΡƒ, это всСго лишь Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ инструмСнт Π² Ρ€ΡƒΠΊΠ°Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. FAAS Π½Π΅ ΠΏΡ€ΠΈΠ·Π²Π°Π½ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. ΠšΡƒΠ±Π΅Ρ€-Π±ΡƒΠ±Π΅Ρ€ (Kubernetes) ΠΆΠΈΠ²Π΅Π΅ всСх ΠΆΠΈΠ²Ρ‹Ρ…, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ вСсьма ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΉ инструмСнт ΠΈ сСрвСра Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ дСнутся, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ FAAS ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅, ΠΈ это ΠΊΡ€ΡƒΡ‚ΠΎ вСдь Ρƒ нас появляСтся всС больший Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнных Π·Π°Π΄Π°Ρ‡.

AWS Lambda

AWS Lambda – это бСзсСрвСрный, управляСмый событиями Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ практичСски для Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° прилоТСния ΠΈΠ»ΠΈ сСрвиса Π±Π΅Π· прСдоставлСния сСрвСров ΠΈ ΠΈΡ… обслуТивания. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Lambda ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ 200 сСрвисов ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, прСдоставляСмых ΠΏΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ ПО ΠΊΠ°ΠΊ услуга (SaaS), оплачивая Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ рСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ

  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² l1
  • ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° l2
  • Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ прилоТСния l3
  • Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ Π²Π΅Ρ‰Π΅ΠΉ l4
  • Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ слуТбы для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств l5
  • ...

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

Π’Ρ‹ΡˆΠ΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ упомянуто Ρ‡Ρ‚ΠΎ AWS Lambda это FAAS (function as a service), Ρ‚ΠΎΠ΅ΡΡ‚ΡŒ ΠΌΡ‹ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΠΌ усилия Π½Π° поднятиС ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ инфраструктуры, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ сути Ρ‚ΠΎΠ»ΡŒΠΊΠΎ наш ΠΊΠΎΠ΄ (бизнСс Π»ΠΎΠ³ΠΈΠΊΡƒ), ΠΏΠ»Π°Ρ‚ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΊΠΎΠ³Π΄Π° наш ΠΊΠΎΠ΄ исполняСтся ΠΈ всС это ΡΡ‡Π°ΡΡ‚ΡŒΠ΅ автоматичСски ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°:

  • Π”Π΅Π½ΡŒΠ³ΠΈ. Π’Ρ‹ ΠΏΠ»Π°Ρ‚ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° сСрвис Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.
  • Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. Π‘Π°ΠΌΠ° ΠΏΠΎ сСбС лямбда поднимаСтся ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ быстро.
  • Удобство. Лямбда ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ возмоТностСй ΠΏΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с сСрвисами AWS.
  • ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, Π² зависимости ΠΎΡ‚ Ρ€Π΅Π³ΠΈΠΎΠ½Π° максимально ΠΎΡ‚ 500 Π΄ΠΎ 3000 экзСмпляров. И ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ, этот Π»ΠΈΠΌΠΈΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ, написав Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ.

Π’ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ для лямбды:

Resource Quota
Function memory allocation 128 MB to 10,240 MB
Function timeout 900 seconds (15 minutes)
Function environment variables 4 KB, for all environment variables associated with the function
Function resource-based policy 20 KB
Function layers five layers
Function burst concurrency 500 - 3000 (varies per Region)
Invocation payload (request and response) 6 MB (synchronous), 256 KB (asynchronous)
Deployment package (.zip file archive) size 50 MB (zipped, for direct upload), 250 MB (unzipped), 3 MB (console editor)
Container image code package size 10 GB

Π‘Ρ€Π°Π·Ρƒ ΠΊ ΠΊΠΎΠ΄Ρƒ

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π΄ΠΎΠ»Π³ΠΎ Π½Π΅ Ρ€Π°Π·Π΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ выглядит ΠΊΠΎΠ΄ лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, я Π½Π΅ Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ созданиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, лишь частично Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ эту Ρ‚Π΅ΠΌΡƒ.

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ выглядит ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ лямбды:

    def handler(event, context):
        print("First lambda")
        return "Hello world"

По сути это просто функция которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ event ΠΈ context. Event - это Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π² Π½Π°ΡˆΡƒ лямбду, ΠΏΠΎ сути это просто json, ΠΎΠ½ Π² Ρ†Π΅Π»ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сСрвис Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ event Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ выглядит event с S3:

{
  "Records": [
    {
      "eventVersion": "2.0",
      "eventSource": "aws:s3",
      "awsRegion": "us-east-1",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
        "principalId": "EXAMPLE"
      },
      "requestParameters": {
        "sourceIPAddress": "127.0.0.1"
      },
      "responseElements": {
        "x-amz-request-id": "EXAMPLE123456789",
        "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH"
      },
      "s3": {
        "s3SchemaVersion": "1.0",
        "configurationId": "testConfigRule",
        "bucket": {
          "name": "example-bucket",
          "ownerIdentity": {
            "principalId": "EXAMPLE"
          },
          "arn": "arn:aws:s3:::example-bucket"
        },
        "object": {
          "key": "test/key",
          "size": 1024,
          "eTag": "0123456789abcdef0123456789abcdef",
          "sequencer": "0A1B2C3D4E5F678901"
        }
      }
    }
  ]
}

Context - это json ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ срСдС выполнСния.

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎ происходит с Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π²Ρ‹Π·ΠΎΠ²Π° ΠΈ слуТбы, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. НапримСр:

  • Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‚ΠΈΠΏ Π²Ρ‹Π·ΠΎΠ²Π° RequestResponse, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ синхронный Π²Ρ‹Π·ΠΎΠ², AWS Lambda Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. НапримСр, консоль AWS Lambda ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏ Π²Ρ‹Π·ΠΎΠ²Π° RequestResponse, поэтому, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° консоли, консоль ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

  • Если ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ json.dumps, срСда выполнСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

  • Если ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ None, ΠΊΠ°ΠΊ это нСявно Π΄Π΅Π»Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python Π±Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° return, срСда выполнСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ null.

  • Если лямбда вызываСтся асинхронно (Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно Π΄Π°Π»Π΅Π΅) Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€ΠΎΠ»ΠΈ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ отбрасываСтся.

Security

Как ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ сСрвисов AWS, Lambda прСдоставляСтся ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ ΠΎΠ±Ρ‰Π΅ΠΉ отвСтствСнности AWS ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠΎ части бСзопасности ΠΈ соблюдСния Π½ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ сниТаСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ AWS Π±Π΅Ρ€Π΅Ρ‚ Π½Π° сСбя Π·Π°Π΄Π°Ρ‡ΠΈ обслуТивания, администрирования ΠΈ контроля ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² сСрвиса β€” ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы хоста ΠΈ уровня Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄ΠΎ физичСской бСзопасности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² инфраструктуры.

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΎΠ± AWS Lambda, Ρ‚ΠΎ AWS ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΉ инфраструктурой, связанными Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ сСрвисами, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ нСсСт ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ своСго ΠΊΠΎΠ΄Π°, Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа ΠΊ Π½ΠΈΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊ сСрвису ΠΈ рСсурсам Lambda (Identity and Access Management, IAM), Π² Ρ‚ΠΎΠΌ числС Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

security


Анатомия лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ОсновноС прСимущСство Lambda Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, выполняя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ‚ вашСго ΠΈΠΌΠ΅Π½ΠΈ, сСрвис сам выдСляСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ рСсурсы, Ρ‚ΡƒΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ сколько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ лямбдС ΠΈ ΠΎΡ‚ этого Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ сколько процСссорных рСсурсов Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ, Π½ΠΎ ΠΎΠ± этом Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя ΠΈ силы Π½Π° администрированиС систСм ΠΈ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΈ написании ΠΊΠΎΠ΄Π°.

КаТдая функция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… срСдах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ лишь Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ срСдС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ выполняСтся лишь ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π·ΠΎΠ², Π½ΠΎ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ, Ссли Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ мноТСство сСрийных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ВсС срСды выполнСния Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ β€” Π½Π° Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… microVM. КаТдая microVM назначаСтся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи AWS ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ срСдами для выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² этой ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи. MicroVM ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² структурныС Π±Π»ΠΎΠΊΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Lambda Worker, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Π»Π°Π΄Π΅Π΅Ρ‚ ΠΈ управляСт AWS. Одна ΠΈ Ρ‚Π° ΠΆΠ΅ срСда выполнСния Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ функциями, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ microVM ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ для Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… записСй AWS.

anatomy

ΠŸΡ€ΠΈ создании срСды выполнСния загруТаСтся ваш ΠΊΠΎΠ΄ ΠΈ слои ΠΈ подготавливаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° которая запустит ваш ΠΊΠΎΠ΄ (ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΏΠΈΡ‚ΠΎΠ½Π°). Π’Π°ΠΊΠΆΠ΅ Π² срСдС выполнСния создаСтся файловая систСма ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ /tmp Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 512 MB Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹, кСш ΠΈ Ρ‚.Π΄. Она Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ (ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ) ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

anatomy_2

Π’Π°ΠΊΠΆΠ΅ Ρƒ лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ настройки ΠΈΠ»ΠΈ сСкрСты.


Execution Environment

Lambda Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² срСдС выполнСния, которая обСспСчиваСт Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ срСду выполнСния для вашСго ΠΊΠΎΠ΄Π°. Π‘Ρ€Π΅Π΄Π° выполнСния управляСт рСсурсами, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ для выполнСния вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘Ρ€Π΅Π΄Π° выполнСния Ρ‚Π°ΠΊΠΆΠ΅ обСспСчиваСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° для срСды выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π»ΡŽΠ±Ρ‹Ρ… Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ, связанных с вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

Π‘Ρ€Π΅Π΄Π° выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ взаимодСйствуСт с Lambda с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ API срСды выполнСния. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Lambda с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Extensions API. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ сообщСния ΠΆΡƒΡ€Π½Π°Π»Π° ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, подписавшись Π½Π° Π»ΠΎΠ³ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Logs API.

execution_environment

Когда Π²Ρ‹ создаСтС свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Lambda, Π²Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΡƒΡŽ ​​как объСм доступной памяти ΠΈ максимальноС врСмя выполнСния, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Lambda ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для настройки срСды выполнСния.

Π‘Ρ€Π΅Π΄Π° выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ внСшнСС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ β€” это процСссы, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π² срСдС выполнСния. Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, рСсурсы, ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ.


Life cycle

Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» срСды выполнСния Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ этапы:

  • Init: Π½Π° этом этапС Lambda создаСт ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅Ρ‚ срСду выполнСния с настроСнными рСсурсами, Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠ΄ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ всСх слоСв, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ всС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ срСду выполнСния, Π° Π·Π°Ρ‚Π΅ΠΌ запускаСт ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΊΠΎΠ΄ Π²Π½Π΅ основного ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°). Π€Π°Π·Π° Init происходит Π»ΠΈΠ±ΠΎ Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ссли Π²Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ. Π€Π°Π·Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° Ρ‚Ρ€ΠΈ подэтапа: инициализация Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, инициализация срСды выполнСния ΠΈ инициализация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΈ подэтапы Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎ всС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈ срСда выполнСния Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ свои Π·Π°Π΄Π°Ρ‡ΠΈ установки Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ запустится ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

  • Invoke: Π½Π° этом этапС Lambda Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Lambda готовится ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

  • Shutdown: эта Ρ„Π°Π·Π° запускаСтся, Ссли функция Lambda Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (15 ΠΌΠΈΠ½ΡƒΡ‚). На этапС Shutdown Lambda останавливаСт срСду выполнСния, ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΈΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π±Π΅Π· ошибок, Π° Π·Π°Ρ‚Π΅ΠΌ удаляСт срСду. Lambda отправляСт событиС Shutdown ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сообщаСт Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎ срСда Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π°.

life_cycle

КаТдая Ρ„Π°Π·Π° начинаСтся с события, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Lambda отправляСт срСдС выполнСния ΠΈ всСм зарСгистрированным Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌ. Π‘Ρ€Π΅Π΄Π° выполнСния ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅, отправляя запрос Next API. Lambda Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅Ρ‚ срСду выполнСния, ΠΊΠΎΠ³Π΄Π° срСда выполнСния ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹ ΠΈ Π½Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΡ… событий. ΠŸΡ€ΠΈ получСния события, Ссли Π΅ΡΡ‚ΡŒ замороТСнная срСда выполнСния, Ρ‚ΠΎ Lambda Ρ€Π°Π·ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅Ρ‚ эту срСду, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ врСмя Π½Π° Ρ„Π°Π·Ρƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Init phase

На этапС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Lambda выполняСт Ρ‚Ρ€ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ:

  • Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ всС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ (Extension init)
  • Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ срСду выполнСния (Runtime init)
  • Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ статичСский ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Function init)

Π€Π°Π·Π° Init заканчиваСтся, ΠΊΠΎΠ³Π΄Π° срСда выполнСния ΠΈ всС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ ΠΎ своСй готовности, отправляя запрос Next API. Π€Π°Π·Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° 10 сСкундами. Если всС Ρ‚Ρ€ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 10 сСкунд, Lambda повторяСт Ρ„Π°Π·Ρƒ Init Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Invoke phase

Когда Lambda функция вызываСтся Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° запрос Next API, Lambda отправляСт событиС Invoke срСдС выполнСния ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ.

Настройка Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ всСй Ρ„Π°Π·Ρ‹ Invoke. НапримСр, Ссли Π²Ρ‹ установитС врСмя оТидания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° 360 сСкунд, функция ΠΈ всС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 360 сСкунд. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ сущСствуСт нСзависимой Ρ„Π°Π·Ρ‹ пост-Π²Ρ‹Π·ΠΎΠ²Π°. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прСдставляСт собой сумму всСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° (врСмя выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ + врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ) ΠΈ Π½Π΅ рассчитываСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° функция ΠΈ всС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡Π°Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

Π€Π°Π·Π° Π²Ρ‹Π·ΠΎΠ²Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ срСда выполнСния ΠΈ всС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ± этом, отправляя запрос Next API.

Если функция Lambda Π΄Π°Π΅Ρ‚ сбой ΠΈΠ»ΠΈ истСкаСт врСмя оТидания Π½Π° этапС Π²Ρ‹Π·ΠΎΠ²Π°, Lambda сбрасываСт срСду выполнСния. Бброс Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΊΠ°ΠΊ событиС Shutdown. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Lambda Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ срСду выполнСния. Π—Π°Ρ‚Π΅ΠΌ Lambda отправляСт событиС Shutdown Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ зарСгистрированноС внСшнСС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Если Π΄Ρ€ΡƒΠ³ΠΎΠ΅ событиС Invoke ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ использованию этой срСды выполнСния, Lambda ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ срСду выполнСния ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

invoke_phase

Shutdown phase

Когда Lambda собираСтся Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ срСды выполнСния, ΠΎΠ½Π° отправляСт событиС Shutdown срСдС выполнСния ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π²Π½Π΅ΡˆΠ½Π΅ΠΌΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это врСмя для ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ очистки. Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ Shutdown β€” это ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° запрос Next API.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: вся Ρ„Π°Π·Π° Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° 2 сСкундами. Если срСда выполнСния ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚, Lambda Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сигнала (SIGKILL).

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ всСх Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Lambda Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ срСду выполнСния Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. По сути, Lambda Π·Π°ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅Ρ‚ срСду выполнСния. Когда функция вызываСтся снова, Lambda Ρ€Π°Π·ΠΌΠΎΡ€Π°ΠΆΠΈΠ²Π°Π΅Ρ‚ срСду для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС срСды выполнСния ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ послСдствия:

  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ, обСспСчивая Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр, Ссли ваша функция Lambda устанавливаСт соСдинСниС с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, вмСсто ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ установлСния соСдинСния Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ исходноС соСдинСниС. ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ваш ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, сущСствуСт Π»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅.

  • КаТдая срСда выполнСния прСдоставляСт ΠΎΡ‚ 512 ΠœΠ‘ Π΄ΠΎ 10 240 ΠœΠ‘ с шагом 1 ΠœΠ‘. дискового пространства Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ /tmp. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° остаСтся, ΠΊΠΎΠ³Π΄Π° срСда выполнСния Π·Π°ΠΌΠΎΡ€ΠΎΠΆΠ΅Π½Π°, обСспСчивая Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ кэш, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π² кСшС Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ сохранили. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎΠ± ограничСниях Ρ€Π°Π·ΠΌΠ΅Ρ€Π° развСртывания см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠšΠ²ΠΎΡ‚Ρ‹ Lambda.

  • Π€ΠΎΠ½ΠΎΠ²Ρ‹Π΅ процСссы ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Lambda ΠΈ Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈΡΡŒ, ΠΊΠΎΠ³Π΄Π° функция Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ, Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ, Ссли Lambda ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ срСду выполнСния. ΠŸΠ΅Ρ€Π΅Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π° ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ всС Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Π΅ процСссы ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π² вашСм ΠΊΠΎΠ΄Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Ρ‹.

Когда Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ свой ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ Π΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ Lambda автоматичСски ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ срСду выполнСния для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΈΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Lambda для создания Π½ΠΎΠ²ΠΎΠΉ срСды выполнСния, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ сбои ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

More about Cold/Warm start

ΠœΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС лямбды Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ врСмя для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ для выполнСния лямбды это называСтся cold start, Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… выполнСниях Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, это warm start.

Π•ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ Ρ…ΠΎΠ»ΠΎΠ΄Π½ΠΎΠ³ΠΎ старта Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это зависит ΠΎΡ‚ инфраструктуры AWS, Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

cold_start_optimization

КакиС-Ρ‚ΠΎ соСдинСния ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ рСсурсы ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° созданиС Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π²Π½Π΅ контСкста Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° глобально, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… лямбды.

import boto3

# ΠœΡ‹ создаСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚ SQS глобально
# Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΎΠ½ создастся Π² Ρ„Π°Π·Π΅ Init 
# ΠΈ Π½Π΅ исчСзнСт послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ функция Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ
client = boto3.client('sqs')

def handler(event, context)
    # some code
    # Π² самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΠΌ врСмя для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ соСдинСния с sqs
    response = client.send_message("some payload here")

ΠŸΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°, староС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ останавливаСтся, ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ создано Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ с Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ.

cold_start_1

Lambda автоматичСски ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ поэтому ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ нСсколько запросов ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Lambda создаСт Π½ΠΎΠ²Ρ‹Π΅ окруТСния для выполнСния лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚ΠΎΠΌ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ³Π΄Π° функция Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Lambda функция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ окруТСния созданныС Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Lambda Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Если Ρƒ нас Π΅ΡΡ‚ΡŒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Lambda foo1 ΠΈ foo2 Ρ‚ΠΎ послС выполнСния foo1 Π΅Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ останСтся, Π½ΠΎ foo2 Π½Π΅ смоТСт Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это другая функция.

cold_start_1

Для асинхронных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ стороной ΠΈ слуТбой Lambda сущСствуСт внутрСнняя ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Lambda максимально быстро ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сообщСния ΠΈΠ· этой ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ автоматичСски ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости. Если функция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ reserved concurrency, это дСйствуСт ΠΊΠ°ΠΊ максимальная Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ, поэтому внутрСнняя ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сохраняСт сообщСния Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° функция Π½Π΅ смоТСт ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

НапримСр, S3 bucket настроСн Π½Π° Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Lambda, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π½Π΅Π³ΠΎ:

lambda_async_queue

Если зарСзСрвированная Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Lambda установлСна Ρ€Π°Π²Π½ΠΎΠΉ 1 ΠΈ 6 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² bucket ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, события ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠΉ срСдой выполнСния. ΠžΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ события ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

cold_start_3

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ provisioned concurrency для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство лямбд Π² Ρ€Π°Π·ΠΎΠ³Ρ€Π΅Ρ‚ΠΎΠΌ состоянии, Ρ‚Π΅ΠΌ самым ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ² Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΡ€ΠΈ ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π΅.

cold_start_4


Event, Push, Pull Model

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ лямбда сработала Π΅Π΅ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ, Π² aws довольно ΠΌΠ½ΠΎΠ³ΠΎ сСрвисов ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ с лямбдой, ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΅Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ. МоТно Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² лямбды Π½Π° Ρ‚Ρ€ΠΈ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ: Push, Pull, Event.

events

Push (Synchronous)

Push ΠΈΠ»ΠΈ Synchronous модСль выполнСния лямбды, это модСль ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ нСпосрСдствСнно Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ лямбду ΠΈ ΠΆΠ΄Π΅ΠΌ ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚. Π’Π°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ API Gateway, ΠΏΡ€ΠΈ запросС Π½Π° эндпоинт вызываСтся лямбда функция Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ пСрСдаСтся нуТная информация для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса, ΠΈ API Gateway ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΏΠΎΠΊΠ° лямбда Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ, Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ вСрнСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ, ΠΈΠ»ΠΈ лямбда ΡƒΠΏΠ°Π΄Π΅Ρ‚ - Ρ‚ΠΎΠ³Π΄Π° API Gateway Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΊΠΎΠ΄ ошибки 502.

Event (Asynchronous)

ΠŸΡ€ΠΈ Event ΠΈΠ»ΠΈ Asynchronous ΠΌΠΎΠ΄Π΅Π»ΠΈ, сСрвис ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ событиС Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, поэтому ΠΎΠ½ просто Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ событиС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒΡΡ лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈ всС. Как ΠΏΡ€ΠΈΠΌΠ΅Ρ€ это S3 Bucket. ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ S3 ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ событиС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, лямбда функция Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ смоТСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ„Π°ΠΉΠ»Π°, Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ с S3, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с Π½ΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½ΠΎ это всС Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ Π²Π½Π΅ контСкста ΠΈΠ²Π΅Π½Ρ‚Π° с S3, S3 своС Π΄Π΅Π»ΠΎ ΡƒΠΆΠ΅ сдСлал сгСнСрировав событиС (event). Π—Π° счСт Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ сСрвису ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сгСнСрировал ΠΈΠ²Π΅Π½Ρ‚, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ситуации ΠΊΠΎΠ³Π΄Π° наша функция ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ошибкой. ΠŸΡ€ΠΈ асинхронном Π²Ρ‹Π·ΠΎΠ²Π΅ Ссли функция ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ошибкой Ρ‚ΠΎ Lambda попытаСтся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π·Π°Π½ΠΎΠ²ΠΎ Π΅Ρ‰Π΅ Π΄Π²Π° Ρ€Π°Π·Π°, ΠΈ Ссли функция всС Ρ‚Π°ΠΊ ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ошибкой Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ²Π΅Π½Ρ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Π²Π°Π» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² DeadLetterQueue Ссли Ρ‚Π°ΠΊΠΎΠ²Π° настроСна. Π’Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΈ асинхронном Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ для лямбды Destination, Ρ‚.Π΅. ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ошибкС.

lambda_destinations

Pull (Poll-based)

ΠŸΡ€ΠΈ Pull ΠΌΠΎΠ΄Π΅Π»ΠΈ сСрвис Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ лямбду Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ SQS. SQS Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠ²Π΅Π½Ρ‚Π° ΠΊΠΎΠ³Π΄Π° сообщСниС ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, поэтому Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ нас Π½ΠΎΠ²Ρ‹Π΅ сообщСния Π² нашСй ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΈ это Π΄Π΅Π»Π°Π΅Ρ‚ Lambda Service. По сути Lambda Service с Π½Π΅ΠΊΠΎΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ SQS Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π½Π΅Ρ‚ Π»ΠΈ Π½ΠΎΠ²Ρ‹Ρ… сообщСний, ΠΈ Ссли ΠΎΠ½ΠΈ Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ, Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΆΠ΅ нСпосрСдствСнно Π½Π°ΡˆΡƒ лямбду для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этих сообщСний.


Triggers and permissions

Execution permission

Ѐункция Lambda ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ execution role, которая прСдоставляСт Π΅ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° доступ ΠΊ сСрвисам ΠΈ рСсурсам AWS. Как ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ доступ ΠΊ ΠΆΡƒΡ€Π½Π°Π»Π°ΠΌ Amazon CloudWatch для ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π»ΠΎΠ³ΠΎΠ². Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ AWS X-Ray для отслСТивания своСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ваша функция обращаСтся ΠΊ сСрвисам с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AWS SDK, Π²Ρ‹ прСдоставляСтС Π΅ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ execution role. Lambda Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ€ΠΎΠ»ΡŒ выполнСния для получСния Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· источников событий, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ сопоставлСниС источников событий для запуска вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

execution role

Π₯ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ являСтся Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшС ΠΏΡ€Π°Π² для Π²Π°ΡˆΠΈΡ… рСсурсов, Ссли лямбдС Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сообщСния Π² SQS Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π΄Π°Ρ‚ΡŒ Π΅ΠΉ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ сообщСний Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ SQS, ΠΈΠ»ΠΈ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π±Π°Π·Ρ‹ Π² DynamoDB.

Resource-based policies

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ resource-based policies, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°ΠΌ ΠΈ сСрвисам AWS ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ваши рСсурсы Lambda. РСсурсы Lambda Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, вСрсии, псСвдонимы ΠΈ вСрсии слоСв. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих рСсурсов ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, которая примСняСтся ΠΏΡ€ΠΈ доступС ΠΊ рСсурсу, Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Когда сСрвис AWS, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Amazon S3, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Lambda, resource-based policies прСдоставляСт Π΅ΠΉ доступ.

resource-based_policy


Scaling

Concurrency

Concurrency (ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ) β€” это количСство Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… экзСмпляров вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Lambda прСдоставляСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° управлСния ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ: Reserved concurrency (Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ) ΠΈ provisioned concurrency (ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ).

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ лямбд ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния:

  1. Concurrency limit - ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° максимальноС количСство ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ экзСмпляров Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π°.
  2. Burst limit - это Π»ΠΈΠΌΠΈΡ‚ послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ созданиС Π½ΠΎΠ²Ρ‹Ρ… экзСмпляров Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ.

ПослС ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ всплСска создания лямбд, ΠΊΠΎΠ³Π΄Π° количСство лямбд достигнСт burst limit, количСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ 500 экзСмпляров ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ. Π­Ρ‚ΠΎ продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достаточно экзСмпляров для обслуТивания всСх запросов ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут concurrency limit. Когда запросы ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ быстрСС, Ρ‡Π΅ΠΌ ваша функция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° ваша функция находится Π½Π° максимальном ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ΅, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ запросы Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ с ошибкой рСгулирования (ΠΊΠΎΠ΄ состояния 429).

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° функция, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π°Ρ всплСск Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. По ΠΌΠ΅Ρ€Π΅ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ увСличСния количСства Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² функция увСличиваСтся. Он ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр для любого запроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° доступный экзСмпляр. Когда достигаСтся ΠΏΡ€Π΅Π΄Π΅Π» ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния ΠΏΠ°ΠΊΠ΅Ρ‚Π°, функция Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ. Если этого ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° нСдостаточно для обслуТивания всСх запросов, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ запросы Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΈ ΠΈΡ… слСдуСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ.

lambda_scaling

Reserved concurrency

Lambda ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ рСсурсы ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ окруТСния ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости, Π½ΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ это ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ лямбда Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ окруТСния бСсконСчно, ΠΏΠΎ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Ρƒ Π΅ΡΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ лямбд (Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ) Π½Π° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚, Π² зависимости ΠΎΡ‚ Ρ€Π΅Π³ΠΈΠΎΠ½Π° эта Ρ†ΠΈΡ„Ρ€Π° Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‚ 500 Π΄ΠΎ 3000 ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ для увСличСния ΠΏΡ€Π΅Π΄Π΅Π»Π°. Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ дСйствуСт Π½Π° всС лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π΅, Ρ‚.Π΅. Π½Π΅ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ ΠΈ сколько лямбд сСйчас Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ ΠΈΡ… суммарноС количСство Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΠ³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Π°. Но для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ-Π±Ρ‹ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ максимальноС количСство ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ лямбды сущСствуСт reserved concurrency - ΠΏΠΎ сути это ΠΏΡ€Π΅Π΄Π΅Π» ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ сколько лямбд ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ reserved concurrency ΠΏΠΎ сути Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ количСство мСст ΠΈΠ· ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π»ΠΈΠΌΠΈΡ‚Π° Π½Π° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ число = Π»ΠΈΠΌΠΈΡ‚ Π½Π° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ - константа, это Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎΠ± всСгда оставался свободный Π»ΠΈΠΌΠΈΡ‚ для выполнСния Π΄Ρ€ΡƒΠ³ΠΈΡ… лямбд.

Допустим наш Π»ΠΈΠΌΠΈΡ‚ Π½Π° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ это 10 ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ, ΠΈ Ρƒ нас Π΅ΡΡ‚ΡŒ 3 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ dev, prod ΠΈ other. ΠœΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ для dev Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ reserved concurrency = 4, для prod Ρ‚ΠΎΠΆΠ΅ = 4. Π’ΠΎΠ³Π΄Π° Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρƒ нас ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ 4 экзСмпляров Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ dev ΠΈ Π΄ΠΎ 4 экзСмпляров Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ prod, Ссли ΡƒΠΆΠ΅ сущСствуСт 4 Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎ 5 создана ΡƒΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Но reserved concurrency откусываСт кусок ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΏΡƒΠ»Π°, поэтому Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ функция other ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² суммС ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ максимум 2 ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ экзСмпляра, Π΄Π°ΠΆΠ΅ Ссли dev ΠΈ prod Π² это врСмя Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ.

reserved_concurrency

Provisioned concurrency

Когда ваша функция ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ, Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ запрос, обслуТиваСмый ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ экзСмпляром, влияСт врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ вашСго ΠΊΠΎΠ΄Π° (cold start). Если ваш ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, влияниС Π½Π° ΡΡ€Π΅Π΄Π½ΡŽΡŽ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΈΠ»ΡŒΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ваша функция ΠΌΠΎΠ³Π»Π° ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π΅Π· Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ provisioned concurrencyΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° функция с ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠΎΠΌ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π°Ρ всплСск Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°.

provisioned_concurrency_1

МоТно ΠΏΠΎΠΉΡ‚ΠΈ Π΅Ρ‰Π΅ дальшС ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ autoscaling Π³Ρ€ΡƒΠΏΠΏΡƒ для лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΈ ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΠ³ΠΎ ΠΏΠΎΡ€ΠΎΠ³Π° ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π·ΠΎΠ³Ρ€Π΅Ρ‚Ρ‹Π΅ окруТСния.

provisioned_concurrency_2

Π•ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π°Π·ΠΎΠ³Ρ€Π΅Π²Π° лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎ CloudWatch Event ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ гСнСрируСтся с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΎΠΌ запускаСтся лямбда функция которая запускаСт Π΄Ρ€ΡƒΠ³ΠΈΠ΅ лямбды для ΠΈΡ… Ρ€Π°Π·ΠΎΠ³Ρ€Π΅Π²Π°. МоТно Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Ρ‚ΡƒΡ‚ ΠΈ Ρ‚ΡƒΡ‚


Layers

Π‘Π°ΠΌΡ‹ΠΉ распространСнный способ прСдоставлСния ΠΊΠΎΠ΄Π° для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ это Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ с зависимостями Π² Π°Ρ€Ρ…ΠΈΠ² ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ это Π½Π° S3. Но ΠΏΠΎΡ€ΠΎΠΉ нСсколько лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ зависимости, Ρ‚ΠΎΠ³Π΄Π° Ρ‡Ρ‚ΠΎ-Π±Ρ‹ Π½Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ наш ΠΊΠΎΠ΄ ΠΏΠΎ всСм функциям ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ вынСсти ΠΎΠ±Ρ‰ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² Lambda Layer. НСсколько лямбд ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ слой. ΠŸΡ€ΠΈ сборкС окруТСния Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ Π°Ρ€Ρ…ΠΈΠ² с ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π°Ρ€Ρ…ΠΈΠ² со слоСм, вмСстС распакованный ΠΊΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ 250 MB.

lambda_layers

Из ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ нСкая бизнСс Π»ΠΎΠ³ΠΈΠΊΠ°, наша функция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ helper Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π›ΡƒΡ‡ΡˆΠ΅ всСго handler Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ, Π»ΠΎΠ³ΠΈΠΊΡƒ Π²Ρ‹Π½ΠΎΡΠΈΡ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄ Π² лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° helper Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вынСсти Π² Layer ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ этот Layer ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ лямбдам ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ‚ΠΎΠΆΠ΅ Π½ΡƒΠΆΠ½Ρ‹ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

# initialization that will be executed in Init phase___________>
import boto3

client = pre_handler_db_connection()

#______________________________________________________________<


# Lambda handler function______________________________________>
def handler(event, context):
  do_logic()
  return {

  }
#______________________________________________________________<


# some business logic__________________________________________>
def do_logic():
  secret = get_secret()
  # do something

#______________________________________________________________<


# some utility functions shared across different lambdas_______>
def get_secret():
  # get secret from secret store
  pass

def pre_handler_db_connection():
  # connecting to db
  pass

#______________________________________________________________<

Versioning

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вСрсии для управлСния Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π²Π°ΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π±Π΅Ρ‚Π°-тСстирования, Π½Π΅ затрагивая ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ вСрсии. Lambda создаСт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Новая вСрсия являСтся ΠΊΠΎΠΏΠΈΠ΅ΠΉ Π½Π΅ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΉ вСрсии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Lambda Π½Π΅ создаСт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Ссли ΠΊΠΎΠ΄ Π² Π½Π΅ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΉ вСрсии Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΉ вСрсии. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ измСнСния ΠΊΠΎΠ΄Π° Π² $LATEST, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ смоТСтС ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ.

ВСрсия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ:

  • Код Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ всС связанныС зависимости.

  • Π‘Ρ€Π΅Π΄Π° выполнСния Lambda, которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

  • ВсС настройки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния.

  • УникальноС имя рСсурса Amazon (ARN) для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ вСрсии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° свою лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ARN ΠΈΠ»ΠΈ Π½Π΅ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ARN.

  • Qualified ARN ARN β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ARN с суффиксом вСрсии. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ относится ΠΊ вСрсии 42 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ helloworld arn:aws:лямбда:aws-Ρ€Π΅Π³ΠΈΠΎΠ½:acct-id:функция:helloworld:42

  • Unqualified ARN β€” функция ARN Π±Π΅Π· суффикса вСрсии. arn:aws:лямбда:aws-Ρ€Π΅Π³ΠΈΠΎΠ½:acct-id:функция:helloworld

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ Π½Π΅ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ARN Π²ΠΎ всСх ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… опСрациях API. Однако Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ARN для создания псСвдонима.

Alias

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько псСвдонимов (Alias) для вашСй лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ПсСвдоним Lambda ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ вСрсии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ псСвдоним Amazon Resource Name (ARN).

И Ρ‚Π°ΠΊ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎ β€” Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅

  • БостояниС ΠΏΠ΅Ρ€Π²ΠΎΠ΅

    • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ нашСй лямбды. ВмСстС с ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсиСй Ρƒ нас создаСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π΅Ρ€ΡΠΈΡŽ $LATEST. Он всСгда ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° послСднюю Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ
    • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ алиас Dev. Π’ΡƒΡ‚ ΠΌΡ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ, Ρƒ нас Π΅ΡΡ‚ΡŒ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ вСрсии, Π² нашСм случаС 1, ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΊ $LATEST, ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ алиасу. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ прикрСпляСм ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ $LATEST, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ наш Dev алиас всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° послСднюю Π²Π΅Ρ‚ΠΊΡƒ, Ρ‚Π°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ всСгда Π½Π° Π΄Π΅Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с послСднСй вСрсиСй лямбды. И Ссли Π²Π΄Ρ€ΡƒΠ³ Π½Π°ΠΌ понадобится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° старой вСрсии, Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ просто ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π΅ алиас ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρƒ алиаса ссылку Π½Π° Π²Π΅Ρ€ΡΠΈΡŽ, Π½Π΅ трогая нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
    • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ алиас Stage ΠΈ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии нашСй лямбды
    • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ алиас Prod ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ для Stage

    И Ρ‚Π°ΠΊ, сСйчас ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ нСпонятноС, ΠΏΠΎ сути 3 алиаса ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½Ρƒ Π²Π΅Ρ€ΡΠΈΡŽ, нСпонятно. Но Π½ΠΈΡ‡Π΅Π³ΠΎ, всС ΠΏΠΎ порядку

  • Π’Ρ‚ΠΎΡ€ΠΎΠ΅ состояниС

    • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ нашСй лямбды(Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Π²ΠΎΠ΄ Β«Hello worldΒ»). Π’ΡƒΡ‚ Ρ…ΠΎΡ‡Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ $LATEST Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ сразу Π½Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ. И Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Β«DevΒ» привязан ΠΊ $LATEST, Ρ‚ΠΎ ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ.
    • Π”Π°Π»Π΅Π΅, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎΠ±Ρ‹ наш Stage смотрСл Π½Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ. БСйчас ΠΎΠ½ привязан ΠΊ вСрсии 1. Π’ΡƒΡ‚ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Stage.
    • РадуСмся. ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ‚ΠΎ β€” Ρ‡Ρ‚ΠΎ Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ состояниС Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅. Π’ΠΎ Π΅ΡΡ‚ΡŒ, наш Prod смотрит Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Π° Dev ΠΈ Stage Π½Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ.
  • Π’Ρ€Π΅Ρ‚ΡŒΠ΅ состояниС

    Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ состояниС, Π½Π°ΠΌ достаточно просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΏΠ°Ρ€Ρƒ строк Π² наш ΠΊΠΎΠ΄ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π΅Ρ‚ΡŒΡ вСрсия нашСй лямбды. И Dev Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π° Π½Π΅Π΅.


Networking

Basic concepts

Region - это гСографичСский Ρ€Π΅Π³ΠΈΠΎΠ½ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ располоТСны сСрвСра. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΎΠ² Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Availability Zone - это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Ρ‚Π°Ρ†Π΅Π½Ρ‚Ρ€Ρ‹. Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои рСсурсы Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… AZ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΠΌΠΊΠ΅ ваш ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ» Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. VPC - это Virtual Private Cloud, нСкая ΡΠ΅Ρ‚ΡŒ которая ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π° ΠΎΡ‚ внСшнСго ΠΌΠΈΡ€Π° ΠΈ привязана ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρƒ. VPC ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ подсСти Subnets, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ свои рСсурсы, ΠΏΠΎ сути это просто Π³Ρ€ΡƒΠΏΠΏΠ° ip адрСсов с связанным Route Table. Route Table это ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΊΠ°ΠΊ ΠΈ ΠΊΡƒΠ΄Π° Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ рСсурсы ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ с внСшним ΠΌΠΈΡ€ΠΎΠΌ ΠΈΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· gateway, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Internet Gateway, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΡƒ Π² ΠΎΠ±ΠΎΠΈΡ… направлСниях, ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠ°ΠΊ сам рСсурс, Ρ‚Π°ΠΊ ΠΈ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ· Π²Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Π½Π° этот рСсурс, Π½ΠΎ ΠΊ InternetGateway ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ рСсурсы ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ip. Π§Ρ‚ΠΎ Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ одностороннСС Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°, Ρ‚ΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NAT-Gateway, ΠΎΠ½ позволяСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ рСсурсы Π±Π΅Π· ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ip адрСсов, ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ соСдинСниС ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ рСсурс, Π° Π½Π΅ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ· Π²Π½Π΅. Π’ΡƒΡ‚ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ PrivateSubnet ΠΈ PublicSubnet, ΠΏΠΎ сути PublicSubnet ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ RouteTable ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСнаправляСт Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π° InternetGateway, Π° PrivateSubnet Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ адрСсов Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚. Много aws сСрвисов ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ DynamoDB, SQS ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· API, это Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ наш рСсурс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΈΠΉ запрос Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚, ΠΈ Ρ‚ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ³Π΄Π° Ρƒ нас рСсурс Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΉ подсСти, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ NAT Gateway, Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π»ΡƒΡ‡ΡˆΠ΅, ΠΈ это VPC Endpoint. VPC Endpoint позволяСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΈΠ· ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΉ подсСти ΠΊ сСрвисам aws, ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π°Ρ€ΡƒΠΆΡƒ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.

vpc_basic

LambdaService VPC

Π‘ основами Π²Ρ€ΠΎΠ΄Π΅ всС ясно, Π½ΠΎ Lambda Π²Ρ€ΠΎΠ΄Π΅ ΠΊΠ°ΠΊ сСрвис aws ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈ ΠΊΠ°ΠΊ ΠΆΠ΅ лямбды Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с VPC. Ну всС лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ VPC ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ управляСт AWS Lambda сСрвис.

vpc_lambda

Connect Lambda to VPC

Если ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ сСрвисы Π²Ρ€ΠΎΠ΄Π΅ DynamoDB ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ‚ΠΎ вопросов Π½Π΅Ρ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²Π°, Π½ΠΎ Ρ‡Ρ‚ΠΎ Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ RDS располоТСнная Π²Π½ΡƒΡ‚Ρ€ΠΈ нашСго VPC, для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ VPC. ΠŸΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊ VPC, Π² VPC создаСтся ENI (ElasticNewtorkInterface), Π΅ΠΌΡƒ выдСляСтся ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ip ΠΈΠ· ΠΏΡƒΠ»Π° адрСсов подсСти ΠΈ лямбда функция ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ этому ENI Ρ‡Π΅Ρ€Π΅Π· V2N (VPC to VPC NAT), V2N это сСрвис ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° созданиС ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ENI. Π’Π΅ΡΡŒ исходящий Ρ‚Ρ€Π°Ρ„ΠΈΠΊ лямбды Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ΄Ρ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· этот ENI ΠΊΡ€ΠΎΠΌΠ΅ Π»ΠΎΠ³ΠΎΠ², Π΄Π°Π½Π½Ρ‹Π΅ Π² CloudWatch Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

lambda_eni

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ лямбда Π½Π΅ смоТСт ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ сСрвисам aws ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΈΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ENI Π² PrivateSubnet, поэтому Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π»ΠΈΠ±ΠΎ NAT Gateway Π»ΠΈΠ±ΠΎ VPC Endpoint.

Private Routes

Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ API для Π²Ρ‹Π·ΠΎΠ²Π° лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ API Gateway ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ эндпоинты. Доступ ΠΊ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ эндпоинтам ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· VPC, ΠΏΡ€ΠΈ этом лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊ VPC, Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли лямбда Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ рСсурсам находящимся Π² VPC.

private_endpoint


Lambda Optimization

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Π½Π° которая ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. Π£ΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ timeout для лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΠΈΡΡ‚Π΅Ρ‡Π΅Π½ΠΈΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ функция закончится с ошибкой. Π’Π°ΠΉΠΌΠ°ΡƒΡ‚ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±Ρ€Π°Ρ‚ΡŒ Π½Π° 30% большС Ρ‡Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя выполнСния самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (это Ρ‚ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠ΄Π±ΠΎΡ€Π° мощности Π±Π»ΠΎΠΊΠ° питания ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я унаслСдовал ΠΈΠ· элСктроники), максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ timeout = 15 ΠΌΠΈΠ½ΡƒΡ‚Π°ΠΌ, Ссли ваш процСсс Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‚ΠΎ лямбда функция Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ для вас, ΠΈΠ»ΠΈ стоит ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π΅Π³ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° нСсколько этапов.

Π’Π°ΠΊΠΆΠ΅ Π΅Ρ‰Π΅ ΠΎΠ½Π΄ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ настройкой являСтся выдСляСмая опСративная ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΡ‚ 128 MB Π΄ΠΎ 10 GB, ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠΌΡƒ сколько памяти выдСляСтся лямбдС Π΅ΠΉ выдСляСтся ΠΈ процСссорной мощности, ΠΈ это ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ»Π°Ρ‚Ρ‹ зависит ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½ΠΎ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (инициализация окруТСния Π½Π΅ считаСтся) ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ сколько памяти Π΅ΠΉ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠ½ΠΎΠ³Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ памяти ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ врСмя выполнСния, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΈ Π½Π° ускорСнии ΠΈ Π½Π° ΠΎΠΏΠ»Π°Ρ‚Π΅.

Memory Duration Cost
128 MB 11.722 s $0.024628
256 MB 6.678 s $0.028035
512 MB 3.194 s $0.026830
1024 MB 1.465 s $0.024638

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для своСго сцСнария (ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π΅Π΅ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΈΠ»ΠΈ Ρ†Π΅Π½Π°, Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ "золотая сСрСдина") сущСствуСт инструмСнт AWS Lambda Power Tuning.

perf-optimize

Resources

Docs:

Articles:

Videos:

About

This some notes about AWS Lambda Service

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published