簡體   English   中英

Localstack 上的無服務器部署 Python HTTP API

[英]Serverless Deployment on Localstack for Python HTTP API

我從aws-python-http-api模板的無服務器項目創建

我的 serverless.yml 文件如下所示

service: aws-http-api
frameworkVersion: '3'

plugins:
  - serverless-localstack

provider:
  name: aws
  stage: local
  runtime: python3.9
  profile: localstack

functions:
  hello:
    handler: handler.hello
    events:
      - httpApi:
          path: /
          method: get

custom:
  localstack:
    stages:
      - local
    host: http://localhost 
    edgePort: 4566 
    autostart: true
    lambda:
      # Enable this flag to improve performance
      mountCode: True
    docker:
      # Enable this flag to run "docker ..." commands as sudo
      sudo: False
  stages:
    local:
      ...

我正在使用 docker-compose 和 docker-compose.yml 運行 localstack 看起來像

version: '3.0'

services:
  localstack:
    container_name: "${LOCALSTACK_DOCKER_NAME-localstack_latest}"
    image: localstack/localstack:latest
    environment:
      - AWS_DEFAULT_REGION=us-east-1
      - EDGE_PORT=4566
      - DEBUG=${DEBUG-}
      - LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR-}
      - DOCKER_HOST=unix:///var/run/docker.sock
      - HOSTNAME=localhost
            - SERVICES=${SERVICES-serverless
          ,acm,apigateway,cloudformation,cloudwatch
          ,dynamodb,dynamodbstreams,ec2,es,events
          ,firehose,iam,kinesis,kms,lambda,rds
          ,route53,s3,s3api,secretsmanager,ses,sns
          ,sqs,ssm,stepfunctions,sts}
    ports:
      - "127.0.0.1:4566:4566"            # LocalStack Gateway
      - "127.0.0.1:4510-4559:4510-4559"  # external services port range
    volumes:
      - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"


docker-compose up -d工作正常,我可以在http://127.0.0.1:4566/health上正確看到結果

畢竟我已經進入項目文件夾並按照命令無服務器部署運行並且錯誤是

UPDATE_FAILED: aws-http-api-local (AWS::CloudFormation::Stack)
undefined

我還運行了下一個 ** serverless deploy --stage local** 和同樣的錯誤。 知道為什么會發生嗎?

docker-compose up -d工作正常,我可以在http://127.0.0.1:4566/health上正確看到結果

畢竟我已經進入項目文件夾並按照命令無服務器部署運行並且錯誤是

UPDATE_FAILED: aws-http-api-local (AWS::CloudFormation::Stack)
undefined

我還運行了下一個 ** serverless deploy --stage local** 和同樣的錯誤。 知道為什么會發生嗎?

您好——要運行上面的無服務器示例,您需要訪問 LocalStack Pro,因為社區版本不支持在操作期間調用的某些 AWS API。

您需要將docker-compose.yml更新為以下配置:

version: "3.8"

services:
  localstack:
    container_name: "${LOCALSTACK_DOCKER_NAME-localstack_main}"
    image: localstack/localstack-pro  # required for Pro
    ports:
      - "127.0.0.1:4566:4566"            # LocalStack Gateway
      - "127.0.0.1:4510-4559:4510-4559"  # external services port range
      - "127.0.0.1:53:53"                # DNS config (required for Pro)
      - "127.0.0.1:53:53/udp"            # DNS config (required for Pro)
      - "127.0.0.1:443:443"              # LocalStack HTTPS Gateway (required for Pro)
    environment:
      - DEBUG=${DEBUG-}
      - PERSISTENCE=${PERSISTENCE-}
      - LAMBDA_EXECUTOR=${LAMBDA_EXECUTOR-}
      - LOCALSTACK_API_KEY=XXXXXXX  # required for Pro
      - DOCKER_HOST=unix:///var/run/docker.sock
    volumes:
      - "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"
      - "/var/run/docker.sock:/var/run/docker.sock"

您還需要將serverless.yml更新為以下配置:

service: aws-python-http-api
frameworkVersion: '3'

provider:
  name: aws
  runtime: python3.9

functions:
  hello:
    handler: handler.hello
    events:
      - httpApi:
          path: /
          method: get

plugins:
  - serverless-localstack

custom:
  localstack:
    stages:
      - local

它還將涉及安裝serverless-localstack插件。 設置成功后,您可以運行serverless deploy --stage local ,它會產生以下 output:

Using serverless-localstack

Deploying aws-python-http-api to stage local (us-east-1)
Skipping template validation: Unsupported in Localstack

✔ Service deployed to stack aws-python-http-api-local (14s)

endpoint: GET - https://e2af2ca4.execute-api.localhost.localstack.cloud:4566//
functions:
  hello: aws-python-http-api-local-hello (119 kB)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM