当前位置: 首页 > 知识库问答 >
问题:

在CodeStar和CodePipeline中为AWS Lambda服务创建环境的问题

暴向笛
2023-03-14

我使用AWS CodeStar创建了一个带有“Express.js AWS Lambda Webservice”CodeStar模板的新应用程序。这很好,因为它使用AWS CodePipeline为我设置了一个简单的CI/CD管道。默认情况下,管道有3个步骤用于从git repo获取源代码、运行构建步骤,然后部署到“dev”环境。

我的问题是,我无法将其设置为使我的管道具有多个环境:dev、staging和prod。

我当前的部署步骤有2个操作:GenerateChangeSet和ExecuteChangeSet。以下是原始开发环境构建步骤中操作的配置,这些配置非常有效:

我在管道的末尾创建了一个新的部署阶段来部署到阶段,但老实说,我不确定如何更改配置。我在想,最终我希望能够进入AWS控制台的AWS Lambda部分,看到三个独立的lambda函数:binance-bot-dev、binance-bot-分期、binance-bot-prod。然后,我可以将其中的每一个设置为云观察计划事件,或者使用它们自己的api网关url进行公开。

这是我尝试用于新部署阶段的配置:

我真的不确定这个配置是否正确,以及为了以我想要的方式部署,我应该更改什么。

例如,我应该更改“堆栈名称”,还是应该将其保留为“awscodestar binance bot lambda”,或者像我现在这样为每个环境更改它?

另外,我指向另一个模板。项目中的yml文件。原始模板。yml看起来像这样:

AWSTemplateFormatVersion: 2010-09-09
Transform:
- AWS::Serverless-2016-10-31
- AWS::CodeStar

Parameters:
  ProjectId:
    Type: String
    Description: AWS CodeStar projectID used to associate new resources to team members

Resources:
  Dev:
    Type: AWS::Serverless::Function
    Properties:
      Handler: index.handler
      Runtime: nodejs4.3
      Environment:
        Variables:
          NODE_ENV: dev
      Role:
        Fn::ImportValue:
          !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
      Events:
        GetEvent:
          Type: Api
          Properties:
            Path: /
            Method: get
        PostEvent:
          Type: Api
          Properties:
            Path: /
            Method: post

用于模板。登台。yml我使用完全相同的配置,只是在“资源”下将“Dev:”更改为“Staging:”,并且还更改了NODE_ENV环境变量的值。所以,我基本上想知道这是我想要实现的正确配置吗?

假设配置中的所有内容都是正确的,那么我需要对该错误进行故障排除。如上所述设置好所有内容后,我可以运行管道,但当它进入暂存构建步骤时,GenerateCharge_暂存操作将失败,并显示以下错误消息:

