【问题标题】:Pushing docker image to the target repository by aws-cdk通过 aws-cdk 将 docker 镜像推送到目标存储库
【发布时间】:2022-01-27 18:36:28
【问题描述】:

我有两个堆栈 CdkVrStackCdkVrDeployStack

CdkVrStack 中,创建了存储库 my-repo-name。

export class CdkVrStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    const repo_ = new ecr.Repository(this, 'TestRepoId', {
      repositoryName: "my-repo-name",
      removalPolicy: RemovalPolicy.DESTROY
    });

然后在CdkVrDeployStack我尝试上传docker镜像

export class CdkVrDeployStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);
    //maybe repositoryName is deprecated, so how can I set the repository which CdkVrStack created
    
    this.synthesizer.addDockerImageAsset({
      directoryName: path.join(__dirname, 'app1'), 
      repositoryName: "my-repo-name", // this is deprecated how can I se the repository?
      sourceHash: "image-tag",
    });
  }
}

我无法编译 CdkVrStack

lib/cdk_vr-deploy-stack.ts:19:7 - error TS2345: Argument of type '{ directoryName: string; repositoryName: string; sourceHash: string; }' is not assignable to parameter of type 'DockerImageAssetSource'.
  Object literal may only specify known properties, and 'repositoryName' does not exist in type 'DockerImageAssetSource'.

19       repositoryName: "my-repo-name", 
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[0:39:30] 发现 1 个错误。监视文件更改。


我在一个堆栈中测试了这段代码,来自这个document

const repo_ = new ecr.Repository(this, 'TestRepoId', {
  repositoryName: "my-repo-name",
  removalPolicy: RemovalPolicy.DESTROY
});

new DockerImageAsset(this,'mydockerimageassets',{
  directory: path.join(__dirname, '../docker-lambda'),
  repository:repo_
});

但是,会出现错误

lib/cdk_vr-base-stack.ts:63:7 - error TS2345: Argument of type '{ directory: string; repository: ecr.Repository; }' is not assignable to parameter of type 'DockerImageAssetProps'.
  Object literal may only specify known properties, and 'repository' does not exist in type 'DockerImageAssetProps'.

63       repository:repo_
         ~~~~~~~~~~~~~~~~

repositoryDockerImageAsset 的属性,我哪里错了?

【问题讨论】:

  • 我没有看到问题或问题陈述。什么不工作?您需要什么帮助?
  • 这不是 Python,所以我删除了标签。请添加正确的语言标签
  • 资产被上传到资产 ECR 仓库,所有栈都是一样的。它是作为引导的一部分创建的。
  • @MarkB 我更新了文章。
  • @OneCricketeer 谢谢。我错误地附加了python

标签: typescript docker amazon-ecs aws-cdk


【解决方案1】:

我用https://github.com/cdklabs/cdk-ecr-deployment

我可以使用此代码制作存储库并推送图像。

import * as ecrdeploy from 'cdk-ecr-deployment';

    
const repo_ = new ecr.Repository(this, 'TestRepoId', {
  repositoryName: "my-repo-name",
  removalPolicy: RemovalPolicy.DESTROY
});

const image_ = new DockerImageAsset(this,'mydockerimageassets',{
  directory: path.join(__dirname, '../docker-lambda'),
  
});
new ecrdeploy.ECRDeployment(this, 'DeployDockerImage', {
  src: new ecrdeploy.DockerImageName(image_.imageUri),
  dest: new ecrdeploy.DockerImageName(`${repo_.repositoryUri}:latest`),
});

【讨论】:

  • 仅供参考,您仍在上传到资产 ECR 存储库,然后将其复制到您自己的存储库。
猜你喜欢
  • 1970-01-01
  • 2016-09-29
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2021-07-27
  • 1970-01-01
相关资源
最近更新 更多