AWS CDK: 여러 환경에 대한 context 사전 관리

9360 단어 AWS CDKtech

개요


CDK의 context는 cdk다.json 또는 cdk.context.json 같은 파일에 기술되어 있지만 환경별로 파일을 분리할 수 없습니다.따라서 여러 환경의 context를 전환하려면 한 파일에 모두 기술하고 자동으로 전환하는 메커니즘을 구축해야 한다고 생각합니다.또 정식 환경인 context가 창고에 주력하고, 시험용 제작 환경인 context는 어떻게 하면 좋을지 고민이다.context 파일을 전환하는 옵션 (SAM --config-file 도 있지만, 현재는 없는 것 같습니다.(2022/04 현재)
가능하다면, 나는 먼저 CDK의 표준을 따라가고 싶지만, 나는 여전히 별도로 context (상당한 설정) 를 읽었다.

context 지정 방법


CDK가 관리하는 context와 달리 각 환경을 기술하는 context의 파일은 다음과 같다.
  • context.동작의 확인context
  • 환경 이름이 지정되지 않은 경우 참조됩니다.
  • 동작을 확인하는 데 사용되기 때문에 버전 관리 대상에 속하지 않습니다.
  • context.(환경 이름).json: 각 환경용context
  • 환경 이름은 실행 시 CDK context로 표시됩니다.
    예제)
    cdk synth --context env=staging
    

    이루어지다


    컨텍스트 정보의 유형을 정의합니다.context.jsonJSON.parse()만 하고 있기 때문에 읽을 때 검사는 효과가 없지만 context가 어떤 설정을 하고 코드 보충 효과가 있는지 아는 장점이 있습니다.열심히 하면 장르도 체크할 수 있나요?
    // lib/Context.ts
    interface Context {
        readonly project: string;
        readonly environment: string;
    }
    
    function createContext(env: string): Context {
        return JSON.parse(fs.readFileSync(`context${env ? `.${env}` : ""}.json`).toString());
    }
    
    export {Context, createContext}
    
    Stack은 Proops에서 Context를 적용합니다.
    // lib/AppStack.ts
    import * as cdk from "aws-cdk-lib";
    import {Construct} from "constructs";
    import {Context} from "./Context";
    
    interface AppStackProps extends cdk.StackProps {
        readonly context: Context;
    }
    
    export class AppStack extends cdk.Stack {
        constructor(scope: Construct, id: string, props: AppStackProps) {
            const context = props.context;
            // context を参照
        }
    }
    
    메인 프로세싱을 통해 Context를 제작하고 Proops를 통해 Stack에 전달한다.
    // bin/app.ts
    import * as cdk from "aws-cdk-lib";
    import {createContext} from "../lib/Context";
    import {AppStack} from "../lib/AppStack";
    
    const app = new cdk.App();
    const context = createContext(app.node.tryGetContext("env"));
    
    new AppStack(app, "AppStack", {
        stackName: `${context.project}-app`,
        context,
    });
    

    총결산


    이 정도면 CDK의 자유도가 높은 것은 매우 좋다.이미 삶의 클라우드 포메이션으로 돌아갈 수 없어...
    컨텍스트를인터페이스가 아니라클라스로,JSON에서실례화하면컨텍스트류에서(상)발리데이등의논리를상쾌하게할 수 있지 않을까.

    좋은 웹페이지 즐겨찾기