Category: AWS Cloud Formation


AWS 기반 딥러닝 AMI 및 AWS CloudFormation 템플릿 업데이트

AWS CloudFormation은 아마존 웹 서비스 자원을 손쉽게 구성할 수 있는 도구로서 분산 딥러능 클러스터를 설정 및 운영하는 데 도움이 됩니다. Deep Learning 템플릿은 분산 딥러닝 학습을 수행하는 데 필요한 EC2 인스턴스 및 기타 AWS 리소스를 통해 클러스터를 시작할 수 있습니다.

최근 업데이트 된 Amazon Liunx Deep Learning AMIUbuntu Deep Learnin AMI (Apache MXNet, TensorFlow, Caffe, Theano, Torch 및 CNTK 프레임 워크 제공)를 사용할 수 있습니다.

deep-learning-ami-for-ubnutu

AWS CloudFormation Deep Learning 템플릿은 인스턴스가 프로비저닝에 실패한 경우 (대개 서버 제한에 걸린 경우에도) 가능한 최대 작업 가능 인스턴스 수를 기반으로 클러스터를 동적으로 조정하는 자동화 기능을 포함하여 다양한 추가 기능을 업데이트하였습니다.

또한, 이 템플릿을 사용하면 GPU 및 CPU 인스턴스 타입 중에서 선택할 수 있을 뿐 아니라 클러스터에 대해 Ubuntu 또는 Amazon Linux 환경에서 실행할 수있는 지원을 추가 할 수 있습니다. 또한, 새로운 기능을 제공하거나 기존 Amazon EFS 파일 시스템을 클러스터에 추가하여 코드/데이터/로그 및 결과를 쉽게 공유 할 수 있습니다.

자세한 내용을 보려면 AWS Labs – Deep Learning GitHub에 있는 튜토리얼을 참고하시기 바랍니다. 여기에는 MXNet 및 TensorFlow 프레임 워크를 사용하여 AWS에서 분산 딥러닝 트레이닝을 손쉽게 실행하는 방법을 알려드립니다.

참고 자료

 

AWS CloudFormation- YAML 포맷 지원, 상호 스택 참조 및 문자열 대체 기능 출시

AWS CloudFormation은 AWS 내 리소스 및 전체 인프라 스택을 템플릿 코드를 통해 작성 및 선언할 수 있습니다. 전체 스택을 정의하고, 각 자원 간의 상호 관계를 지정한 후, AWS에서 바로 프로비저닝을 하여 새로운 구성을 만들 수 있습니다. AWS CloudFormation의 애플리케이션 실행에 필요한 AWS 리소스는 물론 기타 관련 종속성 또는 런타임 파라미터를 추가할 수도 있습니다.

이러한 기능에 더해서 오늘 추가적으로 몇 가지 기능을 선보이게 되었습니다.

  • YAML 포맷 지원 – CloudFormation 템플릿을 YAML로 기술 가능
  • 상호 스택 참조 – 기존 스택에서 값을 내보내 다른 스택에서 사용 가능
  • 손쉬운 문자열 대체 – 템플릿 내 문자열 대체를 쉽게 가능

한 가지씩 살펴 보도록 하겠습니다.

YAML 포맷 지원
CloudFormation 템플릿을 YAML (YAML Ain’t Markup Language)로 정의할 수 있습니다. 지금까지는 JSON을 통해 템플릿을 작성하였습니다. YAML과 JSON의 표현력은 동일하지만 YAML은 사람이 좀 더 읽기 쉬운 형식으로 설계 되어 있습니다. 반면, JSON은 (솔직히) 그렇지 않습니다. YAML 기반 템플릿에서는 구두점의 사용이 적고, 값을 정의하거나 읽기가 매우 쉽습니다. 또한, 필요한 주석을 사용하는 것도 가능합니다. CloudFormation은 해시 조인, 알리아스 및 태그 등(바이너리, imap, 페어, TIMESTAMP 등)의 몇 가지 예외를 제외하고는 실질적으로 모든 YAML을 지원합니다.

YAML에서 CloudFormation 템플릿을 작성할 때 같은 최상위 구조(Description, Metadata, Mappings, Outputs, Parameters, ConditionsResources)를 사용합니다. 아래는 이러한 매개 변수 정의 예제를 보여줍니다.

YAML
Parameters:
  DBName:
    AllowedPattern: '[a-zA-Z][a-zA-Z0-9]*'
    ConstraintDescription: must begin with a letter and contain only alphanumeric
      characters.
    Default: wordpressdb
    Description: The WordPress database name
    MaxLength: '64'
    MinLength: '1'
    Type: String

