0

我有一个非常简单的 Jenkins 工作,它构建然后将 step 函数部署到 AWS。我已经能够使用 SAM cli 从我的桌面构建和部署没有问题。但是,当我设置 jenkins 执行此操作时,我收到以下错误:

错误:构建步骤失败,出现异常 com.amazonaws.waiters.WaiterUnrecoverableException:资源在失败时从未进入所需状态。

堆栈在 AWS 中创建并保留在 REVIEW_IN_PROGRESS 中。我假设“服务员”正在等待堆栈进入另一个状态。我发现了这个,但它并没有太大帮助。

通过 SAM CLI,我可以很好地打包和部署

sam package --output-template-file packaged.yaml --s3-bucket thebucketofjesse
sam deploy --template-file packaged.yaml --stack-name jesse-stack-6 --capabilities CAPABILITY_IAM --region us-west-1

编辑

我想我可能已经发现了这个问题的原因。我停止使用 SAM 插件,而是创建了一个批处理脚本来手动运行 SAM 命令。除了出于某种原因'sam package'没有将S3 uri添加到yaml模板输出之外,一切正常。因此,当它运行“sam deploy”时,它会查看输出模板并期望 S3 uri。然后它失败并让堆栈处于 REVIEW_IN_PROGRESS 状态。

当我在 cli 中手动运行上述命令时,它会将我的 state-machine.yaml 文件上传到 S3,生成的 packaged.yaml cloudformation 模板将具有 S3 uri。

模板.yaml

模板.yaml

打包的.yaml 打包的.yaml

当我在 jenkins 中运行 sam 命令时,S3 uri 不在 packaged.yaml 中

4

1 回答 1

0

我想到了。所以 sam package 命令似乎有问题。

在我的template.yaml文件中,我在一个名为 state-machine.yaml 的外部文件中指定了我的 step 函数的定义(如果你不知道该怎么做,请点击此处)。在 template.yaml 文件中,它看起来像这样

Resources:
  ClosedCaptionStateMachine:
    Type: AWS::StepFunctions::StateMachine
    Properties:
      RoleArn:
        Fn::GetAtt:
        - ClosedCaptionStateMachineRole
        - Arn
      Fn::Transform:
        Name: AWS::Include
        Parameters:            
          Location: 'state-machine.yaml'

当我运行sam package时,它应该将state-machine.yaml文件上传到 S3 存储桶,然后将 S3 uri 插入到我命名为packaged.yaml的结果 yaml 输出文件中。看起来像这样

Resources:
  ClosedCaptionStateMachine:
    Type: AWS::StepFunctions::StateMachine
    Properties:
      RoleArn:
        Fn::GetAtt:
        - ClosedCaptionStateMachineRole
        - Arn
      Fn::Transform:
        Name: AWS::Include
        Parameters:
          Location: s3://thebucketofjesse/ba638c2815c6a4d4ad93c5bb5e3c4f32

但是,由于某种原因,它没有将 S3 uri 放入packaged.yaml中。相反,它将其保留为state-machine.yaml。因此,当我运行sam deploy它时,它会寻找 S3 uri 但找不到它。

那么解决方法是什么?

好吧,我纯粹是偶然发现,如果您从template.yamlsam package所在的目录之外运行并使用完整路径,它不会将 S3 uri 放入packaged.yaml。因此,您必须从template.yaml所在的目录运行并使用相对路径。sam package

于 2019-04-24T19:10:20.597 回答