繁体   English   中英

AWS CDK 部署在 CodePipeline/CodeBuild

[英]AWS CDK deploy in CodePipeline/CodeBuild

我正在尝试使用 CodeBuild 操作在 AWS CodePipeline 上部署 AWS CDK 应用程序。

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

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

这很可能是微不足道的事情,但我想弄清楚是什么!

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

<>/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

Build阶段的buildspec.yml

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

Deploy阶段的buildspec.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步骤中引发Cannot find module './index'错误。 由于上述构建/部署步骤在本地工作(在干净的结帐中),我怀疑这可能与从BuildDeploy阶段复制工件有关是导致问题的原因,但无法查明是什么。 有什么故障排除建议吗?

CodeBuild 存在一个已知问题,它在创建工件时会破坏所有符号链接 => https://forums.aws.amazon.com/thread.jspa?threadID=245780

错误Cannot find module './index'是因为您的cdk.json具有使用ts-node的命令,并且当 cdk 尝试从node-modules/.bin/ts-node运行它时,链接已断开。

为了做你想做的事,我建议你在构建工作中自己压缩代码。 就像是:

      - 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

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')),
});

我遇到了同样的问题并通过传入enable-symlinks: yes在我的 buildspec.yml 中解决了它

artifacts:
  enable-symlinks: yes

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM