CDK 상위 수준 구성과 CloudFormation 리소스 사이에 차이가 있을 때 리소스 속성 값을 사용자 지정하려면 어떻게 해야 합니까?

3분 분량
0

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**를 사용하여 정의되었습니다. 이 구성에는 CidrBlock60.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

이 문제를 해결하려면 다음 단계를 수행하십시오.

  1. Amazon VPC 내에서 생성된 서브넷을 검색합니다(L2 PublicSubnet 구성 및 L2 PrivateSubnet 구성).
  2. L2 구성에서 AWS CDK 이스케이프 해치 node.default_child를 사용하고 L1 CfnSubnet 리소스로 캐스팅합니다.
  3. 직접 또는 원시 재정의를 사용하여 cidr_block을 수정합니다.
  4. 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_value100으로 설정합니다.

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

관련 정보

PrivateSubnet

vpc.private_subnets

AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