如何在aws cdk for Python中重写aws_cdk.core.LegacyStackSynthesizer.add_docker_image_资产
我想将docker映像从本地光盘上传到我用AWS CDK创建的存储库中 当我使用如何在aws cdk for Python中重写aws_cdk.core.LegacyStackSynthesizer.add_docker_image_资产,python,amazon-web-services,docker,aws-cdk,Python,Amazon Web Services,Docker,Aws Cdk,我想将docker映像从本地光盘上传到我用AWS CDK创建的存储库中 当我使用aws_ecr_assets.DockerImageAsset将Docker映像添加到存储库时(除了我无法通过CDK设置其存储库的权限外,该操作正常),我会收到以下弃用警告: DockerImageAsset.repositoryName已弃用。覆盖“core.Stack.addDockerImageAsset”以控制资产位置 当查看core.Stack.addDockerImageAsset时,我得到一个提示,我
aws_ecr_assets.DockerImageAsset
将Docker映像添加到存储库时(除了我无法通过CDK设置其存储库的权限外,该操作正常),我会收到以下弃用警告:
DockerImageAsset.repositoryName已弃用。覆盖“core.Stack.addDockerImageAsset”以控制资产位置
当查看core.Stack.addDockerImageAsset
时,我得到一个提示,我应该重写Stack.synthesizer.addDockerImageAsset()
我的带有自定义合成器的简化堆栈如下所示:
类自定义合成器(core.LegacyStackSynthesizer):
定义初始化(self,*args,**kwargs):
super()
def添加_docker_image_资源(
自己
*,
目录名,
来源(u hash),
docker\u build\u args=无,
docker\u build\u target=无,
docker_文件=无,
存储库名称=无,
):
#要将docker映像上载到我的存储库中,我应该在该函数中添加什么内容?
类别ContainerStack(core.Stack):
def uuu init uuuu(self,作用域:core.Construct,id:str,**kwargs)->无:
super()
repo=ecr.Repository(self,“TestRepo”,Repository\u name=“test\u repo”)
回购授予(iam.AccountPrincipal(“123456789123”))
image\u location=self.synthesizer.add\u docker\u image\u资产(
directory_name=“path/to/dir/with/Dockerfile”,
source_hash=“latest”,
repository\u name=repo.repository\u name,
)
我尝试的另一件事是使用标准堆栈合成器并在其上调用add\u docker\u image\u asset
。不幸的是,我收到以下错误消息,堆栈无法部署:
test-stack: deploying...
[0%] start: Publishing latest:current
[25%] fail: Unable to execute 'docker' in order to build a container asset. Please install 'docker' and try again.
...
❌ test-stack failed: Error: Failed to publish one or more assets. See the error messages above for more information.
at Object.publishAssets (/home/user/.npm-global/lib/node_modules/aws-cdk/lib/util/asset-publishing.ts:25:11)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at Object.deployStack (/home/user/.npm-global/lib/node_modules/aws-cdk/lib/api/deploy-stack.ts:216:3)
at CdkToolkit.deploy (/home/user/.npm-global/lib/node_modules/aws-cdk/lib/cdk-toolkit.ts:181:24)
at main (/home/user/.npm-global/lib/node_modules/aws-cdk/bin/cdk.ts:268:16)
at initCommandLine (/home/user/.npm-global/lib/node_modules/aws-cdk/bin/cdk.ts:188:9)
Failed to publish one or more assets. See the error messages above for more information.
对于如何解决这个问题,我完全没有办法,非常感谢您的帮助
DockerImageAsset
是一个托管构造,它自己处理存储库和版本控制。默认情况下,它会为堆栈创建一个存储库,并将docker图像上传到其中(通过散列标记它们)
您不需要自己创建此存储库。但是,如果您和我一样,希望存储库的名称清晰易读,可以使用cdk.json
config文件及其context
部分为repo命名:
//cdk.json
{
“应用程序”:“蟒蛇3你的应用程序”,
“背景”:{
“@aws cdk/core:enableStackNameDuplicates”:“true”,
“aws cdk:enableDiffNoFail”:“true”,
“资产ecr存储库名称”:”
}
}
如果您想进一步修改repo(我想让它完全处于管理状态,但是嘿),您可以使用aws_ecr.Repository
构造上的一个静态方法将repo加载到CDK堆栈中。
希望这有点帮助:-)