首页 > 解决方案 > 按计划重启 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

任何帮助,将不胜感激!让我知道我在这里缺少什么!

标签: pythonamazon-web-servicesaws-lambdaamazon-elastic-beanstalkboto3

解决方案


为了解决这个问题,我必须从 AWS 管理控制台向我的 AWS lambda 角色授予这两个权限。您还可以在 serverless.yml 文件中设置权限。

  1. AWSLambdaVPCAccessExecutionRole
  2. AWSCodePipeline_FullAccess

(*确保在授予角色权限时使用最少的权限。)

谢谢你。


推荐阅读