AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
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
관련 정보
- 언어
- 한국어
