amazon-web-services - 具有无服务器框架的 AWS codeBuild/codePipeline

标签 amazon-web-services aws-lambda serverless-framework aws-codepipeline aws-codebuild

我正在尝试自动化 部署管道对于我的申请。这是自动化架构,我想出了:
Automation Architecture

如您所见,我使用的是 代码管道 代码构建 自动化我的部署。我的后端基于 Serverless Framework ,它在触发 sls deploy 时部署 lambda 函数命令。就是这个原因,我没用代码部署 做传统的部署。 buildspec.yml文件如下所示:

version: 0.1

phases:
  install:
    commands:
      – apt-get -y update
      – npm install -g serverless@1.9.0
  build:
    commands:
      – cd nj2jp/serverless && npm install
  post_build:
    commands:
      – serverless deploy –verbose

artifacts:
  files:
    – serverless.yml
  discard-paths: yes

现在,我有 3 个问题 关于 代码构建 无服务器 :

问题一:命令sls deploy依赖于一个名为 config.yml 的文件其中包含诸如数据库密码之类的 secret 。该文件不会被检入 git。您认为包含config.yml 的最佳方式是什么?在代码构建中?

问题二: 回滚 如果我们必须使用 部署传统的 EC2 应用程序,可以使用 AWS 完成代码部署 .在无服务器的情况下,我们不使用 代码部署 serverless 也支持 回滚 特征。我们如何在 中利用无服务器回滚代码管道 ?

问题3: 时触发 codePipeline拉取请求 发生。我看到一些帖子说,codePipeline 不支持。但是这些帖子是去年的,codePipeline 现在是否支持 Pull Request?

哈克答案 (不正确,但有效。需要您提供更好的答案。)

答案1: config.yml文件可以保存在私有(private) S3桶并且可以作为 pre-build 的一部分被拉到 codeBuild setup 或者我们可以将所有 secret 添加到 codeBuild 的 Env 变量中。我不喜欢第二种选择,因为我希望在所有环境中保持一致。这个问题有更好的解决方案吗?

答案2:我想不出这个黑客。期待你的答案。

答案3:我遇到了一些使用 [APIGateway + Lambda + S3] 的博客文章。触发代码管道 对于拉取请求。但我觉得,这个功能必须作为开箱即用的功能提供。此功能的 codePipeline 是否有任何更新?

最佳答案

问题一

更新:

无服务器框架现在支持从 Parameter Store 引用变量。这意味着您可以跳过在 CodeBuild 中定义它们,因为无服务器将在部署时从 Parameter Store 中检索它们。

例子:

无服务器.yaml

provider:
  name: aws
  runtime: nodejs8.10
  region: us-west-2
  stage: ${env:REGION}
  environment:
    S3_BUCKET: ${env:/s3/bucket}
    # Use ~true for SecureString parameters
    DB_USERNAME: ${ssm:/db/username~true}
    DB_PASSWORD: ${env:/db/password~true}

原答案:

如果你想坚持你的 config.yml ,那么使它工作的唯一方法是通过类似于您已经在做的黑客攻击,因为它不受版本控制。

我的建议是将您的环境变量存储在 EC2 参数存储中,您可以在 CodeBuild buildspec.yml 中引用它.这些变量可在您的 serverless.yml 中访问。使用 ${env:VARIABLE_NAME} .

对于本地开发,您还应该使用真实的环境变量,而不是将它们存储在 config.yml 中。 . direnv 等工具擅长这一点。

问题2

您可以通过重新运行之前的 CodeBuild 作业来进行手动回滚。我想不出像 CodeDeploy 那样自动完成它的简单方法。也许 Lambda 函数可以进行部署后测试,如果失败,它可以触发重新运行之前的 CodeBuild 作业。

问题3

CodePipelines 绑定(bind)到单个分支,因此要使其在 PR 分支上工作,您必须像您提到的文章那样进行黑客攻击。我已经求助于使用 API Gateway + Lambda + CodeBuild(无 CodePipeline)来做到这一点。

关于amazon-web-services - 具有无服务器框架的 AWS codeBuild/codePipeline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46189597/

相关文章:

laravel - Vapor - 如何增加部署到登台和生产的文件夹大小?

java - 从 AWS Lambda 获取 URL 时出现无提示错误

amazon-web-services - CloudFormation::APIGateway 中的 AWS 和 AWS_PROXY 有什么区别?

amazon-web-services - 使用 graphql、aws lambda 和无服务器框架的多个 url 路径选项错误

java - 在aws java sdk中设置端点后描述elasticache实例时出错

amazon-web-services - AWS Flow Framework 的开源等效项

amazon-web-services - 如何在快照中查找 Elasticsearch 索引?

python - elasticache redis - python - 连接超时

aws-lambda - 来自 Lambda 的 API 网关的无服务器离线自定义错误

amazon-web-services - Amazon EC2 高可用性数据库架构