跳转到主要内容

使用Senza部署AWS CF模板的REST服务

项目描述

https://coveralls.io/repos/zalando/lizzy/badge.svg?branch=master&service=github

Lizzy

Lizzy是Senza的包装器:一个用于创建和执行AWSCloudFormation模板的命令行部署工具。使用Lizzy,自治团队可以在他们的持续交付管道中使用Senza,将新版本的应用部署到特定团队的AWS账户。Lizzy可以被部署到AWS账户,然后可以使用它的REST API将新应用部署到该账户。

为什么选择Lizzy

Zalando,开发团队有自己的AWS账户,这样他们可以自主工作。一个团队(持续交付)负责维护所有其他Zalando团队的Jenkins。这使团队能够专注于他们的OKR,而不是花费时间配置Jenkins或创建自己的持续部署工具。对于Zalando,Lizzy帮助我们使用Jenkins-as-a-Service设置实现持续交付。如果没有Lizzy,团队需要将AWS凭证保存到他们的Jenkins实例中。

如果您的团队对在AWS上使用不可变基础设施感兴趣,您可以使用Senza来创建和管理您的堆栈,使用CloudFormation。Lizzy是一个额外的工具,它提供了一个部署API,用于在您的持续交付管道中运行Senza命令。Lizzy可以与任何代码集成工具(如JenkinsTravisCICircleCI等)一起使用。

Lizzy是如何工作的

Lizzy由Lizzy Agent(一个REST API服务)和Lizzy-Client命令行工具组成。

Lizzy Agent是一个部署在团队AWS账户中的Web应用程序,并通过REST API获得创建新的CloudFormation堆栈的访问权限。所有请求都使用OAuth2载体令牌进行身份验证。

Lizzy-Client模仿了Senza命令的使用,并将它们转换为HTTP请求,然后发送到Lizzy Agent的REST API。

谁使用Lizzy

许多Zalando团队在生产中使用Lizzy来提供高质量的在线时尚平台,该平台是欧洲增长最快的。如果您想了解更多关于Zalando如何使用Lizzy的信息,请阅读我们的博客文章使用Lizzy的持续交付管道

如何在本地运行Lizzy

此存储库包含一个Dockerfile,您可以使用以下命令在本地构建镜像

$ docker build -t lizzy:dev .

镜像构建完成后,它将以“lizzy:dev”标签可用。您还需要为Lizzy指定一些环境变量。以下是一个“example.cfg”文件

TOKEN_URL=https://token.auth.example.com/oauth2/access_token
TOKENINFO_URL=https://info.auth.example.com/oauth2/tokeninfo
ALLOWED_USERS=['robotusername','myusername']
DEPLOYER_SCOPE=deployer
LOG_LEVEL=DEBUG

您还需要在本地机器的~/.aws下配置AWS凭证。之后,您可以使用以下命令运行Lizzy镜像

$ docker run --rm -p 8080:8080 --env-file environment.cfg -v ~/.aws:/.aws --name lizzy -u 999 -it lizzy:dev

应用程序默认在端口8080上可用,通常在http://127.0.0.1:8080可访问。这取决于您如何在本地配置Docker。Swagger/OpenAPI控制台可在http://127.0.0.1:8080/api/ui/#/default访问。

部署到AWS

有几种方法可以将Lizzy部署到AWS。在Zalando,我们使用STUPS,它提供了一种方便且符合审计要求的平台即服务(PaaS)。以下是部署Lizzy的Senza定义示例

SenzaInfo:
  StackName: lizzy
  Parameters:
    - ImageVersion:
        Description: "Docker image version of lizzy."
