AWS CDK: 여러 환경에 대한 context 사전 관리
개요
CDK의 context는 cdk다.json 또는 cdk.context.json 같은 파일에 기술되어 있지만 환경별로 파일을 분리할 수 없습니다.따라서 여러 환경의 context를 전환하려면 한 파일에 모두 기술하고 자동으로 전환하는 메커니즘을 구축해야 한다고 생각합니다.또 정식 환경인 context가 창고에 주력하고, 시험용 제작 환경인 context는 어떻게 하면 좋을지 고민이다.context 파일을 전환하는 옵션 (SAM
--config-file
도 있지만, 현재는 없는 것 같습니다.(2022/04 현재)가능하다면, 나는 먼저 CDK의 표준을 따라가고 싶지만, 나는 여전히 별도로 context (상당한 설정) 를 읽었다.
context 지정 방법
CDK가 관리하는 context와 달리 각 환경을 기술하는 context의 파일은 다음과 같다.
예제)
cdk synth --context env=staging
이루어지다
컨텍스트 정보의 유형을 정의합니다.context.json
JSON.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에서실례화하면컨텍스트류에서(상)발리데이등의논리를상쾌하게할 수 있지 않을까.
Reference
이 문제에 관하여(AWS CDK: 여러 환경에 대한 context 사전 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yh1224/articles/am3em90t48237zy6b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)