Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在aws cdk for Python中重写aws_cdk.core.LegacyStackSynthesizer.add_docker_image_资产_Python_Amazon Web Services_Docker_Aws Cdk - Fatal编程技术网

如何在aws cdk for Python中重写aws_cdk.core.LegacyStackSynthesizer.add_docker_image_资产

如何在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时,我得到一个提示,我

我想将docker映像从本地光盘上传到我用AWS CDK创建的存储库中

当我使用
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堆栈中。

希望这有点帮助:-)