【问题标题】:AWS CDK PatchBaseline - TypeScriptAWS CDK PatchBaseline - TypeScript
【发布时间】:2021-07-19 12:48:27
【问题描述】:

我正在使用 AWS CDK、库 @aws-cdk/aws-ssm 和 TypeScript 来创建 PatchBaseline。我可以创建补丁基线,但我无法定义任何批准规则。我发现Alex Nelson 使用RuleProperty 创建approvalRules 作为对象的类似线程,他在Python 中执行此操作,但我无法在TypeScript 中复制此过程。出于某种原因,我不能像 Alex 在 Python 中那样在 TypeScript 中使用 RuleProperty,更多内容请参见 post

这行代码给了我一个错误,即“typeof CfnPatchBaseline”类型上不存在属性“RuleProperty”。

const patch_baseline_rule = new ssm.CfnPatchBaseline.RuleProperty();

我花了几个小时浏览 CDK 文档,但没有发现任何与我的问题相关的有用信息。对于RuleGroupProperty,文档根本没有提供任何示例。

我的问题是,如何在 TypeScript 中键入以下代码(Python)?

patch_baseline_rule = ssm.CfnPatchBaseline.RuleProperty(approve_after_days=0,
                                                        compliance_level='CRITICAL',
                                                        enable_non_security=True,
                                                        patch_filter_group=patch_baseline_patch_filter_group
                                                        )

patch_baseline_rule_group = ssm.CfnPatchBaseline.RuleGroupProperty(patch_rules=[patch_baseline_rule])

patch_baseline = ssm.CfnPatchBaseline(self, 'rPatchBaseline',
                                      name=f'TestPatchBaseline_Linux',
                                      description='TestPatchBaseline for Linux updates, Amazon_Linux_2 distr.',
                                      operating_system='AMAZON_LINUX_2',
                                      approved_patches_enable_non_security=True,
                                      patch_groups=['AWS-Linux-2-Test'],
                                      approval_rules=patch_baseline_rule_group,
                                      )

【问题讨论】:

  • 作为参考,请在您的问题中链接 Alex 的帖子?
  • @Hcaertnit 当然,已添加链接。

标签: typescript amazon-web-services aws-cdk


【解决方案1】:

RulePropertyRuleGroupProperty 之类的东西在 Python 中是类,但在 TypeScript 中,它们只是接口,所以你不能直接创建它们。相反,您创建的是普通的 JavaScript 对象,您的编辑器或 CDK 本身会告诉您您创建的对象是否不正确。

如果您不知道,在 JavaScript 中使用 camelCase 名称也是常见的做法,而不是像在 Python 中那样使用 snake_case。因此,您还需要将属性名称指定为 camelCase

注意:this 关键字在 JavaScript/TypeScript 中使用,而在 Python 中为 self

这是 Python 代码的 TypeScript 等效项:

import ssm from "@aws-cdk/aws-ssm";

const patchBaselineRule = {
  approveAfterDays: 0,
  complianceLevel: "CRITICAL",
  enableNonSecurity: true,
  patchFilterGroup: patch_baseline_patch_filter_group,
};

const patchBaselineRuleGroup = {
  patchRules: [patchBaselineRule],
};

const patchBaseline = new ssm.CfnPatchBaseline(this, "rPatchBaseline", {
  name: "TestPatchBaseline_Linux",
  description: "TestPatchBaseline for Linux updates, Amazon_Linux_2 distr.",
  operatingSystem: "AMAZON_LINUX_2",
  approvedPatchesEnableNonSecurity: true,
  patchGroups: ["AWS-Linux-2-Test"],
  approvalRules: patchBaselineRuleGroup,
});

【讨论】:

  • 我没有意识到你可以像普通的 JS 对象一样创建接口,这对我来说解释了很多。非常感谢!
  • 是的,它可能相当混乱。你知道你可以在 Python 中使用dicts 作为参数一个类吗?例如你在 Python 代码中使用了 RulePropertyRuleGroupProperty,但实际上你可以让它们成为 dicts(虽然你不会得到智能感知):D
猜你喜欢
  • 2021-10-03
  • 2021-10-14
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2023-01-02
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多