使用 CDK 将种子代码存储在 S3 中初始化 CodeCommit 存储库

Init CodeCommit repository with seed-code stored in S3 using CDK

我正在尝试将 MLOps template for model building, training, and deployment CloudFormation 模板转换为 CDK 项目,这样我就可以轻松更新定义、合成模板并将其上传到 CloudCatalog 以便在 SageMaker Studio.

中用作项目模板

虽然我对 CDK 很陌生,但我在尝试使用存储在 S3,原模板中是这样实现的:

  'ModelBuildCodeCommitRepository':
    'Type': 'AWS::CodeCommit::Repository'
    'Properties':
      'RepositoryName':
        'Fn::Sub': 'sagemaker-${SageMakerProjectName}-${SageMakerProjectId}-modelbuild'
      'RepositoryDescription':
        'Fn::Sub': 'SageMaker Model building workflow infrastructure as code for the
          Project ${SageMakerProjectName}'
      'Code':
        'S3':
          'Bucket': 'sagemaker-servicecatalog-seedcode-sa-east-1'
          'Key': 'toolchain/model-building-workflow-v1.0.zip'
        'BranchName': 'main'

CDK API 文档确实将 codecommit.Repository 中的 code 参数作为初始化选项,但它仅适用于压缩并上传到 的本地文件S3 等等。那是因为它假定部署了 CDK 项目,但我只想要 cdk synth.

生成的模板

当然,我总是可以使用 codecommit.CfnRepository and its code parameter to point into S3, but then I cannot insert it in the codepipeline's stage codepipeline_actions.CodeCommitSourceActionrepository 参数,因为它需要一个 IRepository 对象。

我也想坚持aws-cdk-lib.aws_codepipeline掌握CloudPipeline的基本逻辑(我也是新手),避免使用高层aws-cdk-lib.pipelines.

关于如何完成此操作的任何想法?

构建一个没有 Code 道具的 Repository。获取对其 L1 CfnRepository 层的 escape hatch 引用。将 CfnRepository 的 属性 手动设置为现有的 S3 存储桶:

const repo = new codecommit.Repository(this, 'Repo', { repositoryName: 'my-great-repo' });
const cfnRepo = repo.node.defaultChild as codecommit.CfnRepository;

cfnRepo.addPropertyOverride('Code', {
  S3: {
    Bucket: 'sagemaker-servicecatalog-seedcode-sa-east-1',
    Key: 'toolchain/model-building-workflow-v1.0.zip',
  },
  BranchName: 'main',
});

以上代码将在 OP 中合成 YAML 输出。将 repo 作为管道的源操作传递。

不要忘记在 S3 存储桶上授予必要的 IAM 权限。