【发布时间】:2019-04-16 03:32:39
【问题描述】:
我们开发了一个 AWS Serverless Lambda 应用程序,使用 dotnetcore 对 EC2 实例执行操作,例如启动或停止 EC2 实例并与 Aws API Gateway 集成。
dotnetcore 应用程序中的 serverless.template
"StartInstanceById" : {
"Type" : "AWS::Serverless::Function",
"Properties": {
"Handler": "EC2_Monitoring_Serverless::EC2_Monitoring_Serverless.Functions::StartInstanceById",
"Runtime": "dotnetcore2.1",
"CodeUri": "",
"MemorySize": 256,
"Timeout": 30,
"Role": "arn:aws:iam::2808xxxx1013:role/lamda_start_stop",
"Policies": [ "AWSLambdaBasicExecutionRole" ],
"Events": {
"PutResource": {
"Type": "Api",
"Properties": {
"Path": "/instances",
"Method": "Get"
}
}
}
}
}
当我调用 API 网关 url 时,上述 Lambda 函数可以正常启动 ec2 实例。
为了调用这些 API,我们创建了 Angular 6 应用程序并使用 Aws Cognito 用户池提供了身份验证。 于是 cognito 用户登录网站并获取所有 EC2 信息。
如果用户想要停止/启动 EC2 实例,用户将单击调用 lambda 函数的相关 api 网关 url 的特定按钮,它工作正常。
现在的问题是谁执行了该操作。在对 stackoverflow 和 aws 社区论坛进行大量研究以了解谁启动或停止了 EC2 实例之后,我发现 Aws CloudTrail 记录了用户启动或停止实例时的信息。
所以我创建了一个跟踪,我可以看到 S3 存储桶中的日志。但是在我打开的每个日志中,我看到角色“arn:aws:iam::2808xxxx1013:role/lamda_start_stop”被捕获。我知道这是因为 Lambda 函数。但我想知道谁真正停止了实例。
请告知如何获取用户详细信息!
【问题讨论】:
-
为什么要使用
lambda启动/停止ec2?更好的解决方案是在cloudwatch内部设置。
标签: amazon-web-services amazon-s3 amazon-ec2 aws-lambda aws-sdk