首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DockerImageAsset -如何在下游图像中使用已发布的ECR图像?

DockerImageAsset -如何在下游图像中使用已发布的ECR图像?
EN

Stack Overflow用户
提问于 2022-05-11 23:23:37
回答 1查看 1.1K关注 0票数 0

我们目前有“基本图像”,我们的下游容器从,我们正在升级过程中,从定制的CDK管道到简单的CDK管道使用aws-cdk-lib/aws-ecr-assets。我们通过使用SSM共享这些基本映像的URI来做到这一点,因为它们位于不同的项目&堆栈中。

我一直试图通过将SSM导入下游堆栈并将URI作为Buildarg传递来实现这一点,但我遇到了“不能在"buildArgs”的键或值中使用令牌,因为它们在部署前是必需的“,而按照#3981的要求,这些令牌与预期的一样。

这让我觉得我做错了,但我不知道实现这一目标的最佳实践是什么?我正在通过硬编码存储在SSM中的URL来解决这个问题,显然我可以预取它并在运行时传递它,但是这看起来很笨拙。

我试图实现的架构是这样的:

上游堆栈:

代码语言:javascript
复制
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',
});

下游堆叠:

代码语言:javascript
复制
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:

代码语言:javascript
复制
ARG BASE_IMAGE
FROM BASE_IMAGE

# Install dependencies, declare entry point, etc
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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值的示例:

代码语言:javascript
复制
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建议您提交此文件以坚持确定性部署最佳实践

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72208583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档