amazon-web-services - CDK 管道在阶段访问资产
问题描述
我正在使用pipelines
aws-cdk 中的新模块来构建一个多帐户代码管道,将 Spring Boot 应用程序部署到 beanstalk。
我按照本教程实现了我自己的Cdk.Stage
.
这个阶段类创建一个新的后端堆栈:
export class BackendStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, artifact: Artifact, props?: cdk.StackProps) {
super(scope, id, props);
const image = new DockerImageAsset(this, 'backend-image', {
directory: path.join(__dirname, '..', '..', '..', 'backend'),
buildArgs: {
'JAR_FILE': './target/app.jar'
},
})
const dockerRunFile = {
"AWSEBDockerrunVersion": "1",
"Ports": [
{
"ContainerPort": 8080,
"HostPort": 8080
}
],
"Image": {
"Name": image.imageUri
}
}
fs.writeFileSync(path.join(__dirname, 'Dockerrun.aws.json'), JSON.stringify(dockerRunFile));
const versionAsset = new Asset(this, 'version-asset', {
path: path.join(__dirname, 'Dockerrun.aws.json')
})
const appVersionProps = new CfnApplicationVersion(this, 'backend-app-version', {
applicationName: appName,
sourceBundle: {
s3Bucket: versionAsset.bucket.bucketName,
s3Key: versionAsset.s3ObjectKey
}
});
}
...
}
不幸的是 image.imageUri 解析为Token[TOKEN.219]
而不是正确的图像 URI。我认为这与 Cloudformation 令牌的解析有关。在我看来,我必须推迟创建,Dockerrun.aws.json
但我不知道如何实现。
有没有其他方法可以将Dockerrun.aws.json
文件等资产传递到后端堆栈?
我需要它来正确部署 beanstalk 应用程序。
解决方案
正如您正确指出的那样,令牌的解析发生在 CloudFormation 内部,因此您无法将其写入文件。有没有办法不使用真实文件,而是在 CFN 中提供 sourceBundle 内联?然后 CDK 将在您的模板中生成正确的 GetAtt 以引用上传的文件。
但是请确保您激活了 newStyle 合成器,这样当它使用硬编码字符串而不是参数时它可能会起作用。为此,您需要新的引导程序。
请注意,这一切还不是 GA。
推荐阅读
- php - 不在,在声明中不起作用(预订)
- c# - 如何通过 c# 为 Web API 调用者调用 signalR 函数
- c# - VS2017 + Resharper 如何在输入打开引号时用引号包围选择?
- azure - Web 应用程序未验证自定义域名
- android - 颤振路线。移动应用程序开发
- spring-boot - Spring Data MongoRepository 保存导致重复键错误
- angularjs - 我如何在angularjs中从aws s3压缩和下载完整文件夹
- javascript - 如何一键切换音频播放/暂停
- java - [无法将类型“java.lang.String”的属性值转换为所需类型“java.sql.Time”
- python - Pandas-Python 日期范围