AWS CDK의 여러 스택에서 리소스를 공유하는 방법
7227 단어 cdktypescriptcloudaws
AWS CDK의 여러 스택에서 리소스 공유
CDK 앱을 구축할 때 프로젝트를 구조화하고 인프라를 생성할 때 여러 스택을 설정하려는 좋은 기회가 있습니다. 따라서 AWS CDK의 스택 전체에서 리소스를 참조하는 방법을 아는 것이 좋습니다.
이 블로그 게시물의 예에서는 두 개의 스택을 생성합니다.
SharedInfraStack
, VPC 리소스RdsStack
는 SharedInfraStack
에서 VPC를 가져옵니다.참고: 아직 AWS CDK 초보자인 경우. 그런 다음 먼저 How to setup AWS CDK - 전체 가이드에 대한 내 기사를 읽어 보시기 바랍니다.
https://towardsthecloud.com/how-to-set-up-aws-cdk
AWS CDK의 스택 간에 리소스를 공유하려면 다음이 필요합니다.
SharedInfraStack
which provisions the VPC RdsStack
we instantiate RdsStack
and import the VPC as prop VPC를 프로비저닝하는 SharedInfraStack 생성
아래 예에서는 서브넷 및 라우팅을 포함하여 VPC 리소스를 프로비저닝하는 공유 인프라 스택을 공유합니다.
// file: lib/shared-infra-stack.ts
import * as cdk from "@aws-cdk/core";
import * as ec2 from "@aws-cdk/aws-ec2";
export class SharedInfraStack extends cdk.Stack {
public readonly vpc: ec2.Vpc;
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// assign a VPC to the class property SharedInfraStack
this.vpc = new ec2.Vpc(this, "TheVPC", {
cidr: "10.0.0.0/16",
natGateways: 1,
maxAzs: 3,
subnetConfiguration: [
{
cidrMask: 20,
name: "public",
subnetType: ec2.SubnetType.PUBLIC,
},
{
cidrMask: 20,
name: "application",
subnetType: ec2.SubnetType.PRIVATE,
},
{
cidrMask: 20,
name: "data",
subnetType: ec2.SubnetType.ISOLATED,
},
],
});
}
}
cdk synth
를 실행하여 CloudFormation 템플릿을 생성하면 다음 VPC 리소스를 내보내는 것을 볼 수 있습니다.# Generated CloudFormation template of the SharedInfraStack
Outputs:
ExportsOutputRefTheVPCdataSubnet1Subnet62F6C85A8DFF3A46:
Value:
Ref: TheVPCdataSubnet1Subnet62F6C85A
Export:
Name: SharedInfraStack:ExportsOutputRefTheVPCdataSubnet1Subnet62F6C85A8DFF3A46
ExportsOutputRefTheVPCdataSubnet2SubnetAE4EF5CAD340846A:
Value:
Ref: TheVPCdataSubnet2SubnetAE4EF5CA
Export:
Name: SharedInfraStack:ExportsOutputRefTheVPCdataSubnet2SubnetAE4EF5CAD340846A
ExportsOutputRefTheVPC92636AB00B2A4A70:
Value:
Ref: TheVPC92636AB0
Export:
Name: SharedInfraStack:ExportsOutputRefTheVPC92636AB00B2A4A70
인스턴스화하는 RdsStack에 VPC의 소품을 전달합니다.
CDK 앱을 인스턴스화하는
bin
폴더에서 CDK 스택도 선언합니다. 여기에서 VPC 스택에서 방금 생성한 props를 전달하고 생성할 새 항목RdsStack
에 전달합니다.// file: bin/index.ts
import * as cdk from "@aws-cdk/core";
import { SharedInfraStack } from "../lib/shared-infra-stack";
import { RdsStack } from "../lib/rds-stack";
const app = new cdk.App();
// created the SharedInfraStack with the VPC resource that we're going to share by making a variable
const infra = new SharedInfraStack(app, "SharedInfraStack");
// pass the vpc resource from the SharedInfraStack to the RdsStack
new RdsStack(app, "RdsStack", {
vpc: infra.vpc,
});
RdsStack을 생성하고 VPC를 소품으로 가져오기
이제 이전 두 단계에서 스택 간에 공유한 VPC 리소스로 RDS를 프로비저닝하는
RdsStack
를 생성합니다.// file: lib/rds-stack.ts
import * as cdk from "@aws-cdk/core";
import * as ec2 from "@aws-cdk/aws-ec2";
import * as rds from "@aws-cdk/aws-rds";
// extend the props of the stack by adding the vpc type from the SharedInfraStack
export interface RDSStackProps extends cdk.StackProps {
vpc: ec2.Vpc;
}
export class RdsStack extends cdk.Stack {
readonly postgreSQLinstance: rds.DatabaseInstance;
private vpc: ec2.Vpc;
constructor(scope: cdk.Construct, id: string, props: RDSStackProps) {
super(scope, id, props);
// make the vpc variable accessible
const vpc = props.vpc;
const cluster = new rds.DatabaseCluster(this, "Database", {
engine: rds.DatabaseClusterEngine.auroraMysql({
version: rds.AuroraMysqlEngineVersion.VER_2_08_1,
}),
credentials: rds.Credentials.fromGeneratedSecret("clusteradmin"), // Optional - will default to 'admin' username and generated password
instanceProps: {
// optional , defaults to t3.medium
instanceType: ec2.InstanceType.of(
ec2.InstanceClass.BURSTABLE2,
ec2.InstanceSize.SMALL
),
vpcSubnets: {
subnetType: ec2.SubnetType.ISOLATED,
},
// select the vpc we imported to define the subnets for the RDS
vpc,
},
});
}
}
다음은
cdk synth
명령을 사용하여 CloudFormation 템플릿을 생성할 때의 최종 결과입니다. DatabaseSubnets56F17B9A:
Type: AWS::RDS::DBSubnetGroup
Properties:
DBSubnetGroupDescription: Subnets for Database database
SubnetIds:
- Fn::ImportValue: SharedInfraStack:ExportsOutputRefTheVPCdataSubnet1Subnet62F6C85A8DFF3A46
- Fn::ImportValue: SharedInfraStack:ExportsOutputRefTheVPCdataSubnet2SubnetAE4EF5CAD340846A
Metadata:
aws:cdk:path: RdsStack/Database/Subnets/Default
DatabaseB269D8BB:
Type: AWS::RDS::DBCluster
Properties:
Engine: aurora-mysql
DBClusterParameterGroupName: default.aurora-mysql5.7
DBSubnetGroupName:
Ref: DatabaseSubnets56F17B9A
EngineVersion: 5.7.mysql_aurora.2.08.1
MasterUsername: clusteradmin
MasterUserPassword:
Fn::Join:
- ""
- - "{{resolve:secretsmanager:"
- Ref: RdsStackDatabaseSecretECD539873fdaad7efa858a3daf9490cf0a702aeb
- :SecretString:password::}}
VpcSecurityGroupIds:
- Fn::GetAtt:
- DatabaseSecurityGroup5C91FDCB
- GroupId
UpdateReplacePolicy: Snapshot
DeletionPolicy: Snapshot
Metadata:
aws:cdk:path: RdsStack/Database/Resource
CloudFormation 템플릿에서 볼 수 있듯이
RdsStack
템플릿에서 내보낸 SharedInfraStack
의 VPC 값을 가져옵니다.TL;DR 나에게 코드를 줘!
이 문서의 코드는 GitHub에서 사용할 수 있습니다.
👋 이 기사가 마음에 드셨나요? 아래 의견에 연락하거나 의견을 보내주세요.
Reference
이 문제에 관하여(AWS CDK의 여러 스택에서 리소스를 공유하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/how-to-share-resources-across-stacks-in-aws-cdk-9ob텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)