首页 > 解决方案 > CDK 管道在阶段访问资产

问题描述

我正在使用pipelinesaws-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 应用程序。

标签: amazon-web-servicesaws-codepipelineaws-cdk

解决方案


正如您正确指出的那样,令牌的解析发生在 CloudFormation 内部,因此您无法将其写入文件。有没有办法不使用真实文件,而是在 CFN 中提供 sourceBundle 内联?然后 CDK 将在您的模板中生成正确的 GetAtt 以引用上传的文件。

但是请确保您激活了 newStyle 合成器,这样当它使用硬编码字符串而不是参数时它可能会起作用。为此,您需要新的引导程序。

请注意,这一切还不是 GA。


推荐阅读