操作执行失败用户:arn:aws:sts::954459734159:假定角色/CodeStarWorker binance bot CodePipeline/1524253307698无权执行:cloudformation:在资源上描述堆栈:arn:aws:cloudformation:us-east-1:954459734159:堆栈/awscodestar binance bot lambda staging/*(服务:AmazonCloudFormation;状态代码:403;错误代码:AccessDenied;请求ID:dd801664-44d2-11e8-a2de-8fa6c42cbf86)

在我看来,从这个错误消息中,我需要为我的“CodeStarWorker binance bot CodePipeline”添加“cloudformation:DescribeCacks”,所以我转到IAM-

如果有人能指出我做错了什么,或者在理解和思考如何使用AWS CodePipeline实现多个环境方面提供指导,那就太好了。谢谢

更新:

我将Deploy_To_Staging pipeline阶段中的“Stack name”改回“awscodestar binance bot lambda”。但是,我随后从GenerateChange_暂存操作中得到此错误:

操作执行失败无效的TemplatePath:binance bot BuildArtifact::模板导出。登台。yml。工件二进制bot BuildArtifact不存在

更新2:在我的项目的根目录中,我有buildspec。由CodeStar生成的yml文件。看起来是这样的:

version: 0.2

phases:
  install:
    commands:
      # Install dependencies needed for running tests
      - npm install

      # Upgrade AWS CLI to the latest version
      - pip install --upgrade awscli
  pre_build:
    commands:
      # Discover and run unit tests in the 'tests' directory
      - npm test
  build:
    commands:
      # Use AWS SAM to package the application using AWS CloudFormation
      - aws cloudformation package --template template.yml --s3-bucket $S3_BUCKET --output-template template-export.yml
      - aws cloudformation package --template template.staging.yml --s3-bucket $S3_BUCKET --output-template template-export.staging.yml
      - aws cloudformation package --template template.prod.yml --s3-bucket $S3_BUCKET --output-template template-export.prod.yml
artifacts:
  type: zip
  files:
    - template-export.yml

然后我将其添加到CloudFormation部分:

然后我将此添加到“构建:-

  - aws cloudformation package --template template.staging.yml --s3-bucket $S3_BUCKET --output-template template-export.staging.yml
  - aws cloudformation package --template template.prod.yml --s3-bucket $S3_BUCKET --output-template template-export.prod.yml

我把这个添加到“文件”中

  • 模板导出。登台。yml
  • 模板导出。prod.yml

然而,我仍然得到一个错误,“binance机器人构建工件不存在”。

以下是更改buildspec.yml后的完整错误:

操作执行失败无效的TemplatePath:binance bot BuildArtifact::模板导出。登台。yml。工件二进制bot BuildArtifact不存在

我觉得很奇怪,我可以在管道的一个阶段而不是另一个阶段访问“binance bot BuildArtifact”。是否构建工件仅可直接用于构建阶段之后的一个管道阶段?有人能帮我访问这个“binance机器人构建工件”吗?谢谢

共有2个答案

白学
2023-03-14

robrtsql已经就在两个阶段中使用相同的模板提供了一些很好的建议。

您可能会发现此演练很有用。基本上,它描述了添加一个Cloudformation“模板配置”,允许您为Cloudformation堆栈指定参数

这将允许您在dev和prod环境中部署相同的模板,但也允许您通过在每个阶段选择不同的模板配置来区分dev部署和prod部署。

顾靖
2023-03-14

例如,我应该更改“堆栈名称”,还是应该将其保留为“awscodestar binance bot lambda”,或者像我现在这样为每个环境更改它?

您应该为每个环境使用唯一的堆栈名称。如果您没有这样做,您将用“登台”环境替换“开发”环境,等等。

所以,我基本上想知道这是我想要实现的正确配置吗?

我不这么认为。您应该为每个环境使用完全相同的模板。要更改每个部署的环境名称,可以使用“参数覆盖”字段为“环境”参数选择正确的值。

看起来这个角色已经拥有“描述堆栈”的权限!

这里的问题是否是您的IAM角色仅具有开发堆栈的描述堆栈权限?它似乎没有描述暂存堆栈的权限。也许您可以向策略添加通配符/星号,以便它与您所有的堆栈名称相匹配?

是否构建工件仅可直接用于构建阶段之后的一个管道阶段?

不,这不是我使用代码管道的经验。不幸的是,我不知道为什么它告诉你你的神器找不到了。

 类似资料:
  • 我正在创建一个kubernetes集群,其中有几个服务。我知道基于https://github.com/googleCloudplatform/kubernetes/blob/master/docs/services.md#discovering-services我有两个选项。 > 使用Kubelet设置的环境变量。 使用skydns 在将另一个依赖项添加到组合中之前,我想先尝试使用环境变量。但是

  • 我是亚马逊的初学者。最近,我在亚马逊弹性豆茎服务上上传了我的四个不同的Web应用程序和Web服务。 我的问题是:当我在弹性 Beanstalk 上使用 AWS .NET 工具包发布我的 Web 应用程序时,它会为每个应用程序创建一个新环境,并为每个环境创建一个新的 EC2 实例。 任何人都可以告诉,这是亚马逊Windows服务器实例的EC2实例吗?我们是否可以在同一环境和同一 EC2 实例中部署多

  • 本文向大家介绍使用docker创建集成服务lnmp环境,包括了使用docker创建集成服务lnmp环境的使用技巧和注意事项,需要的朋友参考一下 在掌握了docker的基本命令之后,我也是想着去用docker做一点实际的配套环境,就拿自己最常用的lnmp环境来做测试。配套环境运行的顺序依次是mysql->php->nginx,至于为什么,在下面会解释。 1.MySQL 之后服务运行的镜像如无特别的提

  • 本文向大家介绍在Windows和Linux中创建Python虚拟环境,包括了在Windows和Linux中创建Python虚拟环境的使用技巧和注意事项,需要的朋友参考一下 虚拟环境用于更有效地管理我们的Python项目。每个项目都有一个专用的环境,以获得更好的结果和将来的更新。例如,我们有一个使用Django2.1的项目,另一个使用Django2.2的项目。现在,在这种情况下,我们可以将虚拟环境用

  • 问题内容: 我可以使用以下程序创建新的conda环境: 如果我不想安装任何程序怎么办?看来我做不到: 问题答案: 您可以使用仅“ python”的软件包名称来获得基本的空安装。

  • 我在PyCharm中创建虚拟环境时遇到问题。确切地说,3.10版中的Python是在安装过程中添加到Path的,我使用的是最新版本的PyCharm社区。 有人有类似的问题吗? 添加信息 我如何创建环境: > 文件- 位置:D:\mm\projekty\pythonProject2 标记新的虚拟环境使用(虚拟环境) 位置:D:\mm\projekty\pythonProject2\venv 基本解释