AWSCDK forTypeScript에 LambdaLayer를 배치하면 이전 버전이 사라집니다.
9480 단어 TypeScriptAWSaws-cdk
입문
이 글은 Type Script Advent Calendar 2019#13일 의 글입니다.
13일째 담당입니다 @is_ryo!
감사 인사
TypeScript 얘기가 아닌데...
시작(2차)
제가 속한 팀은 AWS 구성을 관리하기 위해 AWSCDK를 사용했습니다.
AWSCDK는 TypeScript나 Python 등의 언어로 CloudFormation(이하 CFn)의 템플릿을 생성할 수 있는 개발 패키지입니다.
여기서 AWSCDK 자체에 대한 설명을 생략합니다.자세한 내용은 공식 홈페이지를 참조하십시오.
무슨 일이야..
평소와 같이 TypeScript로 CDK를 쓰기 위해 LambdaLayer를 가져오려고 합니다.
소스 코드가 이런 느낌이에요.
stack.ts
import cdk = require("@aws-cdk/core")
import { LayerVersion, AssetCode, Runtime } from "@aws-cdk/aws-lambda"
export class LambdaLayerStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props)
new LayerVersion(this, "DemoLambdaLayer", {
code: AssetCode.fromAsset("lambdaSources/demo_function"),
compatibleRuntimes: [Runtime.NODEJS_12_X]
})
}
}
멤버: "네, 소스를 써서 배치해야 돼요!"$ aws cdk deploy LambdaLayerStack
멤버: "콘솔에서 확인해 주시겠어요?"콘솔 "배포 가능"
멤버: "Lambda Layer의 논리가 좀 바뀌었어요. 재배치할까요?"
생략
콘솔 "배포 가능"
멤버 "여보세요... 버전 1 어디서 만들었어요?"
콘솔
이유가 뭐예요?
CFn이 범인이야.아니면 CFn의 성질.
스택에 정의되지 않은 자원을 일부러 삭제할 수 있습니다.
예를 들어 APIGAteway에 resource
/get
및/post
이 있을 때 이 APIGAteway에 /get
스택만 사용하여 업데이트하면 삭제/post
됩니다.이와 같이 스택을 업데이트할 때 이전 버전의 정보가 없어서 삭제되었습니다...
처리 방법
함부로 지워지지 마.
CFn에서 생성된 리소스에 대한 속성
removal policy
을 설정할 수 있습니다.속성을
Retain
로 설정하여 삭제 보호합니다.이렇게 쓰는 느낌이에요.
stack.ts
import cdk = require("@aws-cdk/core")
import { LayerVersion, AssetCode, Runtime } from "@aws-cdk/aws-lambda"
export class LambdaLayerStack extends cdk.Stack {
constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
super(scope, id, props)
const lambdaLayer = new LayerVersion(this, "DemoLambdaLayer", {
code: AssetCode.fromAsset("lambdaSources/demo_function"),
compatibleRuntimes: [Runtime.NODEJS_12_X]
})
/* ここから追加 */
const lambdaLayerResource = lambdaLayer.node.findChild(
"Resource"
) as cdk.CfnResource
lambdaLayerResource.applyRemovalPolicy(cdk.RemovalPolicy.RETAIN)
}
}
간단히 설명하다
applyRemovalPolicy
이 함수를 사용하기 위해서는 cdk.CfnResource
을 변수에 넣어야 합니다.const lambdaLayerResource = lambdaLayer.node.findChild(
"Resource"
) as cdk.CfnResource
함수 설정 applyRemovalPolicy
을 사용합니다.기본값은
removal policy
입니다.lambdaLayerResource.applyRemovalPolicy(cdk.RemovalPolicy.RETAIN)
시도하다
멤버 "배치야!"
콘솔 "배포 가능"
멤버 "이전 버전이 남아있어요!"
마지막
어때?
CFn을 쓰는 사람이 보기에는 당연한 느낌일 수도 있지만, CFn의 해소에 시달리는 것이 있다면 잘 덧붙여보세요
DELETE
.그러나 주의해야 할 것은 일단
removal policy
배치removal policy
되면 CFn은 삭제할 수 없다는 것이다.콘솔에서 제거해야 합니다.그럼 안녕!
Reference
이 문제에 관하여(AWSCDK forTypeScript에 LambdaLayer를 배치하면 이전 버전이 사라집니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/is_ryo/items/28e8760e7b47eb7ee1fe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)