我使用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
我把这个添加到“文件”中
然而,我仍然得到一个错误,“binance机器人构建工件不存在”。
以下是更改buildspec.yml后的完整错误:
操作执行失败无效的TemplatePath:binance bot BuildArtifact::模板导出。登台。yml。工件二进制bot BuildArtifact不存在
我觉得很奇怪,我可以在管道的一个阶段而不是另一个阶段访问“binance bot BuildArtifact”。是否构建工件仅可直接用于构建阶段之后的一个管道阶段?有人能帮我访问这个“binance机器人构建工件”吗?谢谢
robrtsql已经就在两个阶段中使用相同的模板提供了一些很好的建议。
您可能会发现此演练很有用。基本上,它描述了添加一个Cloudformation“模板配置”,允许您为Cloudformation堆栈指定参数。
这将允许您在dev和prod环境中部署相同的模板,但也允许您通过在每个阶段选择不同的模板配置来区分dev部署和prod部署。
例如,我应该更改“堆栈名称”,还是应该将其保留为“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 基本解释