SenzaComponents:
  - Configuration:
      Type: 'Senza::StupsAutoConfiguration'
  - AppServer:
      Type: Senza::TaupageAutoScalingGroup
      AssociatePublicIpAddress: false
      ElasticLoadBalancer: AppLoadBalancer
      IamRoles: ['app-lizzy']
      InstanceType: t2.nano
      SecurityGroups: ['app-lizzy']
      TaupageConfig:
        application_version: '{{Arguments.ImageVersion}}'
        environment:
          ALLOWED_USER_PATTERN: "^(jenkins-slave-\\w+)$"
          DEPLOYER_SCOPE: myscope
          LANG: C.UTF-8
          LC_ALL: C.UTF-8
          LOG_LEVEL: DEBUG
          REGION: '{{AccountInfo.Region}}'
          TOKEN_URL: 'https://token.auth.example.com/oauth2/access_token'
          TOKENINFO_URL: 'https://info.auth.example.com/oauth2/tokeninfo'
        health_check_path: /api/swagger.json
        ports: {8080: 8080}
        runtime: Docker
        source: 'lizzy:{{Arguments.ImageVersion}}'
  - AppLoadBalancer:
      HTTPPort: 8080
      HealthCheckPath: /api/swagger.json
      Scheme: internet-facing
      SecurityGroups: ['app-lizzy-lb']
      Type: Senza::WeightedDnsElasticLoadBalancer

Lizzy的访问控制

为了创建新的CloudFormation堆栈,Lizzy应用程序需要访问CloudFormation以及其他Amazon API中的某些服务。您需要指定类似于以下内容的IAM角色

{
    "Statement": [
        {
            "Action": [
                "iam:*",
                "cloudformation:*",
                "ec2:*",
                "route53:*",
                "elasticloadbalancing:*",
                "cloudwatch:*",
                "elasticache:*",
                "acm:*",
                "autoscaling:*",
                "sqs:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ],
    "Version": "2012-10-17"
}

这就是Lizzy成功运行Senza命令所需的最小配置。此配置中可能包含其他语句。

配置

Lizzy使用以下环境变量进行配置

NAME

DESCRIPTION

DEFAULT

ALLOWED_USERS

可以使用Lizzy的用户列表

ALLOWED_USER_PATTERN

定义匹配Lizzy允许使用的用户名的正则表达式

DEPLOYER_SCOPE

部署所需的OAuth作用域

LOG_LEVEL

设置最小日志级别

INFO

LOG_FORMAT

设置日志格式(人类或默认)

默认

REGION

要使用的AWS区域

eu-west-1

SENTRY_DSN

包含客户端密钥的Sentry URL

TOKEN_URL

获取新令牌的URL

TOKENINFO_URL

验证令牌的URL

配置对Lizzy的访问

有两个环境变量用于配置谁可以成功调用Lizzy代理。您必须使用其中一个(并且仅使用一个):要么是ALLOWED_USERS,要么是ALLOWED_USER_PATTERN。要选择哪个适合您的用例,您首先需要了解它们的作用。

  • ALLOWED_USERS:可以访问Lizzy的特定用户名单。当您知道要授予访问权限的客户端的确切用户名时使用它。

  • ALLOWED_USER_PATTERN:应匹配将要调用Lizzy API的客户端用户名的正则表达式。当您知道用户名应以某些模式开头时使用它,例如stups_.+

这些变量是互斥的。再次强调:只使用其中一个。

身份验证服务

TOKEN_URL环境变量应指向提供OAuth令牌的服务。在Zalando,我们使用开源的PlanB提供者TOKENINFO_URL环境变量应指向存储令牌信息的服务的URL。为了存储OAuth2令牌信息,我们使用Zalando开发的PlanB令牌信息。如果您没有OAuth2基础设施,请查看这些项目。

为Lizzy做出贡献

我们欢迎您的想法、问题和pull请求。只需遵循通常/标准的GitHub实践

许可证

版权所有2015 Zalando SE

根据Apache许可证第2版(“许可证”)许可;除非根据适用的法律或书面同意,否则不得使用此文件,除非遵守许可证。您可以在以下位置获得许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言、权限和限制,请参阅许可证。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

lizzy-2.5.4.tar.gz (16.6 kB 查看哈希值

上传时间:

构建分布

lizzy-2.5.4-py3-none-any.whl (27.1 kB 查看哈希值

上传时间: Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面