我们目前有“基本图像”,我们的下游容器从,我们正在升级过程中,从定制的CDK管道到简单的CDK管道使用aws-cdk-lib/aws-ecr-assets。我们通过使用SSM共享这些基本映像的URI来做到这一点,因为它们位于不同的项目&堆栈中。
我一直试图通过将SSM导入下游堆栈并将URI作为Buildarg传递来实现这一点,但我遇到了“不能在"buildArgs”的键或值中使用令牌,因为它们在部署前是必需的“,而按照#3981的要求,这些令牌与预期的一样。
这让我觉得我做错了,但我不知道实现这一目标的最佳实践是什么?我正在通过硬编码存储在SSM中的URL来解决这个问题,显然我可以预取它并在运行时传递它,但是这看起来很笨拙。
我试图实现的架构是这样的:
上游堆栈:
const pythonDocker = new DockerImageAsset(this, 'python-3-base-image', {
directory: join(thisDirectoryInSrc, '/python-3'),
ignoreMode: IgnoreMode.DOCKER,
});
new StringParameter(this, 'python3-ecr-arn-ssm', {
stringValue: pythonDocker.imageUri,
description: 'Python 3 image repository URI',
parameterName: '/docker-images/python-3/image-uri',
});下游堆叠:
const baseImage = StringParameter.fromStringParameterName(this, 'python-3-base-image', '/docker-images/python-3/image-uri');
const feedReaderDocker = ContainerImage.fromAsset('src/feed-reader', {
ignoreMode: IgnoreMode.DOCKER,
buildArgs: {
BASE_IMAGE: baseImage.stringValue
},
});下游Dockerfile:
ARG BASE_IMAGE
FROM BASE_IMAGE
# Install dependencies, declare entry point, etc发布于 2022-05-12 13:24:56
TL;博士使用上下文。StringParameter.valueFromLookup“上下文方法”可以在同步时检索和缓存以前部署的参数值。
正如您所经历的,StringParameter.fromStringParameterName在部署时解析。但是ContainerImage.fromAsset需要同步时解析的基本图像值.CDK为这个用例提供了运行时上下文:
AWS CDK支持几种上下文方法,使AWS CDK应用程序能够从AWS环境中获取上下文信息.如果一个必需的上下文值不可用,AWS应用程序会通知CDK上下文信息丢失。然后,CLI查询当前AWS帐户中的信息,将结果上下文信息存储在cdk.context.json文件中。
StringParameter.valueFromLookup就是这样一种“上下文方法”。下面是一个比较这两种方法的synth-time值的示例:
const paramName = '/cdk-bootstrap/hnb659fds/version';
const fromName: ssm.IStringParameter = ssm.StringParameter.fromStringParameterName(this, 'FromName', paramName);
const fromLookup: string = ssm.StringParameter.valueFromLookup(this, paramName);
console.dir({ fromName: fromName.stringValue, fromLookup });
// -> { fromName: '${Token[TOKEN.196]}', fromLookup: '12' }valueFromLookup使用SDK调用一次获取值,并将其缓存在cdk.context.json中。CDK建议您提交此文件以坚持确定性部署最佳实践。
https://stackoverflow.com/questions/72208583
复制相似问题