YAML을 사용하면 생략된 새로운 구문을 사용하여 CloudFormation 함수를 참조 할 수 있습니다. 예를 들어, GetAtt, Base64FindInMap 등입니다. 기존 문법 ("Fn::GetAtt") 또는 새로운 태그 기반의 문법 (!GetAtt)을 사용할 수 있습니다. “!”는 태그를 위한 YAML 문법의 일부이며, 논리적인 “NOT” 연산자가 아니라는 점에 유의하십시오. 여기 과거의 문법입니다.

YAML
- Fn::FindInMap:
    - AWSInstanceType2Arch
    - Ref: InstanceType
    - Arch

새로운 문법은 아래와 같습니다.

YAML
!FindInMap [AWSInstanceType2Arch, !Ref InstanceType, Arch]

위에서 보시다시피 새로운 문법은 더 짧고 간결합니다. 그러나, 두 개의 태그를 인접하여 사용할 수 없음에 주의하세요. 오히려 두 양식을 섞어 중첩 할 수 있습니다. 예를 들어 !Base64 !Sub는 안되지만, !Base64 Fn::Sub는 유효합니다.

CloudFormation API 함수 (CreateChangeSet, CreateStack, UpdateStack 등)에서는 JSON 또는 YAML에서 템플릿을 사용할 수 있습니다. GetTemplate 함수는 원래 형식으로 템플릿을 반환합니다. 그리고, CloudFormation designer는 현재는 YAML 템플릿은 지원되지 않지만 향후 로드맵에 포함되어 있습니다.

상호 스택 참조
많은 AWS 고객은 하나의 “시스템” 스택을 사용하여 환경(VPC, VPC 서브넷, 보안 그룹, IP 주소 등)을 설정하고, 기타 여러 “응용 프로그램”스택을 사용하여 추가 자원(EC2 및 RDS 인스턴스, 메시지 큐 등)을 넣는 경우가 많습니다. 지금까지 애플리케이션 스택에서 시스템 스택에 의해 생성 된 리소스를 참조하는 방법이 간단하지 않았습니다.

한 가지 스택에서 만들어 낸 값을 얻어오기 위해 사용자 정의로 별도 자원을 작성하는 수고 없이도 다른 스택에서 사용할 수 있습니다. 첫번째 스택은 다음과 같이 값을 내보냅니다.

YAML
Outputs: 
  TSSG: 
    Value: !Ref TroubleShootingSG
    Export:
      Name: AccountSG

다른 스택에서는 새로운 ImportValue 함수를 사용하여 볼 수 있습니다.

YAML
EC2Instance:
  Type: AWS::EC2::Instance
  Properties:
    SecurityGroups:
      - !ImportValue AccountSG

내보내기 한 이름은 각 AWS 계정 및 리전에서 고유값이어야 합니다. 다른 스택에서 참조한 스택은 삭제할 수 없고, 값을 수정하거나 제거할 수 없습니다.

손쉬운 문자열 대체
대다수 CloudFormation 템플릿은 커맨드 라인, 파일 경로 및 스택이 생성 될 때까지 결정할 수 없는 다른 값 등을 만들기 위해 복잡한 문자열 처리를 하고 있습니다. 지금까지는 이 작업을 위해 fn::Join을 사용 해야 했습니다. 따라서, JSON 문법과 결합되면 이해하기 어렵고 관리도 쉽지않는 복잡한 템플릿이 만들어 집니다. 이를 단순화하기 위해, 우리는 새로운 대체 함수 인 fn::Sub를 만들었습니다. 이 함수는 변수(${variable_name}로 표시)를 원하는 값으로 대체합니다. 아래의 예를 참조하십시오.

YAML
configure_wordpress:
  commands:
    01_set_mysql_root_password:
      command: !Sub | mysqladmin -u root password '${DBRootPassword}'
      test: !Sub | $(mysql ${DBName} -u root --password='${DBRootPassword}' >/dev/null 2>&1 </dev/null); (( $? != 0 ))
    02_create_database:
      command: !Sub | mysql -u root --password='${DBRootPassword}' < /tmp/setup.mysql
      test: !Sub | $(mysql ${DBName} -u root --password='${DBRootPassword}' >/dev/null 2>&1 </dev/null); (( $? !=0))

${}${variable}를 만들 필요가 있을 때, ${!}${!variable}로 쓰면 됩니다.

