通过API网关触发Lambda的特定功能

时间:2020-10-09 22:16:06

标签: python aws-lambda aws-api-gateway boto3

我正在通过boto3学习Lambda和Python。我在下面的#1点有AWS Lambda代码,它使用boto3停止了某些ECS服务,我通过API网关url curl -X POST https://blablabla.execute-api.xx-west-1.amazonaws.com/test/触发了该Lambda,并且工作正常。

我知道我放置在处理程序下的所有代码都可以正常工作,但是我无法一次全部放置在处理程序下以停止/启动各种服务,相反,我想在同一Lambda中添加不同的代码段来执行操作例如:a)启动ECS服务,b)启动RDS DB,c)停止RDS DB,就像我尝试在下面的第2点中建议的那样。

我知道boto3代码的外观,因此我想在boto3参数下方第2点列出的这些函数下添加,然后在API Gateway中创建资源(或其他内容)以链接这些函数Lambda,因此使用相同的网址我可以触发特定功能,请参见下面第3点的示例。

在API网关(资源)中,我只能添加一个“ PUT方法”(每个资源),这就是我用来触发Lambda的方法,我之所以提到此是因为我当时正在考虑创建单独的Lambda,然后在每个网址上添加一个资源PUT方法,以便在我可以为网址添加具有不同结尾的阶段之后,但是似乎我不能,也许有办法,但我只是不知道。

也许我错了,我可以将所有内容放在处理程序下吗?

要完成此任务,我有什么选择?。

1)

import json
import boto3
import pprint

region = 'xx-west-1'
cluster_name = "dummy-XX102020"
service_name = "some-test"

def lambda_handler(event, context):
    ecs_client = boto3.client('ecs', region_name=region)
    ecs_client.update_service(
        cluster=cluster_name,
        service=service_name,
        desiredCount=0
    )
    print(ecs_client)
    
    asg_client = boto3.client('application-autoscaling', region_name=region)
    asg_client.register_scalable_target(
        ServiceNamespace='ecs',
        ResourceId='service' + '/' + cluster_name + '/' + service_name,
        ScalableDimension='ecs:service:DesiredCount',
        MinCapacity=0,
        MaxCapacity=0,
    )
    print(asg_client)
    
    response = {
      "statusCode": 200,
      "body": json.dumps('Executed successfully')
    }
    return response
def start_ecs(I don't know what to put here)
my code here

def start_rds(I don't know what to put here)
my code here

def stop_rds(I don't know what to put here)
my code here
curl -X POST https://blablabla.execute-api.xx-west-1.amazonaws.com/start_ecs/
curl -X POST https://blablabla.execute-api.xx-west-1.amazonaws.com/start_rds/
curl -X POST https://blablabla.execute-api.xx-west-1.amazonaws.com/stop_rds/

1 个答案:

答案 0 :(得分:1)

我已经使用API​​ Gateway阶段来触发不同的lambda函数。您可以将lambda_function_name(在我的情况下为lbfunc)作为变量放入舞台,并在集成请求Lambda Function ${stageVariables.lambda_function_name} 中使用此变量 enter image description here

您可以在此处查看有关AWS API Gateway阶段的信息: https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-stages.html

借助此功能,您可以拥有一个具有不同阶段的rest-api,以触发不同的lambda函数。

就我而言,我将其用于生产和开发,因此看起来像这样: https://blablabla.execute-api.eu-west-1.amazonaws.com/prod-v1/

让我知道这是否有帮助。