CDK 상위 수준 구성과 CloudFormation 리소스 사이에 차이가 있을 때 리소스 속성 값을 사용자 지정하려면 어떻게 해야 합니까?
AWS Cloud Development Kit(AWS CDK) L3/L2 구성과 AWS CloudFormation 간에 차이가 있을 때 리소스 속성 값을 수정하려고 합니다.
간략한 설명
경우에 따라 상위 수준 구성(L3 및 L2)에는 수정할 수 없는 리소스 속성이 있습니다. 이 문제를 해결하려면 AWS CDK 이스케이프 해치를 사용하여 더 낮은 수준의 추상화로 이동하고 리소스 속성 값을 수정하십시오.
AWS CDK Python을 사용하는 Amazon Virtual Private Cloud(Amazon VPC) 예제:
vpc = ec2.Vpc(self, "MyCDKVPC", max_azs=2, cidr='60.0.0.0/16', subnet_configuration=[ ec2.SubnetConfiguration( name="public", subnet_type=ec2.SubnetType.PUBLIC, cidr_mask=24, ), ec2.SubnetConfiguration( name="private", subnet_type=ec2.SubnetType.PRIVATE_WITH_NAT, cidr_mask=24, ) ] )
위의 예제 Amazon VPC는 L2 구성 **aws_cdk.aws_ec2.Vpc**를 사용하여 정의되었습니다. 이 구성에는 CidrBlock이 60.0.0.0/16으로 설정된 두 개의 가용 영역(AZ)이 있습니다. 예제 Amazon VPC에는 두 AZ에 분산된 두 개의 PublicSubnets과 두 개의 PrivateSubnets도 포함되어 있습니다.
AWS: :EC2: :서브넷 리소스를 확인하는 CloudFormation을 생성할 때 CidrBlock은 첫 번째 IP 범위인 60.0.0.0/24에서 시작되며 수정할 수 없습니다.
PublicSubnet1: Type: AWS::EC2::Subnet Properties: ... CidrBlock: 60.0.0.0/24 PublicSubnet2: Type: AWS::EC2::Subnet Properties: ... CidrBlock: 60.0.1.0/24 PrivateSubnet1: Type: AWS::EC2::Subnet Properties: ... CidrBlock: 60.0.2.0/24 PrivateSubnet2: Type: AWS::EC2::Subnet Properties: ... CidrBlock: 60.0.3.0/24
이 문제를 해결하려면 다음 단계를 수행하십시오.
- Amazon VPC 내에서 생성된 서브넷을 검색합니다(L2 PublicSubnet 구성 및 L2 PrivateSubnet 구성).
- L2 구성에서 AWS CDK 이스케이프 해치 node.default_child를 사용하고 L1 CfnSubnet 리소스로 캐스팅합니다.
- 직접 또는 원시 재정의를 사용하여 cidr_block을 수정합니다.
- CloudFormation 템플릿에서 cidr_block 업데이트를 확인합니다.
해결 방법
AWS CDK 이스케이프 해치를 사용하여 PublicSubnets 또는 PrivateSubnets에 대한 하위 추상화 계층의 CidrBlock 값을 수정하려면 다음 단계를 수행하십시오.
중요: 다음 단계는 PublicSubnets에 적용됩니다. PrivateSubnets에 적용하려면 PublicSubnet의 모든 인스턴스를 PrivateSubnet으로 바꿉니다.
1. vpc.public_subnets 속성을 사용하여 Amazon VPC에서 PublicSubnets 목록을 검색합니다.
public_subnets = vpc.public_subnets
참고: 생성된 목록 내의 각 요소는 L2 PublicSubnet 구성입니다. 다음 예제 출력을 참조하십시오.
########## confirm public_subnets is a L2 construct ########## print(public_subnets) # printout: [<aws_cdk.aws_ec2.PublicSubnet object at 0x7f3f48acb490>, <aws_cdk.aws_ec2.PublicSubnet object at 0x7f3f48acb050
2. 원하는 L2 구성(이 예제에서는 aws_cdk.aws_ec2.PublicSubnet)에 node.default_child 특성을 사용합니다. 그런 다음, L1 CfnSubnet 리소스(이 예제에서는 aws_cdk.aws_ec2.CfnSubnet)로 캐스팅합니다.
########## confirm cfn_public_subnet is a L1 construct ########## for public_subnet in public_subnets: cfn_public_subnet = public_subnet.node.default_child print(cfn_public_subnet) # printout: <aws_cdk.aws_ec2.CfnSubnet object at 0x7f3f48acb710> # printout: <aws_cdk.aws_ec2.CfnSubnet object at 0x7f3f48acb950>
3. L1 CfnSubnet 리소스에 액세스한 후 다음 방법 중 하나를 사용하여 L1 CfnSubnet 구성에서 CidrBlock을 수정하십시오.
- cidr_block을 직접 수정
- 원시 재정의를 사용하여 cidr_block 수정
직접 또는 원시 재정의를 사용하는 cidr_block 수정 예:
public_subnets = vpc.public_subnets public_subnet_index = 0 for public_subnet in public_subnets: cfn_public_subnet = public_subnet.node.default_child ########### 1) modify the cidr_block property directly ########### cfn_public_subnet.cidr_block = "60.0." + str(public_subnet_index + example_start_value) + ".0/24") ########### 2) modify the cidr_block by using raw overrides ########### cfn_public_subnet.add_property_override("CidrBlock", "60.0." + str(public_subnet_index + example_start_value) + ".0/24") public_subnet_index += 1
중요: example_start_value를 지정한 값으로 바꿉니다. 예를 들어, 60.0.100.0/24에서 시작하도록 public_subnet을 수정하려면 example_start_value를 100으로 설정합니다.
4. cdk synth 명령을 실행하여 새로 생성된 CloudFormation 템플릿의 AWS::EC2::Subnet 리소스 내에서 CIDRBlock 업데이트를 확인합니다.
cdk synth
예제 출력:
PublicSubnet1: Type: AWS::EC2::Subnet Properties: ... CidrBlock: 60.0.100.0/24 <--- PublicSubnet2: Type: AWS::EC2::Subnet Properties: ... CidrBlock: 60.0.101.0/24 PrivateSubnet1: Type: AWS::EC2::Subnet Properties: ... CidrBlock: <example_custom_value>/24 PrivateSubnet2: Type: AWS::EC2::Subnet Properties: ... CidrBlock: <example_custom_value>/24
관련 정보
관련 콘텐츠
- 질문됨 6달 전lg...
- 질문됨 6달 전lg...
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 2년 전