AWS CDK를 사용하여 인프라 코드를 애플리케이션 개발자에게 더 가까이 제공
Infrastructure as actual code
라는 멋진 강연에 참석했습니다. 여기에서 그들은 AWS CDK를 제시했습니다. 한번 해볼 생각을 했고 이 글은 AWS CDK에 대한 나의 첫인상에 대한 글이다.AWS CDK가 수행하는 작업으로 이동하기 전에 코드형 인프라가 중요한 이유를 살펴보겠습니다. 현재 클라우드 네이티브 애플리케이션 아키텍처에서는 자동화되고 반복 가능하며 일관된 방식으로 인프라를 배포하는 기능이 반드시 필요합니다. 예를 들어 AWS의 CloudFormation, Hashicorp의 terraform 등 많은 도구가 이를 달성할 수 있는 방법을 제공합니다.
그러나 기본적으로 이러한 도구에는 이를 달성하기 위한 자체 DSL이 있습니다. Cloudformation은 YAML/Json 파일을 사용하고 terraform은 HCL(HashiCorp Configuration Language)을 사용합니다.
개발자가 자신이 선호하는 프로그래밍 언어를 사용하여 애플리케이션을 작성하고 전문 지식을 가질 수 있다면 어떨까요? AWS CDK가 빛을 발하는 곳입니다.
AWS CDK를 사용하면 Typescript, JavaScript, Java, Python, Java, C#/.Net 및 Go와 같은 알려진 프로그래밍 언어를 사용할 수 있습니다.
다음은 Api Gateway 통합이 포함된 간단한 Lambda 함수의 모습입니다.
public class MovieLambdaInfraStack extends Stack{
public MovieLambdaInfraStack(final Construct scope, final String id){
this(scope, id, null);
}
public MovieLambdaInfraStack(final Construct scope, final String id, final StackProps props){
super(scope, id, props);
// Parameters
CfnParameter version = CfnParameter.Builder
.create(this, "lambda-version")
.description("Version of lambda app jar")
.type("String")
.build();
// Bucket storing lambda code
IBucket lambdaCodeBucket = createBucket();
// Lambda Definition
String lambdaSource = "movie-lambda-app-" + version.getValueAsString() + ".jar";
IFunction lambda = Function.Builder.create(this, "sab-lambda-artifact")
.code(Code.fromBucket(lambdaCodeBucket, lambdaSource))
.runtime(Runtime.JAVA_11)
.functionName("sab-lambda-artifact")
.handler("com.sab.LambdaHandler")
.tracing(Tracing.ACTIVE)
.timeout(Duration.minutes(5))
.memorySize(512)
.build();
// Api Gateway
LambdaIntegration lambdaIntegration = LambdaIntegration.Builder
.create(lambda)
.proxy(true)
.build();
RestApi api = RestApi.Builder.create(this, "movies")
.defaultIntegration(lambdaIntegration)
.apiKeySourceType(ApiKeySourceType.HEADER)
.build();
Resource movies = api.getRoot().addResource("movies");
movies.addMethod("POST");
}
@NotNull
private IBucket createBucket(){
return Bucket.fromBucketName(this, "lambda-code-bucket", "sab-lambda-artifact");
}
}
이 스택을 배포하기 위해 AWS CDK에서 실행할 간단한 기본 방법
public static void main(final String[] args) {
App app = new App();
new MovieLambdaInfraStack(app, "MovieLambdaInfraStack", StackProps.builder()
.env(Environment.builder()
.account("xxxxxx")
.region("xxxx")
.build())
.build());
app.synth();
}
AWS CDK는 이 앱을 AWS에 배포할 cmd line cli와 함께 제공됩니다. 그 아래에 클라우드포메이션 템플릿이 생성됩니다.
AWS CDK 기본 구성 요소
App - An
App
은 cdk에 의해 배포되고 Stacks
보다 하나 이상을 포함하는 구성 요소입니다.스택 - A
Stack
는 우리의 인프라를 정의하는 것입니다. 여기에는 하나 이상이 포함됩니다Constructs
.구성 - 이들은 실제 AWS 서비스입니다. 사용자 지정 구성을 만들 수도 있습니다.
https://docs.aws.amazon.com/cdk/v2/guide/core_concepts.html에서 더 많은 구성 요소를 참조하십시오.
내가 좋아하는 것들
저는 클라우드포메이션을 사용했는데, 복잡한 인프라의 경우 실제로 얽히고 읽기 어려워질 수 있기 때문에 개인적으로 주로 선호하지 않습니다.
최근에 나는 주로 terraform을 사용했고 그것을 좋아했습니다. 다중 클라우드를 지원합니다. 우리는 terraform에서 자체 모듈과 구성 요소를 만들 수 있습니다. HCL 언어는 꽤 표현력이 좋습니다. 함수, 유형, 변수 루프를 정의하는 고유한 방법이 있으며, 이는 때때로 우리 개발자에게 약간 직관적이지 않습니다.
AWS CDK에 대한 첫인상은 다음과 같은 이점이 있습니다.
@Test
void itShouldGenerateLambda(){
App app = new App();
Stack lambda = new MovieLambdaInfraStack(app, "MovieLambdaInfraStack");
Template template = Template.fromStack(lambda);
template.resourceCountIs("AWS::Lambda::Function",1);
template.hasResourceProperties("AWS::Lambda::Function", Map.of(
"Handler", "com.sab.LambdaHandler"
));
}
하락세로
그러나 단점에 -
하지만 전반적으로 저는 CDK 접근 방식이 마음에 들었고 이 방식을 채택함으로써 인프라 코드가 애플리케이션 코드에 더 가까워지고 인프라와 애플리케이션 코드 사이의 도구 및 언어 측면에서 사일로가 무너지기를 바랍니다.
Reference
이 문제에 관하여(AWS CDK를 사용하여 인프라 코드를 애플리케이션 개발자에게 더 가까이 제공), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sabyasachi/using-aws-cdk-to-bring-infra-code-closer-to-developers-1nf4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)