我有一个简单的AWS CodePipeline,只需几个步骤。
实际上,从几个小时以来,我就尝试使此F *** CodeDeploy工作。
这是不可能的。我不敢相信-.-
因此,我们可以看一下AWS CodeDeploy步骤。错误一定在那里。
我使用CodeBuild尝试了不同的方案。
输出带有artifacts.zip和appspecs.yml以及其他内容。
CodeDeploy说:
Action execution failed
BundleType must be either YAML or JSON
由CodePipeline触发时。
我从CodePipeline-S3-Bucket下载文件,这是CodeDeploy的输入。
它包含所有需要的文件。
我不知道如何告诉管道使用此appspec.yml。
有趣的是,如果我手动部署它,它就可以工作。
因此,CodeDeploy无法找到我认为的appspec.yml。
在这里您可以看到。
但是,如果我考虑一下,这没有任何意义。
因为在此应用程序规范编辑器中,我无法指定要部署的ZIP存档的路径。
有人知道如何完成最后一步吗?
我不敢相信它是如此困难:-D
我能够很容易地设置CodeCommit。
使用buildspec.yml,CodeBuild也非常容易。
现在,由于忽略了appspec.yml或类似的内容,我无法部署...
最佳答案
我也有同样的问题。我花了几天的时间在这上,我认为CouldFormatoin的AWS::CodeDeploy::DeploymentGroup
出了点问题
我在s3://my-backet-for-lambda-deployment/appspec.yaml
中有这个yaml文件:
appspec.yaml
version: 0.0
Resources:
- my-lambda-app-MyLambdaApp-157EXYJT40C0U:
Type: AWS::Lambda::Function
Properties:
Name: arn:aws:lambda:us-east-1:292285124316:function:my-lambda-app-MyLambdaApp-157EXYJT40C0U
Alias: production
CurrentVersion: 8
TargetVersion: 9
appspec.yaml
是正确的,因为我可以使用控制台在S3中手动指定它的位置,并且一切正常。因此,我完全确定appspec.yaml
在这里不是错误的。问题
我使用以下
AWS::CodeDeploy::DeploymentGroup
MyDeploymentGroup:
Type: AWS::CodeDeploy::DeploymentGroup
Properties:
ApplicationName: !Ref MyCodeDeployApp
Deployment:
IgnoreApplicationStopFailures: false
Revision:
RevisionType: S3
S3Location:
Bucket: my-backet-for-lambda-deployment
Key: appspec.yaml
BundleType: YAML
DeploymentConfigName: CodeDeployDefault.LambdaAllAtOnce
DeploymentStyle:
DeploymentOption: WITH_TRAFFIC_CONTROL
DeploymentType: BLUE_GREEN
ServiceRoleArn: !ImportValue MyCodeDeployRoleArn
上面的资源的堆栈创建失败,出现。无法指定属性部署。
解决方法
我找不到完全基于CloudFormatoin的解决方案。因此,我要做的是在不定义
DeploymentGroup
的情况下创建Deployment
,然后使用CLI或boto3开始部署。Resources:
MyCodeDeployApp:
Type: AWS::CodeDeploy::Application
Properties:
ComputePlatform: Lambda
# DeploymentGroup without Deployment property
MyDeploymentGroup:
Type: AWS::CodeDeploy::DeploymentGroup
Properties:
ApplicationName: !Ref MyCodeDeployApp
DeploymentConfigName: CodeDeployDefault.LambdaAllAtOnce
DeploymentStyle:
DeploymentOption: WITH_TRAFFIC_CONTROL
DeploymentType: BLUE_GREEN
ServiceRoleArn: !ImportValue MyCodeDeployRoleArn
Outputs:
CodeDeployAppName:
Value: !Ref MyCodeDeployApp
DeploymentGroupName:
Value: !Ref MyDeploymentGroup
创建堆栈后,我可以使用bash启动部署:
aws deploy create-deployment \
--application-name ${deployment_app_name} \
--deployment-group-name ${deployment_group_name} \
--s3-location bucket=my-backet-for-lambda-deployment,bundleType=YAML,key=appspec.yaml
P.S.
MyCodeDeployRoleArn
角色也是正确的,因此也不是它的错:Resources:
MyCodeDeployServiceRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal: {Service: [codedeploy.amazonaws.com]}
Action: ['sts:AssumeRole']
Description: Role for deploying lambda
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSCodeDeployRoleForLambda
Policies:
- PolicyName: MyS3GetObjectPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- s3:Get*
- s3:List*
Resource: '*'
Outputs:
CodeDeployRoleArn:
Value: !GetAtt MyCodeDeployServiceRole.Arn
Export:
Name: MyCodeDeployRoleArn
关于amazon-web-services - AWS CodeDeploy无法部署Lambda函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51716238/