You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CDKTF中解析Security Group Ingress对象及解决to_port必填报错

问题:CDKTF创建AWS安全组Ingress规则失败及Ingress对象解析

问题重现

用CDKTF在AWS中创建安全组,明明在Ingress规则里指定了端口,却还是报错提示ingress.0.to_port是必填项但未定义。

出错代码

import cdktf_cdktf_provider_aws.security_group as SecurityGroup_
self.security_group_ = SecurityGroup_.SecurityGroup(self.scope_object, id_=self.id, name=self.name, vpc_id=self.vpc_id, ingress=[{"from_port":"3306","to_port":"3306"}])

错误日志

29:         "ingress": [
   30:           {
   31:             "cidr_blocks": null,
   32:             "description": "smartstack_dependency",
   33:             "from_port": null,
   34:             "ipv6_cidr_blocks": null,
   35:             "prefix_list_ids": null,
   36:             "protocol": "tcp",
   37:             "security_groups": null,
   38:             "self": null,
   39:             "to_port": null
   40:           }
   41:         ],

 The argument "ingress.0.to_port" is required, but no definition was found.

问题根源

  1. 端口类型错误:你代码里的from_port和to_port用了字符串"3306",但CDKTF要求这两个字段必须是整数类型。字符串值会被CDKTF忽略,导致端口值变为null,触发必填项缺失的报错。
  2. 来源规则缺失:Ingress规则必须指定允许访问的来源(比如CIDR、其他安全组等),否则规则不完整。

修复代码

import cdktf_cdktf_provider_aws.security_group as SecurityGroup_
self.security_group_ = SecurityGroup_.SecurityGroup(
    self.scope_object,
    id_=self.id,
    name=self.name,
    vpc_id=self.vpc_id,
    ingress=[
        {
            "from_port": 3306,  # 把字符串改成整数
            "to_port": 3306,    # 同上
            "cidr_blocks": ["0.0.0.0/0"],  # 允许所有IPv4访问,根据实际需求调整
            "protocol": "tcp",  # 指定TCP协议,显式声明更清晰
            "description": "Allow MySQL inbound access"  # 可选:给规则加个描述
        }
    ]
)

CDKTF Ingress 对象核心说明

Ingress对象用来定义安全组的入站访问规则,核心要求如下:

必填字段(缺一不可)

  • from_port / to_port: 整数,分别对应起始和结束端口,如果是单端口,两个值设成一样就行
  • protocol: 字符串,可选值包括tcp、udp、icmp,填"-1"代表允许所有协议
  • 来源指定:必须选至少一个字段来定义允许访问的来源:
    • cidr_blocks: 列表格式,填IPv4的CIDR地址段,比如["192.168.1.0/24"]
    • ipv6_cidr_blocks: 列表格式,填IPv6的CIDR地址段
    • security_groups: 列表格式,填其他安全组的ID,允许该安全组内的资源访问
    • prefix_list_ids: 列表格式,填AWS前缀列表ID(比如针对S3、DynamoDB等服务的前缀)
    • self: 布尔值,设为True的话,允许当前安全组内的资源互相访问

可选字段

  • description: 字符串,给规则加个描述,方便后续维护时识别规则用途

内容的提问来源于stack exchange,提问作者pratiti28_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:55:22