aws beanstalk 基本配置和.ebextension高级配置的方式和命令

参考资料

  • https://docs.amazonaws.cn/zh_cn/elasticbeanstalk/latest/dg/customize-containers.html
  • https://docs.amazonaws.cn/zh_cn/elasticbeanstalk/latest/dg/platforms-linux-extend.html
  • https://docs.amazonaws.cn/zh_cn/elasticbeanstalk/latest/dg/beanstalk-environment-configuration-advanced.html
  • https://docs.amazonaws.cn/zh_cn/elasticbeanstalk/latest/dg/custom-platforms-scripts.html

beanstalk的linux平台提供了以下多种扩展配置的方式

  • buildfile
  • procfile
  • platform hook
  • .ebextension
  • reverse proxy configuration

官方文档中对以上配置方式进行了比较

  • Buildfile,短期运行并在完成任务后终止的命令。Buildfile 中的所有路径都是源包根目录的相对路径
  • Procfile,长期运行不应退出的应用程序进程
  • platform hook可以使用更丰富的脚本,并且能更好地进行错误处理
  • 建议使用 Buildfile,而不是在 .ebextensions 配置文件中提供文件和命令
  • Procfile 和平台挂钩用于在实例预置期间在环境实例上配置和运行自定义代码

本文的主要内容即和.ebextension配置相关的基础和高级配置项和参数

查看配置

在beanstalk控制台可以直接看到ui界面的配置选项和参数。

对于linux平台,beanstalk提供了额外的脚本来检查环境的配置信息

https://docs.amazonaws.cn/zh_cn/elasticbeanstalk/latest/dg/custom-platforms-scripts.html

使用 get-config 工具检索环境变量值以及其他平台和实例信息

常用的命令如下

$ /opt/elasticbeanstalk/bin/get-config help
COMMANDS:
   optionsettings  environment option settings that affect instance
   container       container specific configurations
   addons          addon configurations
   environment     environment variables
   platformconfig  Platform specific configurations

$ /opt/elasticbeanstalk/bin/get-config --output YAML optionsettings
aws:elasticbeanstalk:application:environment:
    PYTHONPATH: /var/app/venv/staging-LQM1lest/bin
aws:elasticbeanstalk:container:python:
    NumProcesses: "1"
    NumThreads: "15"
    WSGIPath: application
aws:elasticbeanstalk:environment:proxy:
    ProxyServer: nginx
    StaticFiles:
        - ""
aws:elasticbeanstalk:healthreporting:system:
    SystemType: enhanced
aws:elasticbeanstalk:hostmanager:
    LogPublicationControl: "false"

$ /opt/elasticbeanstalk/bin/get-config --output YAML container
common_log_list:
    - /var/log/eb-engine.log
    - /var/log/eb-hooks.log
default_log_list:
    - /var/log/nginx/access.log
    - /var/log/nginx/error.log
    - /var/log/httpd/access_log
    - /var/log/httpd/error_log
    - /var/log/web.stdout.log
environment_name: test-beanpython-dev
instance_port: "80"
log_group_name_prefix: /aws/elasticbeanstalk
proxy_server: nginx
static_files:
    - ""
supported_proxy_servers:
    - apache
    - nginx
xray_enabled: "true"

基础配置

beanstalk环境中涉及能够配置的参数在官方文档中已经有详细的说明,这里只提及一些需要注意的点

eb环境创建后无法修改的配置包括

  • 处理器架构
  • 负载均衡器的类型
  • vpc等网络环境

默认配置下,asg对实例的健康检查并不会检查实例内部应用程序的状态,即使elb判断实例不健康asg也不会替换实例。配置asg的elb健康检查的yml如下

$ cat .ebextensions/autoscaling.config
Resources:
  AWSEBAutoScalingGroup:
    Type: "AWS::AutoScaling::AutoScalingGroup"
    Properties:
      HealthCheckType: ELB
      HealthCheckGracePeriod: 300

创建lb时的默认行为取决于vpc中子网的可用区状态,由于alb需要至少2个可用区,因此如果所有的子网都在单一可用区,默认elb为clb

配置基础的网络环境,无法在创建环境之后设置以下参数

$ .ebextensions/vpc.config
option_settings:
   aws:ec2:vpc:
      VPCId: vpc-086d798b56f59e2ae 
      AssociatePublicIpAddress: 'true'
      ELBScheme: public
      ELBSubnets: subnet-027025e9d9760acdd,subnet-0d5dfxxxx80d1
      Subnets: subnet-027xxxxxacdd,subnet-0d5xxxxx80d1

由于日志是观测和排查的主要手段,因此需要着重常见的日志和调制配置

https://docs.amazonaws.cn/zh_cn/elasticbeanstalk/latest/dg/environments-cfg-logging.html

和日志相关的配置命名空间,需要参考高级配置中配置文件具体怎么写

高级配置

使用eb配置文件在源代码中设置环境属性和配置选项,配置参数是按照不同资源的命名空间进行组织的

配置种类

.Ebextensions路径下创建的配置文件中,主要包括以下三种配置

  • option_settings,定义配置选项的值
  • resource,自定义应用程序环境中的资源(支持cloudforamtion的任何资源),定义配置选项所提供功能之外的其他 AWS 资源
  • 其他部分,包括(packagessourcesfilesusersgroupscommandscontainer_commandsservices),配置eb环境中启动的ec2实例

简单的示例配置如下,在创建sns资源的同时

$ cat .Ebextensions/sns-topic.config
Resources:
  NotificationTopic:
    Type: AWS::SNS::Topic

option_settings:
  aws:elasticbeanstalk:application:environment:
    NOTIFICATION_TOPIC: '`{"Ref" : "NotificationTopic"}`'

感觉基本配置仅仅是在限定范围内对默认配置按需进行修改。高级配置则是在默认配置之外进行扩展和增强。

配置时机

可以应用配置的时机如下

  • 环境创建之前
  • 环境创建过程中
  • 环境创建之后

配置优先级

相同的配置项可在在多个地方同时配置,但是需要遵循生效的优先级

配置生效的优先顺序如下(从高到低)

  • 直接应用于环境的设置
  • 保存的配置
  • (重点)配置文件(.ebextensions),直接应用于环境以及未在保存的配置中指定的任何选项的设置都从应用程序源包根文件夹处的 .ebextensions 文件夹中的配置文件加载。配置文件会按字母顺序执行
  • 默认值

在配置文件和保存的配置中定义的设置的优先级低于在创建环境期间或在创建环境后配置的设置

当在应用的根目录中创建.ebextensions 下的.config时,部署时会自动应用这些配置创建环境。也可以将配置文件保存并在之后引用

eb config save --cfg savedconfig
eb create --cfg savedconfig

当设置或更改某一配置选项时,根据更改的严重性,可能会触发完整环境更新

如果选项在保存的配置、配置文件中未设置并且也没有直接对环境设置,则应用默认值(如果有默认值)

配置列表

对于所有环境的常规选项列表

面向所有环境的常规选项

示例配置

官方文档给出了beanstalk和其他aws服务集成的示例

https://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/AWSHowTo.html

以下是一些示例配置的仓库

https://github.com/awsdocs/elastic-beanstalk-samples/tree/master

posted @ 2023-03-31 22:14  zhaojie10  阅读(10)  评论(0)    收藏  举报  来源