CloudFormation은 AWS에서 인프라를 코드로 정의하여 관리하는 서비스입니다. 이를 통해 보안 그룹, EC2 인스턴스, S3 버킷, 로드 밸런서와 같은 리소스를 자동으로, 정확한 순서와 설정으로 생성할 수 있습니다.
인프라를 코드로 관리: 모든 인프라가 코드(json)형태로 관리되므로, 수동으로 리소스를 생성하는 대신 통제 가능하고, 코드 리뷰를 통해 변경 사항을 검토할 수 있습니다.
비용 관리: CloudFormation을 사용하면 생성된 모든 리소스에 동일한 태그를 할당하여 비용을 추정하고 관리할 수 있습니다.
절약 전략: 특정 환경에서 템플릿을 자동으로 삭제하여 오후 5시 이후에는 리소스가 없도록 하고, 오전 8시나 9시에 다시 생성하여 비용을 절약할 수 있습니다.
생산성 향상: 인프라를 신속하게 파괴하고 재생성할 수 있으며, CloudFormation은 리소스 간의 의존성을 파악하고 자동으로 인프라를 구성합니다.
Wheel 재발명 방지: 이미 존재하는 템플릿을 활용하고, CloudFormation이 거의 모든 AWS 리소스를 지원하기 때문에, 지원되지 않는 리소스의 경우에는 커스텀 리소스를 사용할 수 있습니다.
CloudFormation을 사용하면 인프라를 시각적으로 볼 수 있으며, 관계를 쉽게 파악할 수 있는 다이어그램을 생성합니다.
시험에서는 인프라를 코드로 관리하거나, 다양한 환경, 리전, AWS 계정에서 아키텍처를 반복적으로 구현할 때 CloudFormation의 사용을 생각하면 됩니다.
AWS Cloud Development Kit (CDK)는 개발자들이 친숙한 프로그래밍 언어를 사용하여 클라우드 인프라를 정의할 수 있게 하는 서비스입니다. CloudFormation이 YAML 형식의 템플릿을 직접 작성하는 것과 달리, CDK를 사용하면 JavaScript, TypeScript, Python, Java, .NET 등 다양한 프로그래밍 언어로 클라우드 인프라 코드를 작성할 수 있습니다.
작성한 코드는 CDK를 통해 CloudFormation 템플릿(JSON 또는 YAML 형식)으로 컴파일되며, 이 템플릿을 통해 인프라를 배포할 수 있습니다. 이는 특히 AWS Lambda 함수, ECS 및 EKS에서 Docker 컨테이너를 사용하는 경우에 유용합니다.
예를 들어, Python으로 CDK 애플리케이션을 작성하여 Lambda 함수나 DynamoDB 테이블 등의 AWS 서비스를 정의할 수 있습니다. CDK CLI를 사용하면 이 애플리케이션을 CloudFormation 템플릿으로 변환할 수 있고, 이 템플릿을 사용하여 인프라를 배포할 수 있습니다.
CDK의 장점은 타입 안정성, 친숙한 구조, 코드 재사용, 반복문 같은 프로그래밍 기능을 활용할 수 있다는 점입니다. 예시에서는 JavaScript 또는 TypeScript를 사용하여 VPC, ECS 클러스터, 그리고 Fargate 서비스를 포함한 애플리케이션 로드 밸런서를 정의하는 CDK 코드를 보여줍니다.
결론적으로, CDK는 개발자가 프로그래밍 언어를 통해 클라우드 인프라를 보다 쉽고 효율적으로 관리하고 배포할 수 있도록 해줍니다.
AWS Elastic Beanstalk은 웹 애플리케이션을 AWS에 배포하는 데 초점을 맞춘 관리형 서비스입니다. 개발자는 인프라를 직접 관리하기보다 코드를 배포하는 데 집중할 수 있습니다. 전형적인 3계층 아키텍처—ELB, ASG, EC2 인스턴스, RDS(관계형 데이터베이스 서비스), 그리고 ElastiCache(인메모리 캐시)—를 수동으로 설정하거나 CloudFormation을 통해 구성하는 대신, Elastic Beanstalk을 사용하면 이러한 모든 구성 요소를 더 쉽게 설정하고 배포할 수 있습니다.
Elastic Beanstalk은 '플랫폼으로서의 서비스(PaaS)'에 해당되며, 코드에 집중하면서 인프라 관리는 Beanstalk이 자동으로 처리합니다. Beanstalk을 사용하는 것은 무료이지만, 사용하는 EC2 인스턴스와 같은 기본 리소스에 대한 비용은 지불해야 합니다.
개발자는 애플리케이션 코드만 제공하면 되고, Beanstalk은 배포 전략, 용량 프로비저닝, 로드 밸런싱, 애플리케이션 상태 모니터링과 같은 작업을 관리합니다. Elastic Beanstalk는 단일 인스턴스 배포부터 로드 밸런서와 오토 스케일링 그룹을 포함한 프로덕션 환경, 그리고 웹이 아닌 애플리케이션을 위한 오토 스케일링 그룹만 사용하는 배포까지 다양한 아키텍처 모델을 지원합니다.
또한, Beanstalk은 Go, Java, .NET, Node.js, PHP, Python, Ruby 등 다양한 프로그래밍 언어 및 Docker와 같은 플랫폼을 지원합니다. Beanstalk 내부에는 EC2 인스턴스에 health monitoring 에이전트가 포함되어 있어 CloudWatch에 메트릭을 보내고, 애플리케이션의 상태를 모니터링하며 health 이벤트를 발행합니다.
요약하자면, Elastic Beanstalk은 개발자 친화적인 서비스로서, AWS에서 애플리케이션을 쉽게 배포하고 관리할 수 있는 통합된 환경을 제공합니다.
AWS CodeDeploy는 애플리케이션을 자동으로 배포하는 또 다른 AWS 서비스입니다. 이 서비스는 Elastic Beanstalk이나 CloudFormation에 종속되지 않고 독립적으로 사용됩니다.
CodeDeploy는 애플리케이션의 새 버전을 기존 인스턴스에 적용할 수 있도록 도와줍니다. 예를 들어, 애플리케이션을 버전 1에서 버전 2로 업그레이드해야 할 때 CodeDeploy가 이 과정을 관리해줍니다.
CodeDeploy의 특징은 다음과 같습니다:
EC2 인스턴스와의 호환: CodeDeploy는 여러 EC2 인스턴스에서 애플리케이션의 버전을 업그레이드할 때 사용될 수 있습니다.
온프레미스 서버 지원: 온프레미스(사내에 구축된) 서버에서도 애플리케이션의 버전 업그레이드를 지원합니다.
하이브리드 서비스: CodeDeploy는 온프레미스 서버와 EC2 인스턴스 모두에 사용될 수 있기 때문에 하이브리드 환경에 적합합니다.
사전 프로비저닝 필요: 사용자는 서버를 사전에 준비하고 CodeDeploy 에이전트를 설치해야 합니다.
CodeDeploy는 AWS로의 전환을 원활하게 하려는 기업에 유용하며, 온프레미스 서버와 EC2 인스턴스를 동일한 방식으로 애플리케이션을 배포할 수 있게 해줍니다. 이 서비스를 통해 단일 인터페이스에서 자동으로 애플리케이션의 버전을 관리하고 업그레이드할 수 있습니다.
AWS CodePipeline은 지속적인 통합 및 지속적인 배포(CI/CD) 서비스입니다. 이 서비스를 사용하면 코드 변경 사항을 자동으로 빌드, 테스트 및 배포하는 워크플로우를 구성할 수 있습니다. 코드가 업데이트되면 CodePipeline은 코드를 자동으로 빌드하고, 설정된 테스트를 실행한 후, 프로덕션 환경을 포함한 여러 스테이지로 코드를 배포합니다. 이는 개발 및 배포 프로세스를 자동화하여 더 빠른 릴리즈 사이클과 향상된 소프트웨어 품질을 달성하는 데 도움을 줍니다
AWS CodeArtifact는 소프트웨어 개발을 위한 보안적이고, 확장 가능하며, 비용 효율적인 아티팩트 관리 서비스입니다. 개발자가 생성한 소프트웨어 패키지는 보통 서로에게 의존하여 구축되며, 이러한 의존성 관리를 위해 CodeArtifact를 사용할 수 있습니다.
이전에는 자체 아티팩트 관리 시스템을 Amazon S3나 EC2 인스턴스에서 커스텀 소프트웨어를 사용하여 직접 설정해야 했지만, CodeArtifact를 통해 이러한 인프라를 직접 구축할 필요 없이 의존성을 저장하고 검색할 수 있습니다. Maven, Gradle, npm, yarn, twine, pip, NuGet과 같은 일반적인 의존성 관리 도구는 CodeArtifact와 연동하여 코드 의존성을 저장하고 검색할 수 있습니다.
개발자들은 이제 CodeArtifact를 사용하여 보안적으로 의존성을 저장하고 검색할 수 있는 기본 장소를 가지게 됩니다. 이는 코드를 CodeCommit에 푸시하고, CodeBuild가 빌드할 때, CodeBuild가 CodeArtifact에서 직접 의존성을 검색할 수 있음을 의미합니다.
그냥 클라우드 IDE
같은 사람이 같은시간에 같은 코드로 작업할 수 있다네요. (pair programming)
AWS Systems Manager (SSM)는 EC2 인스턴스와 온프레미스 시스템을 대규모로 관리하는 데 도움을 주는 서비스입니다. 이는 AWS와 온프레미스 양쪽 모두에서 사용할 수 있어 하이브리드 AWS 서비스로 불립니다. SSM은 인프라 상태에 대한 운영 인사이트를 제공하고, 서버 및 인스턴스에 대한 자동 패치, 전체 서버 플릿에 걸친 명령 실행, SSM 파라미터 스토어를 통한 기본 설정 저장 등 다양한 기능을 지원합니다. SSM은 Linux, Windows, MacOS, Raspberry Pi 등 다양한 운영 체제를 지원합니다.
EC2 인스턴스 또는 온프레미스 서버의 패치 관리나 전체 서버에 걸쳐 일관된 명령을 실행할 필요가 있을 때 SSM을 생각해야 합니다. SSM을 사용하기 위해서는 관리하고자 하는 시스템에 SSM 에이전트를 설치해야 하며, 이 에이전트는 AWS의 SSM 서비스와 통신하여 명령 실행, 패치 관리, 설정 구성 등을 수행합니다.
SSM은 EC2 인스턴스와 온프레미스 VM 모두와 연결되어 있어 하이브리드 서비스로서의 역할을 합니다. SSM을 통해 서버 전체에 명령을 실행하거나, 한 번에 패치를 적용하거나, 일관된 방식으로 서버를 구성할 수 있습니다.