python - 按计划重启 ElasticBeanstalk 应用服务器
问题描述
我在非默认 VPC 的私有子网中使用无服务器创建了一个 lambda 函数。我想在计划的时间重新启动 elasticbeanstalk 应用程序的应用服务器。我使用了 boto3,这是参考 [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/elasticbeanstalk.html][1]
问题是当我在本地运行该功能时,它会运行并重新启动应用程序服务器。但是当我使用 sls deploy 进行部署时,它不起作用,当我从 lambda 控制台对其进行测试时,我得到了空响应。
这是代码:
import json
from logging import log
from loguru import logger
import boto3
from datetime import datetime
import pytz
def main(event, context):
try:
client = boto3.client("elasticbeanstalk", region_name="us-west-1")
applications = client.describe_environments()
current_hour = datetime.now(pytz.timezone("US/Eastern")).hour
for env in applications["Environments"]:
applicationname = env["EnvironmentName"]
if applicationname == "xxxxx-xxx":
response = client.restart_app_server(
EnvironmentName=applicationname,
)
logger.info(response)
print("restarted the application")
return {"statusCode": 200, "body": json.dumps("restarted the instance")}
except Exception as e:
logger.exception(e)
if __name__ == "__main__":
main("", "")
这里是 serverless.yml 文件:
service: beanstalk-starter
frameworkVersion: '2'
provider:
name: aws
runtime: python3.8
lambdaHashingVersion: 20201221
profile: xxxx-admin
region: us-west-1
memorySize: 512
timeout: 15
vpc:
securityGroupIds:
- sg-xxxxxxxxxxx (open on all ports for inbound)
subnetIds:
- subnet-xxxxxxxxxxxxxxxx (private)
- subnet-xxxxxxxxxxxxxxxx (private)
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: non-linux
functions:
main:
handler: handler.main
events:
- schedule: rate(1 minute)
来自 lambda 控制台的响应:
The area below shows the result returned by your function execution. Learn more about returning results from your function.
null
任何帮助,将不胜感激!让我知道我在这里缺少什么!
解决方案
为了解决这个问题,我必须从 AWS 管理控制台向我的 AWS lambda 角色授予这两个权限。您还可以在 serverless.yml 文件中设置权限。
- AWSLambdaVPCAccessExecutionRole
- AWSCodePipeline_FullAccess
(*确保在授予角色权限时使用最少的权限。)
谢谢你。
推荐阅读
- c++ - 字符串排列递归问题
- google-cloud-platform - 不同项目中的 Cloud SQL 连接
- java - 根据声纳配置将我的 for 循环复杂度降低到 4
- angular - 在 ag-grid 中是否可以在同一列中显示带有复选框和另一种类型的单元格
- c# - 如何在 POS 机和 App 之间打开 TCP Stream 并发送多条消息?
- r - 将元素添加到深度嵌套列表
- python - Pandas 使用通配符模式读取 csv 以选择列
- reactjs - 导出变量 - React
- xamarin - Xamarin.Forms android检查用户是否单击了拒绝并且不再询问
- java - 材料转换 FAB 到活动 - 转换回来时活动仍然存在一秒钟