[英]How to deploy a CloudFormation stack using CodePipeline when both, the cfn template and the pipeline where created using the AWS CDK?
[英]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'
错误。 由于上述构建/部署步骤在本地工作(在干净的结帐中),我怀疑这可能与从Build
到Deploy
阶段复制工件有关是导致问题的原因,但无法查明是什么。 有什么故障排除建议吗?
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.