【问题标题】:CDK pipelines accessing assets in stageCDK 管道在阶段访问资产
【发布时间】:2021-01-08 14:46:53
【问题描述】:

我正在使用 aws-cdk 中的新 pipelines 模块来构建多帐户代码管道,将 Spring Boot 应用程序部署到 beanstalk。
我遵循了这个tutorial 并实现了我自己的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-services aws-codepipeline aws-cdk


    【解决方案1】:

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

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

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

    【讨论】:

    • 您介意通过内联 sourceBundle 来解释您的意思吗?我可以将:CfnApplicationVersion.SourceBundleProperty | cdk.IResolvable 传递给 sourceBundle 属性?
    • 我希望能够将代码内联而不是指向 S3,但根据文档这是不可能的。您绝对应该尝试新的合成器,看看是否有帮助。
    猜你喜欢
    • 2016-08-15
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2016-02-09
    相关资源
    最近更新 更多