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

AWS CDK在代码管道/代码构建中部署

姚骁
2023-03-14

我正在尝试使用代码构建操作在AWS代码管道上部署AWS CDK应用程序

构建和部署在本地完美工作(因为它会!)但是在CodeBuild上运行时,cdk命令失败

Cannot find module './index'
Subprocess exited with error 1

这很可能是一些琐碎的事情,但我却在挠头,想弄明白是什么!

项目结构是自动生成的(使用cdk init--Language typecript

<>/cdk$ ls
README.md  app  cdk.context.json  cdk.json  cdk.out  jest.config.js  lib  node_modules  package.json  test  tsconfig.json  yarn.lock

buildspec。yml对于构建阶段是

phases:
  build:
    commands:
      - cd ${CODEBUILD_SRC_DIR}/cdk
      - yarn install
      - yarn build
artifacts:
  base-directory: ${CODEBUILD_SRC_DIR}/cdk
  files:
    - '**/*'

buildspec。Deploy阶段的yml是(此阶段的输入目录是Build阶段的工件,即cdk目录)

phases:
  install:
    commands:
      - npm install -g aws-cdk
      - cdk --version

  build:
    commands:
      - cd ${CODEBUILD_SRC_DIR} # this is cdk directory
      - cdk ls
      - cdk deploy app

Deploy阶段抛出找不到模块”/索引“cdk ls步骤中的错误。由于上面的构建/部署步骤在本地工作(在干净的签出中),我怀疑这可能与将工件从build复制到deploy阶段有关,这是导致问题的原因,但无法确定是什么。对故障排除有什么建议吗?

共有3个答案

华欣荣
2023-03-14

我有同样的问题,并通过在我的buildspec.yml中传递enable-symlink: yes来解决它

artifacts:
  enable-symlinks: yes
王兴腾
2023-03-14

你有cdk中的Lambda代码吗?您是否可以检查所使用的处理程序,以及它是否存在于该路径中,例如。

import * as lambda from '@aws-cdk/aws-lambda';
import * as path from 'path';

const fn = new lambda.Function(this, 'MyFunction', {
  runtime: lambda.Runtime.NODEJS_10_X,
  handler: 'dist/index.handler',  <======= Check index.js file is inside dist directory
  code: lambda.Code.fromAsset(path.join(__dirname, 'lambda-handler')),
});
充阳秋
2023-03-14

CodeBuild有一个已知的问题,它在创建工件时会断开所有符号链接=

错误找不到模块'/索引“是因为您的cdk。json有一个命令用于使用ts node以及当cdk试图从node modules/运行它时。bin/ts节点链接已断开。

为了做您想要做的事情,我建议您自己在构建工作中压缩代码。比如:

      - yarn build
      - tar -czf /tmp/mycode.tar.gz .
artifacts:
  files:
    - 'mycode.tar.gz'
  discard-paths: true
  base-directory: '/tmp'

并对部署作业进行解压缩:

...
      - cd ${CODEBUILD_SRC_DIR} # this is cdk directory
      - tar -zxvf mycode.tar.gz
      - cdk ls
      - cdk deploy app
 类似资料:
  • 我想为我的AWS基础设施和AWS Lambda函数设置一个CI/CD管道。我们的想法是让一切都在代码中,版本控制和自动化。我只想

  • Your browser does not support the video tag.

  • 基本上,我需要配置CI/CD与比特桶源代码到ECS容器。我想使用CodePipline部署新的ECR映像到ECS。 目前,AWS CodePipline中没有将bitbucket指定为源的选项。然而,我已经设法用webhooks配置了CodeBuild,这样它就可以构建docker文件,并在每次推送发布分支时将其推送到ECR。 我想将ECR配置为CodePipline中的“源”阶段,并将其部署到现

  • 14. 构建代码 Spring Boot并不要求任何特殊的代码布局,然而,存在一些有用的最佳实践。 14.1 使用“default”包 如果一个类没有声明包,则认为这个类位于“默认包”中。通常不鼓励使用“默认包”,应当避免使用它。对于使用了@ComponentScan、@EntityScan或@SpringBootApplication注解的Spring Boot程序,“默认包”可能会导致特殊问题

  • 我正在使用代码管道部署云形成模板。问题是这个Cloud形成模板有一些嵌套堆栈。嵌套堆栈模板需要在S3存储桶中。所以在触发主(父)CF模板之前,我需要将CF嵌套堆栈上传到S3。 我没有找到使用代码管道实现这一点的方法。 有什么建议吗?

  • 我想建立一个coDepipeline,它将从github获取代码(java)构建一个jar文件并将其部署到aws lamda(或将jar存储在特定的S3桶中)。我只想使用AWS平台提供的工具。 如果我只使用Codebuild,我就能够从github代码构建jar并将其存储到S3(https://docs.aws.amazon.com/codebuild/latest/userguide/getti