我正在实现一个 AWS lambda,并使用 aws SAM 在本地启动它:
我使用以下
template.yaml
:
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: >
TechMate Internal API
Globals:
Function:
Timeout: 60
Parameters:
Table:
Type: String
Default: Activities
Region:
Type: String
Default: eu-west-2
AWSEnv:
Type: String
Default: AWS
Resources:
CreateActivityFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: myapp
Handler: app.lambda_handler
Runtime: python3.8
Environment:
Variables:
DYNAMO_DB_REGION: localhost
DYNAMO_DB_ENDPOINT: http://localhost:8000
DYNAMO_DB_KEY: local
DYNAMO_DB_SECRET: local
CHATBOT_API_KEY: CHATBOT_API_KEY
CHATBOT_API_SECRET: CHATBOT_API_SECRET
Events:
CreateActivities:
Type: Api
Properties:
Path: /
Method: post
Outputs:
ActivitiesApi:
Description: "API Gateway endpoint URL for Prod stage for Create Activity Function"
Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/activities/"
我使用以下命令来启动它:
sam local start-lambda
但是我的开发环境使用以下配置:
version: "3.8"
name: ${APP_NAME}
services:
# PHP APPS
php_app:
container_name: ${APP_NAME}
build:
context: .
dockerfile: ./dockerfiles/Dockerfile
args:
- COMPOSER_VERSION=latest
- XDEBUG_VERSION=latest
- PHP_VERSION=8.3
volumes:
- "php_app:/var/www/html"
networks:
private:
env_file: env/php.env
# Supportive services
nginx:
image: nginx
networks:
private:
public:
ipv4_address: ${IP_BASE}.2
volumes:
- "php_app:/var/www/html"
- "./conf/nginx/nginx.conf:/etc/nginx/nginx.conf:ro"
- "./ssl/certs/www.crt:/etc/nginx/ssl/www.crt:ro"
- "./ssl/certs/www.key:/etc/nginx/ssl/www.key:ro"
# Rest of services Here
volumes:
php_app:
driver: local
driver_opts:
type: none
o: bind
device: ${PHP_APP_PATH}
networks:
private:
public:
ipam:
config:
- subnet: ${IP_BASE}.0/24
gateway: ${IP_BASE}.1
如何让 sam 运行 lambda 及其模拟网关来侦听 docker-compose 中的
private
网络?
我发现没有办法让 sam 监听 docker-compose.yml 上定义的同一网络,但我使用以下步骤遵循了这种方法:
我遵循的方法是在我的主机上运行以下命令:
sam local start-api --host=0.0.0.0
它可以更好地完善,但就我而言,效果很好,我对此很满意。
/proc/route
为此,您可以使用 ip 命令:
ip route | grep default | awk '{print $3}'
或者如果使用 php,您也可以使用以下脚本: https://github.com/pc-magas/docker_php_dev/blob/master/utils/get_xdebug_ip
脚本或命令都必须在 docker 容器的INSIDE 中运行。通常我在 docker 的入口点脚本上运行这些命令。
host.docker.internal
(较简单的一种)Docker 桌面允许通过
host.docker.internal
域访问主机监听服务。但在linux上没有定义。
对于您的服务的定义:
extra_hosts:
- "host.docker.internal:host-gateway"
API 可通过以下方式访问:
curl host.docker.internal:3000