추가적으로 AWS Key Management Service (KMS), EC2 Spot Fleet, 및 Amazon EC2 Container Service 지원도 새로 추가되었습니다. 더 자세한 것은 CloudFormation 출시 기록을 참고하시기 바랍니다.

정식 출시
새 기능은 오늘 부터 모든 리전에서 하용 가능합니다.

AWS CloudFormation에 대해 관심이 있으시다면, 다가오는 AWS Infrastructure as Code 온라인 세미나(영어로 진행)에 참여해 보시기 바랍니다. 인프라를 코드로 작성하는 이점 및 모범 사례, 실전 방법 등을 배우실 수 있습니다.

Jeff;

이 글은 AWS CloudFormation Update – YAML, Cross-Stack References, Simplified Substitution의 한국어 번역입니다.

AWS CloudFormation Designer – 신규 시각적 리소스 편집 도구

AWS CloudFormation을 통해 손쉽게 AWS 리소스를 “스택(Stack)”이라는 이름으로 관리할 수 있습니다. 간단한 템플릿 파일을 통해 순서대로 자원을 생성하고 이를 연결하는 작업을 자동으로 해주게 됩니다.

CloudFormation 템플릿 파일은 간단한 JSON 형식의 텍스트 파일이지만, AWS 리소스의 이름, 속성, 관계 및 프로그램 설치에 대한 정보들을 기술할 수 있습니다. 물론 텍스트 기반 설정 파일은 강력한 기능을 제공하지만, 시각적으로 연결 정보를 명확히 보여주는 것도 매우 필요합니다.

오늘 새로운 AWS CloudFormation Designer라는 기능을 선보입니다. 본 시각화 도구는 드래그 앤 드롭 방식으로 CF 템플릿을 만들고 편집 가능한 것으로, AWS 리소스를 쉽게 추가, 변경 및 삭제할 수 있고 JSON 포맷의 변경도 손쉽게 가능합니다. 템플릿을 변경해서 stack을 실행하면 기존 설정을 손쉽게 변경할 수도 있습니다.

기능 살펴 보기
CloudFormation Designer의 기능을 한번 살펴 보겠습니다.

디자인 영역은 중앙에, 메뉴는 왼쪽에 하단에 JSON 편집기가 위치해 있습니다. 간단하게 AWS 자원을 메뉴에서 선택해서 디자인 영역으로 드래그하면 됩니다.아래는 EC2 인스턴스와 3개의 EBS 볼륨을 표시한 것입니다.

인스턴스와 볼륨과의 관계는 “점”을 서로 연결함으로서 가능하며 각 인스턴스의 라벨(AWS::EC2::Volume)을 찾아 연결합니다.

각 객체를 선택할 수도 있고 JSON 편집기를 통해 편집도 가능합니다.

아래에 좀 더 복잡한 구성도가 있습니다.

파란 점선은 리소스 대 리소스의 참조 관계를 나타냅니다.(CF의 Ref 속성). 예를 들어, the DBSecurityGroup (왼쪽 중간)은 EC2 SecurityGroup (왼쪽 상단)을 참조합니다. (JSON 정보 참고)

시각화 도구가 편리하기는 하지만, 모든 기능을 다 수행해 줄 수는 없기 때문에 템플릿 내에 AWS 리소스에 대한 명확한 이해를 하실 필요가 있습니다. 각 리소스에서 오른쪽 마우스 클릭을 하면 메뉴를 통해 ?를 열면 각종 기술 문서 정보로 연결해 주게 됩니다:

“눈(eye)” 아이콘을 누르면, 리소스 정보를 편집할 수 있습니다. 구성이 완료되면 스택(stack)을 실행 할 수 있습니다.

샘플 템플릿도 실행해 볼 수 있습니다.

AWS 리소스의 시각화 레이아웃 데이터(위치 및 크기)는 템플릿에 다시 저장됩니다.

추가 서비스 지원
아래 서비스도 추가로 지원됩니다.

CF에서 지원되는 전체 AWS 서비스 목록은 지원 서비스 및 리소스에서 확인하실 수 있습니다.

지금 이용하기
신규 CloudFormation Designer는 오늘 부터 바로 사용 가능하며 CloudFormation 관리 콘솔에서 사용하실 수 있습니다. 추가 비용은 없으며 AWS 자원 사용을 하는 비용만으로 이용하실 수 있습니다.

Jeff;

이 글은 New – AWS CloudFormation Designer + Support for More Services의 한국어 번역입니다.