我正在通过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/
答案 0 :(得分:1)
我已经使用API Gateway阶段来触发不同的lambda函数。您可以将lambda_function_name
(在我的情况下为lbfunc)作为变量放入舞台,并在集成请求Lambda Function ${stageVariables.lambda_function_name}
中使用此变量
您可以在此处查看有关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/
让我知道这是否有帮助。