대학 고객을 위한 AWS 길라잡이

AWS 계정 안전하게 지키기


AWS Well-Architected helps cloud architects build a secure, high-performing, resilient, and efficient infrastructure for their applications and workloads. The Security Baseline Workshop aligns to the security pillar of the AWS Well-Architected Framework. The security pillar describes how to take advantage of cloud technologies to protect data, systems, and assets in a way that can improve your security posture. This helps you meet your business and regulatory requirements by following current AWS recommendations.

You can assess your adherence to Well-Architected best practices using the Well-Architected Tool in your AWS account.

Security and compliance are a shared responsibility between AWS and the customer. The shared responsibility model 
is often described by saying that AWS is responsible for the security of the cloud (that is, for protecting the infrastructure that runs all the services offered in the AWS Cloud), and you are responsible for the security in the cloud (as determined by the AWS Cloud services that you select). In the shared responsibility model, implementing the security controls in this document is part of your responsibility as a customer.

Module-0-Image-2.jpg

1. MFA on Root account

슈퍼 권한이 있는 Root Account는 비밀번호는 특히 중요합니다. 사고로 비밀번호가 노출 되더라도 MFA 를 설정해 놓으면 로그인 시 MFA 장치가 없는 경우 최종 로그인이 실패하기 때문에 더 안전하게 AWS 계정을 지킬 수 있습니다.
간혹, 다른 사이트에서 사용하는 계정의 비밀번호와, Root Account의 비밀번호가 동일하게 이용하시다가, 다른 사이트 사용자 계정의 비밀번호가 노출되어 Root Account가 침해되는 사례가 있었습니다.

Action Plan - Protect the Root User 구성 가이드 

10분안에 정복하는 안전한 계정 관리를 위한 IAM 모범 사례

2. Amazon S3 Bucket Permissions

공개 액세스 권한이 있거나, Any Authenticated AWS User 에 대한 액세스를 허용하는 S3 버킷을 확인합니다.
공개 액세스 접근으로 노출된 S3는 IAM > Access Analyzer 메뉴에서 확인하시기 바랍니다. 의도되지 않은 경우 권한을 제한 하는 것을 권장합니다.
관리자 권한을 가지고 있지 않은 경우, S3 Bucket 생성, 삭제, 설정 변경 권한을 제한하시기 바랍니다.

Action Plan - Prevent Public Access to Private S3 Buckets 구성 가이드

Action Plan - 공개 액세스 접근으로 노출된 S3 버킷 확인

3. Security Groups - Specific Ports Unrestricted

필요한 IP 주소로만 액세스를 제한하시기 바랍니다.
더 제한적인 규칙을 만든 후에는 지나치게 허용되는 규칙을 삭제해야 합니다. 예를 들어 SSH 액세스 허용을 위한 22 Port라던가, MySQL 3306 Port등은 불특정 다수 (0.0.0.0/0) 에 규칙은 실제 접근이 필요한 IP만 구별하여 설정하시고, 해당 설정은 삭제하시기 바랍니다.

4. CloudTrail

감사 목적으로 Trail 정보를 S3에 저장합니다.

Action Plan - Turn CloudTrail On 구성가이드

5. IAM Password Policy

IAM User의 비밀번호 복잡도를 설정하여, 강력한 비밀번호로 설정할 수 있도록 강제화 할 수 있습니다.

Action Plan - Set a password policy to ensure strong passwords 구성가이드

6. IAM Access key rotation

최근 보안 사고는 해커가 AWA Account 탈취한 후, 몇 개월 동안 꾸준하게 고객의 정보를 수집하여 다각도로 피해를 주는 사례들이 늘어나고 있습니다. 이러한 해킹 사고는 일단 AWS Account가 침해 되더라도 고객이 이를 인지하지 못하는 경우가 있습니다. 주기적 비밀번호 변경 이외에도, IAM Access Key를 주기적으로 만료하고 새로 생성하여 사용하는 것을 권장합니다. 관리가 소홀하여 해당 Access Key와 Secret Access Key가 노출 되었다 하더라도 이러한 관리로 이 키 관련 정보를 무효화할 수 있습니다.

AWS Config를 활용한 Access Key 자동 교환 구성하기 

AWS Credential Report 로 AWS Account에서 발행한 전체 Access Key 상태 확인하는 방법


Note, AWS 계정을 파트너사에서 관리하는 경우 관련 설정이 파트너사 별로 다를 수 있으니 이런 경우, 파트너사로 문의하시기 바랍니다.

참고 자료

쉽게 활용 해 볼 수 있는 AWS IAM 모범 사례를 참고하시면 좋습니다.

10분안에 정복하는 안전한 계정 관리를 위한 IAM 모범 사례 (Youtube) 

AWS 계정 안전하게 지키기 위해서 꼭 보셔야 하는 문서들입니다.

AWS Perspective Guidance on Baseline Security

AWS 계정 안전하게 지키기 Tip 에 대해서 항목별로 적용하는 방법은 아래 링크를 참고하시기 바랍니다.

Security Baseline - Basic Playbook

루트 계정 보호하기 - OTP 설정 (필수 영상)

최근 클라우드 환경에서 계정의 OTP 설정은 필수로 자리 매김하고 있습니다. 유명연예인들의 아이폰, 안드로이드의 클라우드 계정 탈취 사건 등 해커들의 계정 탈취 수법은 날로 발전해가고 있습니다. 이와 같은 계정 탈취를 방어하기 위한 OTP 설정은 필수입니다. 5분만 투자하면 OTP 설정을 통해 계정을 더 안전하게 보호할 수 있습니다. 데모와 함께 따라해보세요!

연구자를 위한 AWS 학습 기초

클라우드 컴퓨팅은 인터넷을 통해 종량제 요금제로 IT 리소스를 온디맨드 방식으로 제공하는 서비스입니다. 물리적 데이터 센터와 서버를 구매, 소유, 유지 관리하는 대신 Amazon Web Services(AWS)와 같은 클라우드 제공업체에서 컴퓨팅 성능, 스토리지, 데이터베이스와 같은 기술 서비스를 필요에 따라 이용할 수 있습니다.

AWS는 컴퓨팅, 스토리지, 데이터베이스, 네트워킹, 분석, 머신 러닝 및 인공 지능(AI), 사물 인터넷(IoT), 모바일, 보안, 하이브리드, 가상 및 증강 현실(VR 및 AR), 미디어, 애플리케이션 개발, 배포 및 관리를 위한 200개 이상의 완전한 기능을 갖춘 서비스를 제공합니다.

Amazon Elastic Compute Cloud(EC2)를 비롯한 몇 가지 기본적인 AWS 서비스를 살펴보면서 클라우드 여정을 시작하겠습니다. 
- Amazon Elastic Compute Cloud (Amazon EC2)
- Amazon Simple Storage Service (Amazon S3)
- AWS Cloud9

참고사항
- 본 워크샵의 운영 추천 시간은 최소 2시간입니다.
- 본 워크샵의 실습시간이 3시간 정도 이내로 짧은 경우 워크샵 내용 중 (옵션)과 더불어 태그 설정은 필수적으로 진행하지 않습니다.

연구자를 위한 AWS 학습 기초

워크샵 시작 전 준비사항

실습을 시작하기 전, AWS 계정으로 시작 혹은 AWS WorkShop Studio 시작 두 가지 지침서 중 하나를 선택해서 AWS 서비스를 사용할 계정을 준비합니다.

준비가 완료되면 다음 페이지부터 실습을 진행하면 됩니다.

또한, 실습을 하는 동안 검증된 호환성을 위하여 Mozilla Firefox 또는 Google Chrome Browser 을 사용하기를 권장합니다.

연구자를 위한 AWS 학습 기초

Cloud9

AWS Cloud9는 코드 편집기, 디버거, 터미널이 있는 통합 개발 환경(IDE)입니다. 클라우드에서 가상 서버를 제공하는 웹 서비스인 Amazon Elastic Compute Cloud(EC2)에서 실행됩니다. Cloud9은 EC2 인스턴스의 시작과 종료를 처리하므로 사용자가 직접 할 필요가 없습니다. 또한 Cloud9에는 웹 인터페이스가 있어 SSH와 같은 특수 포트를 사용할 필요 없이 가상 서버에 간편하게 연결할 수 있습니다.

Cloud9는 클라우드 애플리케이션을 개발하고 실행하기 위해 보안에 중점을 둔 안정적이고 고성능 실행 환경인 Amazon Linux 2를 실행합니다.

AWS Cloud9 콘솔 또는 코드를 사용하여 AWS Cloud9 EC2 개발 환경을 생성할 수 있습니다. 여기서는 콘솔을 통해 생성하는 방법을 안내합니다. (참고)


AWS 웹사이트의 콘솔화면에서 cloud9 을 검색하여 서비스 페이지로 접속합니다.

Screenshot 2024-05-08 at 8.55.42 PM.png

Cloud9의 AWS 관리 콘솔 페이지는 다음과 같습니다.

Screenshot 2024-05-08 at 8.56.25 PM.png

1) Cloud9 환경 생성하기

환경 만들기 버튼을 선택합니다(환경 만들기 버튼이 보이지 않는 경우 아이콘을 선택하여 왼쪽 탐색 평면을 확장하고 환경을 선택한 다음 환경 만들기 버튼을 선택할 수 있습니다).

Screenshot 2023-10-18 at 11.19.38 AM.png

이제 Cloud9 환경을 생성할 수 있는 옵션이 표시됩니다:

Screenshot 2023-10-18 at 11.21.45 AM.png

Cloud9 환경의 이름과 설명(선택 사항)을 입력합니다. 생성 옵션을 아래로 스크롤하여 모든 항목을 기본값으로 설정합니다.

Cloud9 시간 제한

Cloud9의 기본 "시간 초과" 값은 30분입니다. 환경에 연결된 모든 웹 브라우저 인스턴스가 닫히면 Cloud9는 해당 시간 동안 기다린 다음 환경의 EC2 인스턴스를 종료합니다. 이렇게 하면 Cloud9 환경에 적극적으로 액세스하지 않을 때(하루 업무를 종료하기 전에 EC2 인스턴스를 중지하는 것을 잊어버리는 경우) EC2 비용을 절약할 수 있습니다. 이 워크샵 중에 Cloud9이 시간 초과될 가능성은 거의 없지만, 시간 초과가 발생하면 언제든지 Cloud9 콘솔로 돌아가서 환경을 다시 시작하고 중단한 부분부터 다시 시작하도록 선택할 수 있습니다.

페이지 오른쪽 하단에서 생성 버튼을 선택합니다.Screenshot 2023-10-18 at 11.22.01 AM.png

환경이 생성되면 Cloud9 환경 목록에 해당 환경이 표시됩니다:

Screenshot 2023-10-18 at 11.26.40 AM.png

이제 Cloud9 IDE 열에서 열기 링크를 선택합니다.Cloud9 로딩 페이지가 표시됩니다. Cloud9 IDE가 시작되는 데 몇 분 정도 걸릴 수 있습니다.

Screenshot 2023-10-18 at 11.52.24 AM.png

EC2에서 실행되는 Cloud9 환경에 오신 것을 환영합니다! 클라우드에 웹 인터페이스가 있는 가상 서버를 만들었습니다.

Screenshot 2023-10-18 at 11.27.52 AM.png

2) Bash 셸 사용해보기

Cloud9 환경의 하단에는 Linux 명령줄(Bash 셸)이 있습니다. 오른쪽에 있는 "내용 복사" 겹쳐진 사각형 아이콘을 선택하여 아래 코드를 복사한 다음, Bash 셸 창을 선택하고 Ctrl-V(Mac의 경우 ⌘-V)를 사용하여 코드를 창에 붙여넣은 다음 Return 키를 누릅니다.

echo "Hello from Cloud9"

Bash 셸 창의 결과는 다음과 같아야 합니다:

Screenshot 2023-10-18 at 11.28.41 AM.png


이제 콘솔로 돌아가서 Cloud9 환경이 실행되는 EC2 인스턴스를 확인하겠습니다.

연구자를 위한 AWS 학습 기초

리눅스 머신 실행

AWS 관리 콘솔 검색 창에 EC2를 입력합니다.

Screenshot 2023-09-26 at 10.49.54 PM.png

EC2를 선택하여 EC2 대시보드를 엽니다.

인스턴스는 그래픽 사용자 인터페이스(콘솔) 또는 명령줄 스크립트를 통해 시작할 수 있습니다. 먼저 EC2 대시보드라고 하는 그래픽 콘솔 인터페이스부터 시작하겠습니다.

대시보드의 레이아웃에 익숙해지는 데 몇 분 정도 시간을 투자하세요:

Screenshot 2024-05-08 at 9.01.22 PM.png

신규 키페어 생성하기

이 실습 섹션에서는 Linux 인스턴스를 생성하고 로그인하여 몇 가지 Linux 명령을 실행합니다. 인스턴스에 로그인하려면 SSH를 통해 연결할 수 있어야 합니다. 인스턴스에 액세스하기 위한 몇 가지 보안 계층이 있으며, AWS에서 기본적으로 사용하도록 설정되어 있습니다. 그 중 하나는 (아주 대략적으로) 고유한 사용자 이름과 비밀번호와 비슷하다고 생각할 수 있는 SSH 키 쌍을 사용하는 것입니다.

다음 단계에서는 새 Linux 인스턴스에 로그인하는 데 사용할 새 SSH 키 쌍을 만드는 방법을 간략하게 설명합니다.

1. AWS 관리 콘솔에 로그인하고 Amazon EC2 콘솔(https://console.aws.amazon.com/ec2)을 엽니다.

2. AWS 관리 콘솔의 오른쪽 상단 모서리에서 원하는 AWS 지역(예: N.Virginia 또는 Seoul)에 있는지 확인합니다.

실습을 하면서 가끔 사용하는 브라우저의 국가 설정에 의해 다른 리전으로 리전 정보가 바뀌는 경우가 있습니다. 워크샵에 사용하고 있는 리전 정보가 맞는지 꼭 확인해주세요. 다른 리전일 경우 실습이 정상적으로 진행되지 않을 수 있습니다.

Screenshot 2023-09-26 at 10.53.20 PM.png

Screenshot 2024-05-08 at 9.02.12 PM.png

참고: 만일 실습환경이 Seoul 일 경우 위와 같이 선택될 수도 있습니다.

3. 왼쪽 탐색창의 Network & Security 섹션에서 Key Pairs 을 클릭합니다. 그러면 SSH 키 쌍을 관리할 수 있는 페이지가 표시됩니다.

Screenshot 2023-09-26 at 10.57.19 PM.png

4. Key Pairs 페이지에서 브라우저 창 상단의 Create Key Pair 버튼을 클릭합니다.

Screenshot 2023-09-26 at 10.59.25 PM.png

5. 결과 팝업 창에서 원하는 키 쌍 (Key pair) 이름을 입력하고 EC2 인스턴스에 연결하는 데 사용할 ssh 클라이언트에 따라 .ppk 또는 .pem을 선택합니다(PuTTY의 경우 .ppk 선택). Windows 하위 시스템 Linux, MacOS-X ssh 클라이언트, Linux ssh 클라이언트, Windows ssh 클라이언트의 경우 .pem을 선택합니다.)

기본값 그대로 Key pair type RSA를 그리고 실습에서 Cloud9 을 사용할 것이므로 Private key file format으로는 .ppk 를 선택합니다.

(Optional) Add new tag 를 클릭합니다. 태그는 AWS에서 리소스를 추적하는 효율적인 방법입니다. 이 리소스에 User(이니셜 입력)와 Grant(숫자를 입력하되 일관성 있게 입력)이라는 두 개의 태그를 추가하겠습니

Screenshot 2024-05-09 at 8.07.33 AM.png

마지막으로 키페어를 만들기 위해 Create key pair를 선택합니다.

이 워크샵의 목적을 위해 여러 명이 동일한 AWS 계정을 사용하는 경우에는 다른 참가자가 제공한 키 쌍 이름과 충돌하지 않도록 고유한 키 쌍 이름을 제공하세요. 쉽게 식별할 수 있도록 키 쌍에 이름 이니셜을 사용할 수 있습니다.

Screenshot 2024-05-09 at 8.04.53 AM.png

6. 생성한 키 쌍이 시스템에 자동으로 다운로드됩니다. 브라우저의 안내에 따라 파일을 기본 다운로드 위치에 저장합니다. 파일이 다운로드되었는지 확인하고 파일을 찾을 수 있는지 확인합니다. 방금 다운로드한 .ppk/pem 파일의 전체 경로를 기억하세요. 이 파일에는 향후 SSH 연결을 위한 개인 키가 포함되어 있습니다.

7. 화면 상단에 Successfully created key pair라는 메시지가 표시됩니다. 생성한 키 쌍을 볼 수 있습니다. 

Screenshot 2024-05-09 at 8.08.47 AM.png


EC2 인스턴스 실행하기

이제 EC2 Linux 기반 인스턴스를 시작합니다.

1. AWS 관리 콘솔로 돌아가서 Amazon EC2 대시보드를 엽니다

2. AWS 관리 콘솔의 오른쪽 상단 모서리에서 원하는 AWS 지역(예: N. Virginia 또는 Seoul)에 있는지 확인합니다. 

Screenshot 2023-09-26 at 10.53.20 PM.png

3. Launch instance를 클릭한 다음 드롭다운 메뉴에서 Launch instance를 다시 클릭합니다.

Screenshot 2023-09-26 at 11.04.50 PM.png

4. Launch an instance 페이지에서 인스턴스에 대해 원하는 이름을 지정(작성)할 수 있습니다.

5. "추가 태그 추가" 및 "태그 추가"를 클릭합니다. 인스턴스에 대해 제공한 "이름"을 찾을 수 있습니다. 이제 키와 값을 입력합니다. 이 키(더 정확하게는 태그)는 인스턴스가 시작되면 콘솔에 나타납니다. 이를 통해 복잡한 환경에서 실행 중인 머신을 쉽게 추적할 수 있습니다. 이전에 키 쌍에 사용한 것과 유사한 태그를 추가로 생성하여 이 머신에 사용자와 부여 키를 지정하고 동일한 값을 입력합니다. 준비가 되면 Resource types 아래에서 Instances, Volumes, Network interfaces 를 선택합니다. 

Screenshot 2024-05-09 at 7.58.20 AM.png

Screenshot 2024-05-09 at 8.09.18 AM.png

Screenshot 2024-05-09 at 8.10.28 AM.png

6. 이제 첫 번째 Amazon Linux 2023 AMI를 선택하고 Architecture 드롭다운 목록에서 64-bit(x86)를 선택합니다.

설치된 패키지의 ami-xxxxxxxxx 레이블 및 특정 버전은 아래 이미지와 다를 수 있습니다.

Screenshot 2023-09-26 at 11.08.49 PM.png

7. Instance type에서 드롭다운 화살표를 클릭하고 검색창에 c5.2xlarge를 입력합니다.

일반적으로 작업/분석에 필요한 RAM 및 CPU의 양을 분석하여 사용 사례에 맞는 적정 크기의 인스턴스를 선택해야 합니다. 

Screenshot 2023-09-26 at 11.09.52 PM.png

8. Key pair (login) 아래의 드롭다운 목록에서 이 실습의 시작 부분에서 만든 키 쌍을 선택합니다. 여기 예시는 앞에서 만들었던 brandon-keypair 입니다. 여러분들이 각자 만들었고 사용할 Key pair를 선택해주세요.

Screenshot 2024-05-09 at 8.11.29 AM.png

9. 다음으로 Network settings 에 대해 Edit을 클릭합니다. SubnetSecurity group 세부 정보를 입력하라는 메시지가 표시됩니다. 보안 그룹은 방화벽 규칙이 됩니다. 

Screenshot 2024-05-09 at 8.00.35 AM.png


    a. 서브넷(Subnet) 필드는 특정 가용 영역(AZ)에서 인스턴스를 시작하도록 구성할 수 있습니다. 이 워크샵에서는 기본값을 유지하지만, 이렇게 하면 컴퓨터의 위치를 제어할 수 있습니다.
    b. 새 Security group nameDescription을 입력합니다. 참고: 이 실습에서는 "[사용자 이니셜]-sec-group"을 사용합니다.
    c. TCP 포트 22를 허용하는 기존 SSH 규칙이 있는지 확인합니다.
    d. 어디서든 연결을 허용하려면 Source type 열 아래의 드롭다운 상자를 선택하고 0.0.0.0/0에 해당하는 Anywhere를 선택합니다.

Screenshot 2024-05-09 at 8.12.30 AM.png

10. Configure storage 에서 인스턴스에 스토리지 및 디스크 드라이브를 수정하거나 추가할 수 있습니다. 이 실습에서는 스토리지 기본값을 그대로 사용하겠습니다.

Screenshot 2023-09-26 at 11.12.12 PM.png

11. Summary에서 구성을 검토하고 Launch Instance을 클릭합니다.

Screenshot 2024-05-09 at 8.01.43 AM.png

이제 인스턴스가 시작되며 잠시 시간이 걸릴 수 있습니다. Successfully initiated launch of instance 라는 메시지와 함께 Launch Status 페이지가 표시됩니다.

Screenshot 2024-05-09 at 8.02.33 AM.png

12. 페이지 오른쪽 하단에서 View all Instances를 클릭하여 EC2 인스턴스 목록을 확인합니다. 인스턴스를 클릭합니다. 초기화 프로세스를 거치게 됩니다. 인스턴스가 시작되면 Linux 서버는 물론 인스턴스가 속한 가용 영역(Availability Zone)과 공개적으로 라우팅할 수 있는 DNS 이름이 표시됩니다. 

Screenshot 2023-10-06 at 11.39.11 PM.png

SSH 를 통한 EC2 인스턴스 접속

Screenshot 2023-09-26 at 11.17.14 PM.png

Screenshot 2023-09-26 at 11.19.01 PM.png

각 사용자의 OS 별로 아래의 내용을 참고하되 위와 같이 Connect 버튼을 눌러서도 쉽게 명령어를 참고할 수 있습니다.

사용되는 AMI는 Amazon Linux 머신의 AMI이므로 사용자 이름은 "ec2-user"가 됩니다. 더 많은 정보는 여기를 참고하세요.

For Amazon Linux 2023, Amazon Linux 2, or the Amazon Linux AMI, the user name is ec2-user.
For a CentOS AMI, the user name is centos or ec2-user.
For an Ubuntu AMI, the user name is ubuntu.

아래의 EC2 접속 방법 중 선호하는 방법 1가지로 사용하면 됩니다. 여기서는 로컬에 설치된 Putty 나 Terminal 프로그램이 아니라 앞 단계에서 만들었던 Cloud9 환경에서 접속 하는 방법을 안내합니다.

Connecting EC2 using Cloud9 (추천)

1. 키페어를 업로드합니다.

{본인의 키페어 이름}.pem

Screenshot 2023-10-18 at 12.28.40 PM.png

2. 해당 키페어를 사용해 EC2에 접속합니다.

키페어 파일에 대하여 사용가능하게 파일 권한 수정

chmod 400 /path/my-key-pair.pem

주어진 키페어를 사용해 ssh로 EC2 서버 로그인

ssh -i /path/my-key-pair.pem ec2-user@<ip-address>

Screenshot 2024-05-09 at 8.26.39 AM.png

로컬 컴퓨터의 운영체제에 따라 로컬 컴퓨터에서 Linux 인스턴스로 연결하는 데 필요한 옵션이 결정됩니다. 다음은 Windows에서 PuTTY 또는 OpenSSH를 사용하여 연결하는 방법, Linux 및 MacOS-X에서 ssh 클라이언트를 사용하여 연결하는 방법입니다. Cloud9 환경이 아니라면 필요시 아래 안내에 따라 각자 맞는 방식으로 접속할 수도 있습니다.

Connecting from Windows using PuTTY, MobaXterm, Windows Subsystem for Linux, OpenSSH (mac OS)

Connecting from Windows using PuTTY

We will now use the private .ppk file of the key pair generated earlier to open a SSH session to the EC2 instance.

  1. Start the PuTTY application.

  2. Enter in the IP address of the EC2 instance in the Host Name (or IP address) field.

  3. To save the session (so we dont have to repeat the configuration everytime) provide a name in the Saved Sessions field.

  4. In the left navigation pane under Connections click on SSH and next click on Auth.

  5. In the Private key file for authentication field click Browse and browse in the .ppk file downloaded when creating the key pair earlier.

  6. Next in the left navigation pane click on Session (scroll up if you need to) and and further click on Save to save the session.

  7. Next click on Open to start the SSH session.

  8. PuTTy will now attempt to start an SSH Session.

NOTE: You will get a security alert The Servers host key is not cached in the registry, click on Yes to continue.

  1. You will now be presented with the login as prompt.

  2. At the login as prompt type ec2-user and hit enter.

NOTE: Username to be used here is ec2-user if your image is Amazon Linux OS and ubuntu if your image is Ubuntu Linux OS.

You would have now logged into the EC2 instance on AWS.


Connecting from Windows using MobaXterm

We will use the private .pem key pair to open an SSH session to the EC2 instance.

  1. Start the MobaXterm application.

  2. To open a session, click on Session in the top-left corner, then click SSH.

  3. Enter in the IP address of the EC2 instance in the Host Name field.

  4. To the right, select username and enter your username for the session.

NOTE: Username to be used here is ec2-user if your image is Amazon Linux OS and ubuntu if your image is Ubuntu Linux OS.

  1. Below, click on Advanced Settings, and select private key (use your .pem file).

  2. Click Ok.

MobaXterm will have logged you in to your EC2 instance.


Connecting from Windows using Windows Subsystem for Linux

We will now use the private .pem file of the key pair generated earlier to open a SSH session to the EC2 instance.

  1. Copy the private key from Windows to WSL - In a WSL terminal window, copy the .pem file (for the key pair that you specified when you launched the instance) from Windows to WSL. Note the fully-qualified path to the .pem file on WSL to use when connecting to your instance.
cp /mnt/<Windows drive letter>/path/my-key-pair.pem ~/WSL-path/my-key-pair.pem
  1. In a terminal window, use the ssh command to connect to the instance. Specify the path and file name of the private key (.pem), the user name for your instance, and the public DNS name or IP Address.

NOTE: Username to be used here is ec2-user if your image is Amazon Linux OS and ubuntu if your image is Ubuntu Linux OS.

sudo ssh -i /path/my-key-pair.pem ec2-user@<ip-address>

You will see the following response:

The authenticity of host '<ip-address>'
can't be established.
RSA key fingerprint is 1f:51:ae:28:bf:89:e9:d8:1f:25:5d:37:2d:7d:b8:ca:9f:f5:f1:6f.
Are you sure you want to continue connecting (yes/no)?
  1. Enter Yes

you will now be logged into the EC2 Instance.


Connecting using SSH on Linux & MacOS and OpenSSH on Windows

We will now use the private .pem file of the key pair generated earlier to open a SSH session to the EC2 instance.

  1. In a terminal window, use the ssh command to connect to the instance. Specify the path and file name of the private key (.pem), the user name for your instance, and the public DNS name or IP Address of your instance.

NOTE: You might need to change the permissions of the key file by running the chmod command as follows

NOTE: Username to be used here is ec2-user if your image is Amazon Linux OS and ubuntu if your image is Ubuntu Linux OS.

chmod 400 /path/my-key-pair.pem
ssh -i /path/my-key-pair.pem ec2-user@<ip-address>

You see a response like the following:

The authenticity of host 'ec2-198-51-100-1.compute-1.amazonaws.com (198-51-100-1)' can't be established.
ECDSA key fingerprint is l4UB/neBad9tvkgJf1QZWxheQmR59WgrgzEimCG6kZY.
Are you sure you want to continue connecting (yes/no)?
  1. Enter Yes

You will now be logged into the Instance.

이에 대한 자세한 안내는 다음 링크를 참조하세요: PuTTY, Windows Susbsystem for Linux, MacOS-X ssh Client, Linux ssh client

Linux 명령 실행

몇 가지 Linux 명령을 실행하여 몇 가지 소프트웨어 패키지를 설치해 보겠습니다. 다음 명령을 입력하고 필요한 경우 y를 누른 다음 Enter 키를 누릅니다. 이제 시작한 인스턴스는 완전히 비어 있으며 다운로드한 프로그램이나 소프트웨어가 포함되어 있지 않습니다. 처음부터 새로 구축해야 합니다.

From yum (nmap): 네트워크 도구를 설치하기 위해

sudo yum install -y nmap

From source (seqtk):

sudo su -
yum install git make
cd /usr/local/src
git clone https://github.com/lh3/seqtk.git

cd seqtk/
make

Oops! 명령이 실패했습니다. 아직 뭔가 빠졌습니다. 이제 gcc, zlib-devel을 설치합니다:

yum install -y gcc zlib-devel
make

이제 명령이 인식되어야 합니다! 이제 됐어요. seqtk를 다시 시도합니다:

./seqtk

보시다시피, 기본 이미지는 운영 체제만 깔끔하게 초기 설치한 것입니다. 이 이미지는 필요한 소프트웨어가 정확히 설치되도록 사용자 지정하는 데 적합하지만 약간의 설정이 필요합니다. 또 다른 옵션은 이미 일부 소프트웨어가 설치되어 있는 AMI(Amazon 머신 이미지)를 사용하는 것입니다. 본 실습에서 이후에 사용할 AMI에는 꽤 많은 유전체학 소프트웨어가 사전 설치되어 있어 누구나 사용할 수 있습니다. 다음 섹션에서 이 작업을 수행하겠습니다.

가상컴퓨터 멈추기 및 종료

이제 인스턴스를 중지하고 종료하겠습니다. 이 단계를 수행하기 전에 강사의 말을 들어보세요. 교육 목적으로 단계를 검토하도록 요청할 수 있지만 실제로 인스턴스를 종료하지는 않을 수 있습니다.

1. AWS 콘솔로 돌아갑니다. AWS 관리 콘솔 검색창에 "EC2"를 입력하거나 왼쪽 메뉴에서 EC2 Dashboard 항목을 클릭합니다.

2. EC2를 선택하여 EC2 대시보드를 엽니다.

3. 왼쪽 탐색 창의 Instances 섹션에서 Instances를 클릭하여 실행 중, 중지된 인스턴스 및 종료된 인스턴스를 모두 확인합니다.

4. 생성된 인스턴스를 선택하고 Instance state 를 클릭한 다음 Stop instance 를 클릭합니다.

Screenshot 2023-09-26 at 11.26.35 PM.png

5. Stop를 클릭하여 인스턴스 중지를 확인합니다.

이제 인스턴스가 중지를 시도하고 인스턴스 상태 열에 중지됨이 표시될 때까지 인스턴스가 중지될 때까지 몇 분간 기다립니다.

Screenshot 2023-09-26 at 11.27.07 PM.png

6. 인스턴스 목록에서 EC2 인스턴스를 선택합니다. Instance State를 클릭한 다음 Terminate instance를 클릭합니다.

Screenshot 2023-09-26 at 11.30.49 PM.png

7. 인스턴스 종료 대화 상자에서 EBS 지원 인스턴스에서는 인스턴스가 종료될 때 루트 EBS 볼륨이 삭제되는 것이 기본 동작입니다. 로컬 드라이브의 모든 스토리지는 손실됩니다. 계속하려면 Terminate를 선택합니다.

Screenshot 2023-09-26 at 11.31.00 PM.png이제 인스턴스가 종료됩니다.

8. 몇 분 후에 인스턴스의 Instance state가 업데이트되어 Terminated을 표시합니다.

Screenshot 2023-09-26 at 11.33.02 PM.png

연구자를 위한 AWS 학습 기초

공유 AMI로부터 가상 머신 시작하기

AMI 소개

Amazon Machine Image(AMI)는 인스턴스를 시작하는 데 필요한 정보를 제공하는 AWS에서 지원되고 유지 관리되는 이미지입니다. 인스턴스를 시작할 때 AMI를 지정해야 합니다. 동일한 구성의 인스턴스가 여러 개 필요할 때는 한 AMI에서 여러 인스턴스를 시작할 수 있습니다. 서로 다른 구성의 인스턴스가 필요할 때는 다양한 AMI를 사용하여 인스턴스를 시작할 수 있습니다.

AMI에 관한 보다 자세한 사항은 AWS 공식문서의 다음 링크를 참고해주세요.

워크샵 소개

이 워크샵 섹션에서는 워크샵의 뒷부분에서 분석을 실행하는 데 사용할 사전 제작된 AMI에서 자체 EC2 Linux 인스턴스를 설정하는 방법을 안내합니다.

여기서는 National University of Singapore (NUS와 Genome Institute of Singapore (GIS)의 Chen Lab에서 구축한 이미지를 사용할 것입니다. 여기에는 박테리아(및 일반) 유전체학에 유용한 많은 공통 도구가 설치되어 있습니다. 이 AMI에 무엇이 있고 어떻게 설정되었는지는 함께 제공되는 GitHub 리포지토리에 문서화되어 있습니다. 이러한 지침은 다른 시스템에서 동일한 소프트웨어를 설정하려는 경우 유용할 수 있으며, 자신의 작업을 위해 다른 소프트웨어를 설치할 때 몇 가지 힌트를 얻을 수 있습니다.

구체적으로 다음과 같은 방법을 배웁니다:

a. AWS 관리 콘솔에 로그인하여 탐색합니다.

b. AMI에서 Amazon EC2 인스턴스를 생성합니다.

c. EC2 인스턴스에 SSH로 접속하여 Linux 명령을 실행합니다.

EC2 대시보드 시작

1. AWS 관리 콘솔 검색 창에 EC2를 입력합니다.

2. EC2를 선택하여 EC2 Dashboard를 엽니다.

대시보드의 레이아웃에 익숙해지는 데 몇 분 정도 시간을 할애하세요:

Screenshot 2023-09-26 at 11.36.10 PM.png

EC2 인스턴스 시작

이제 EC2 Linux 기반 인스턴스를 시작하겠습니다.

1. Launch Instance 을 클릭한 다음 드롭다운 메뉴에서 Launch Instance을 다시 클릭합니다.

Screenshot 2023-09-26 at 11.36.35 PM.png

2. Launch an instance 페이지에서 인스턴스의 원하는 이름을 지정할 수 있습니다.

Screenshot 2023-09-26 at 11.37.10 PM.png

3. Add additional tags 를 클릭하고 "Add Tag"를 클릭합니다. 인스턴스에 대해 제공한 "Name"을 찾을 수 있습니다. 이제 키와 값을 입력합니다. 이 키(더 정확하게는 태그)는 인스턴스가 시작되면 콘솔에 나타납니다. 이를 통해 복잡한 환경에서 실행 중인 머신을 쉽게 추적할 수 있습니다. 이전에 키 쌍에 사용한 것과 유사한 태그를 추가로 생성하여 이 머신에 사용자와 부여 키를 지정하고 동일한 값을 입력합니다. 준비가 되면 Resource types 아래에서 Instances, Volumes, Network interfaces 선택합니다.

Screenshot 2023-10-07 at 12.03.29 AM.png

4. Application and OS images (Amazon Machine Image) 아래에서 검색 상자에 교육용으로 공유된 AMI ID를 입력 또는 CHENLAB을 검색하여 선택합니다. AMI는 사진과 다를 수 있으므로 강사의 안내를 참조하세요. 특히 N.Virginia 리전이 아닌 Seoul 리전 등 다른 리전에서 실습할 경우 강사에 의해 AMI가 사전에 공유되어야지만 사용할 수 있습니다.

 참고로 AMI는 각 리전 별로 모두 AMI ID 가 다릅니다. 리전 간 AMI를 복사하는 방법은 다음을 참고하세요. 그외 (AMI 공유 방법 참고)

5. Community AMIs에서 결과를 클릭합니다. 검색 결과는 Community AMIs에 표시됩니다.   Select 버튼을 클릭하여 AMI를 선택합니다. 최신 버전의 AMI를 선택해야 합니다.

Screenshot 2023-10-18 at 12.17.13 PM.png

Screenshot 2024-05-09 at 9.31.13 AM.png

6. Instance type에서 드롭다운 화살표를 클릭하고 검색창에 c5.4xlarge을 입력합니다. 

Screenshot 2023-10-07 at 12.08.34 AM.png

7. Key pair (login) 아래의 드롭다운 목록에서 이 실습의 시작 부분에서 만든 키 쌍을 선택합니다.

Screenshot 2023-09-27 at 10.08.50 AM.png

8. 다음으로 Network settings에 대해 Edit을 클릭합니다. SubnetSecurity group 세부 정보를 입력하라는 메시지가 표시됩니다. 보안 그룹은 방화벽 규칙이 됩니다. 앞 챕터에서 진행했다면 만들어진 보안 그룹을 사용할 수도 있습니다.

Network에서 VPC ID, 보안 그룹 아이디는 사용자마다 다르게 보입니다.

Screenshot 2023-10-07 at 12.10.00 AM.png

9. Configure storage 에서 인스턴스에 스토리지 및 디스크 드라이브를 수정하거나 추가할 수 있습니다. 이 실습에서는 AMI를 선택한 뒤 제시된 용량 기본값 그대로 사용하겠습니다. 

Screenshot 2023-09-27 at 10.10.08 AM.png

10. Summary 에서 구성을 검토하고 Launch instance를 클릭합니다.

Screenshot 2024-05-09 at 9.33.45 AM.png

또는

(실습 환경이 us-east-1일 경우 보이는 AMI ID 다름)


Screenshot 2023-10-07 at 12.15.06 AM.png

이제 인스턴스가 시작되며 잠시 시간이 걸릴 수 있습니다. Successfully initiated launch of instance 메시지와 함께 Launch Status 페이지가 표시됩니다.

Screenshot 2023-10-07 at 12.24.53 AM.png

11. 페이지 오른쪽 하단에서 View all Instances를 클릭하여 EC2 인스턴스 목록을 확인합니다. 인스턴스를 클릭합니다. 초기화 프로세스를 거치게 됩니다. 인스턴스가 시작되면 Linux 서버는 물론 인스턴스가 속한 가용 영역과 공개적으로 라우팅할 수 있는 DNS 이름이 표시됩니다.

Screenshot 2023-09-27 at 10.17.42 AM.png

SSH를 통해 EC2 인스턴스 접속하기

Connect 를 클릭해서 접속 방법을 가이드 받을 수 있습니다.

Screenshot 2023-10-07 at 12.48.06 AM.png

사전 제작된 CHENLAB-PUBLIC AMI는 우분투이므로 사용자 이름은 "ubuntu"가 됩니다. 참고로 이전 챕터에서 실습에 사용했던 Amazon Linux 2 이미지에 대한 사용자 이름은 "ec2-user" 였습니다.

Screenshot 2023-10-07 at 12.49.34 AM.png

앞에서 설명한 Cloud9 환경에서의 접속방법대로 해보세요. (SSH 를 통한 EC2 인스턴스 접속)

연구자를 위한 AWS 학습 기초

저장 장치 추가하기

생성된 EC2 인스턴스에는 운영 체제를 지원하기에 충분한 저장 용량을 갖춘 루트 볼륨과 분석을 지원하는 데 필요한 몇 가지 추가 애플리케이션이 있습니다.  대용량 데이터(예: Raw reads, aligned sequences 등)를 EC2 인스턴스를 통해 다운로드 하려면 추가 스토리지가 필요할 수도 있습니다. 따라서 추가 스토리지를 연결해야 합니다.

이 섹션에서는 다음과 같이 설명합니다:

a. EBS(Elastic Block Store) 볼륨을 생성합니다.

b. 새 볼륨을 EC2 인스턴스에 연결합니다.

c. 새 볼륨을 포맷하고 마운트합니다.

    1. 파일 시스템으로 새 볼륨을 포맷합니다.

    2. 볼륨을 마운트하고 일부 데이터를 복사합니다.

Amazon Elastic Block Store (EBS) 볼륨 만들기

1. AWS 관리 콘솔 검색 창에 EC2를 입력하여 EC2 서비스로 이동합니다.

2. 왼쪽 탐색 표시줄에서 Elastic Block Store 아래의 Volumes을 클릭합니다.

Screenshot 2023-09-27 at 10.19.25 AM.png

3. Create Volume (오른쪽 상단 모서리)를 클릭하여 새 볼륨을 만듭니다.

4. Create Volume 페이지에서 볼륨의 필요한 크기(예: 데이터 세트 크기에 따라 10GB 이상)를 GB 단위로 입력합니다.

볼륨을 연결할 EC2 인스턴스의 Availability Zone (AZ) 을 확인하여 새로 추가하는 볼륨의 프로비저닝 할 AZ가 동일한지 확인하세요.

Screenshot 2023-09-27 at 10.21.34 AM.png

Screenshot 2023-09-27 at 10.22.23 AM.png

5. Add Tag를 클릭하여 리소스에 고유한 태그를 지정합니다. 키에 '이름'을 입력하고 값에 '[your initials]-EBS'를 입력합니다.

실행 중인 인스턴스에 EBS 볼륨 연결하기

왼쪽 탐색 표시줄에서 Elastic Block Store 아래의 Volumes을 클릭하여 모든 볼륨을 확인합니다. 목록에서 이전 단계에서 제공된 고유 이름 태그를 검색하여 새로 생성한 볼륨을 선택할 수도 있습니다.

Screenshot 2023-09-27 at 10.24.55 AM.png

1. Actions을 클릭하고 Attach Volume을 추가로 클릭합니다.

2. Attach Volume 대화 상자에서 인스턴스 필드를 클릭하고 목록에서 Instance ID 또는 이름 태그를 찾아 EC2 인스턴스를 선택합니다. Attach(연결)를 클릭하여 볼륨을 연결합니다.

Screenshot 2024-05-09 at 9.49.28 AM.png성공적으로 연결된 경우 - 표시된 볼륨 목록에서 새 볼륨의 상태(상태 열 아래)가  In Use임을 나타내는 것을 볼 수 있습니다. 

Screenshot 2023-09-27 at 10.26.22 AM.png

3. 왼쪽 탐색 창에서 항목 목록 맨 위에 있는 EC2 Dashboard 를 클릭하여 해당 인스턴스에 볼륨이 잘 연결되었는지 확인해볼 수 있습니다.

Screenshot 2024-05-09 at 9.50.18 AM.png

중요: 볼륨을 마운트하는 다음 단계를 위해 특정 장치 이름을 적어 두세요. 드라이브 이름은 표시된 것과 다를 수 있습니다. (Device names on Linux instances)

NOTE: Depending on the Linux version and the machine type, the device names may differ. The EC2 Console will generally show /dev/sdX, where X is a lower-case letter, but you may see /dev/xvdX or /dev/nvmeYn1.

선택한 디바이스 이름을 지정하기 전에 해당 이름을 사용할 수 있는지 확인하세요. 그렇지 않으면 디바이스 이름이 이미 사용 중이라는 오류가 발생합니다. 예를 들어 Linux에서는 lsblk 명령을 사용하여 디스크 디바이스 및 탑재 지점을 확인할 수 있습니다. Windows에서는 디스크 관리 유틸리티 또는 diskpart 명령을 사용할 수 있습니다.

볼륨 마운트

1. EC2 인스턴스에 접속 및 로그인합니다. 앞에서 설명한 Cloud9 환경에서의 접속방법대로 해보세요. (SSH 를 통한 EC2 인스턴스 접속)

2. 다음 명령어를 사용해 사용 가능한 디스크 목록을 확인합니다.

lsblk

인스턴스에 연결된 디스크의 목록이 출력됩니다.

예)

Screenshot 2023-09-27 at 10.30.52 AM.png

NOTE: Depending on the Linux version and the machine type, the device names may differ. The EC2 Console will generally show /dev/sdX, where X is a lower-case letter, but you may see /dev/xvdX or /dev/nvmeYn1. The following table may help with translating. Another way to help track is to pick different sizes for your EBS volumes (such as 151, 152, 153 GB for different volumes).

Device name (Console) Alternate 1 Alternate 2
/dev/sda /dev/xvda /dev/nvme0n1
/dev/sdb /dev/xvdb /dev/nvme1n1
/dev/sdc /dev/xvdc /dev/nvme2n1
/dev/sdd /dev/xvdd /dev/nvme3n1
/dev/sde /dev/xvde /dev/nvme4n1
/dev/sdf /dev/xvdf /dev/nvme5n1

3. 마운트되지 않은 파일 시스템 크기가 앞에서 추가한 볼륨의 스토리크기와 동일한지 확인합니다. 예를 들어 아래와 같이 "nvme1n1":

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0  150G  0 disk
└─nvme0n1p1 259:1    0  150G  0 part /
nvme1n1     259:2    0   100G  0 disk

4. 다음 명령을 사용하여 볼륨에 데이터가 있는지 확인합니다:

sudo file -s /dev/nvme1n1

여기서 "nvme1n1"은 EC2 인스턴스에 장치를 연결한 후 이전 섹션에서 언급한 장치입니다.

If the above command output shows "/dev/nvme1n1: data", it means your volume is empty.

예)

Screenshot 2023-09-27 at 10.30.43 AM.png

5. 다음 명령을 사용하여 볼륨을 ext4 파일 시스템으로 포맷합니다. 실습이므로 새 장치입니다. 포멧이 되도 무방합니다. 

sudo mkfs -t ext4 /dev/nvme1n1

참고: 이 파일 시스템 포맷 단계는 새로 추가한 신규 볼륨 즉, 새로운 장 에만 해당되며 그렇지 않을 경우는 기존 볼륨을 마운트하는 동안에는 장치의 모든 데이터가 지워지므로 이 단계를 실행하지 마세요.

예)

Screenshot 2023-09-27 at 10.32.11 AM.png

6. 새 ext4 볼륨을 마운트할 디렉터리를 원하는 대로 만듭니다. "volume1"이라는 이름을 사용하겠습니다.

sudo mkdir /mnt/volume1

7. 다음 명령을 사용하여 볼륨을 "volume1" 디렉터리에 마운트합니다.

sudo mount /dev/nvme1n1 /mnt/volume1

8. 디렉터리로 이동하여 디스크 공간을 확인하여 볼륨 마운트를 확인합니다.

cd /mnt/volume1
df -h .

위의 명령은 volume1 디렉터리의 여유 공간을 표시합니다.

9. 이 시점에서 드라이브의 소유권은 사용자가 아닌 루트에 있습니다. 드라이브의 소유권을 변경해야 드라이브의 콘텐츠(파일 추가/제거 등)를 변경할 수 있습니다.

sudo chown -R ubuntu /mnt/volume1

예)

Screenshot 2023-09-27 at 10.33.16 AM.png

Screenshot 2023-09-27 at 10.33.48 AM.png

10. 참고로 나중에 이 장치를 제거할 수 있습니다. 마운트 해제 후 다시 마운트하는 연습을 해보세요. 볼륨을 마운트 해제하려면 다음 명령을 사용해야 합니다. 볼륨을 마운트 해제하려면 디렉터리 외부에 있어야 합니다.

sudo umount /dev/nvme1n1

umount: /mnt/volume1: target is busy. 이런 메세지를 보았다면, 장치가 사용중입니다. 현재 디렉토리가 해당 볼륨의 위치에 있다면 다른 디렉토리로 변경하거나, 해당 볼륨 경로에 사용중인 (읽거나 쓰고 있는 등) 파일이 존재할 수 있습니다.

하지만 나중에 이 장치가 필요하므로 다시 마운트하는 것을 잊지 마세요. 

sudo mount /dev/nvme1n1 /mnt/volume1

연구자를 위한 AWS 학습 기초

AWS CLI

AWS CLI 소개

AWS CLI를 사용하면 명령줄을 사용하여 서비스를 관리하고 스크립트를 통해 서비스를 제어할 수 있습니다. 많은 사용자가 AWS CLI를 사용하여 일정 수준의 자동화를 수행합니다.

최신 버전의 AWS CLI 설치 또는 업데이트는 다음을 참고해주세요. 

AWS CLI 사용

다음 명령을 사용하여 AWS CLI를 탐색합니다(창을 종료하려면 q를 사용하세요):

aws --version

예) Cloud9 과 AWS 에서 제공하는 OS 이미지에서는 기본적으로 AWS CLI가 설치되어 있습니다.

Screenshot 2023-10-18 at 12.05.36 PM.png

aws help
aws ec2 help
aws ec2 describe-instances
aws ec2 describe-key-pairs

위의 describe-instancesdescribe-key-pairs 명령은 AWS 계정의 자격 증명인 액세스 키와 리전을 설정하지 않았기 때문에 실패할 가능성이 높습니다. EC2, S3 등과 같은 AWS 리소스에 액세스하려면 자격 증명이 필요하므로 권한 오류가 발생합니다(자격 증명이 없으면 AWS CLI는 사용자가 참조하는 계정을 알 수 없음). aws configure 명령을 사용하여 수동으로 입력할 수 있습니다.

아직 AWS 계정의 자격 증명으로 인스턴스를 구성하지 않았으므로 ~/.aws/ 폴더를 사용할 수 없습니다. 이제 aws configure를 진행하겠습니다.

계정 설정 (워크샵 스튜디오 사용자)

AWS 에서 제공하는 워크샵 스튜디오 환경에서 실습을 할 경우는 아래와 같이 사전에 준비된 Credential을 사용하면 됩니다. 만일 그렇지 않을 경우 Access Key 를 만드는 방법은 다음 링크를 참고하세요.

Screenshot 2023-09-27 at 10.52.34 AM.png

Screenshot 2023-09-27 at 10.52.25 AM copy.png

터미널 창에 바로 Copy & Paste 할 수 있습니다.

이제 다시 한번 aws ec2 describe-key-pairs 명령어를 입력해보세요.

Untitled.png

계정 설정 (개인 AWS 계정)

워크샵 스튜디오 환경에서 진행할 경우 아래 내용을 따라갈 필요는 없습니다!

계정 설정 (일반 AWS 계정 사용자)

Configuration

1. aws configure 명령 실행

aws configure

2. 계정의 AWS 액세스 키 ID를 입력합니다.

aws_access_key_id=[Access Key ID]

3. 계정의 AWS 비밀 액세스 키를 입력합니다.

aws_secret_access_key=[Secret Access Key]

4. 기본 지역 이름을 입력합니다. 이 워크샵이 실행되는 리전에 따라 설정합니다. 여기서는 예로써 us-east-1 (미국 동부 지역)을 사용합니다.

Default region name=us-east-1

Enter 키를 눌러 출력 형식의 기본값을 수락합니다.

5. ec2 describe-instances 명령을 실행하고 출력을 확인합니다.

aws ec2 describe-instances

여기에는 지정된 지역에 대한 계정의 모든 EC2 인스턴스에 대한 설명이 표시됩니다.

6. 또한 선택한 지역에 대한 키 쌍을 살펴보세요.

aws ec2 describe-key-pairs

이것은 AWS CLI에 대한 매우 간략한 소개입니다. 막강한 힘에는 막중한 책임이 따르므로 인스턴스 자동화에 사용하기 전에 충분히 숙지하고 연습하세요. 

Verifying AWS Credentials

Amazon S3와 상호 작용하기 전에 AWS 자격 증명의 중요성에 대해 살펴보겠습니다. AWS 보안 자격 증명은 다음을 확인하는 데 사용됩니다.

  1. 사용자가 누구인지
  2. AWS에 요청하는 리소스에 액세스할 수 있는 권한은 이러한 보안 자격 증명을 사용하여 요청을 인증하고 권한을 부여합니다.

이전 섹션에서 사용자를 구성했습니다. 이제 ~/.aws/ 폴더에 있는 자격 증명과 구성 파일을 살펴보겠습니다. (워크샵스튜디오를 사용한 AWS 구성에는 적용되지 않음) 

cat ~/.aws/credentials
cat ~/.aws/config

이제 사용자 신원을 성공적으로 구성했습니다. 

참고자료

연구자를 위한 AWS 학습 기초

데이터 다운로드 실습

실습 데이터 소개

https://www.ncbi.nlm.nih.gov/sra/?term=SRR6327875

Screenshot 2023-09-27 at 11.45.33 AM.pngSRA Lite 포멧에 대한 설명

Screenshot 2023-09-27 at 11.44.42 AM.png

아래 실습을 하는 환경을 다시 설명하자면, Cloud9 환경(EC2 인스턴스)에서 다른 EC2 인스턴스로 SSH 형태로 접속한 환경입니다. (SSH 를 통한 EC2 인스턴스 접속)

실습 데이터 준비

다운로드

cd /mnt/volume1
wget https://sra-downloadb.be-md.ncbi.nlm.nih.gov/sos5/sra-pub-zq-14/SRR006/327/SRR6327875.sralite.1

R1, R2 파일로 추출

참고: c5.4xlarge 인스턴스에서 아래 명령어는 6분 30초 정도 소요되었습니다.

fastq-dump --split-files --gzip SRR6327875.sralite.1

Registory of Open Data on AWS 사용해보기

SRR6327875 데이터를 Registry of Open Data on AWS에서 마찬가지로 다운로드 받는 방법도 있습니다. fastqerq-dump에 대해 더 알아보고 싶다면 여기를 참고해주세요.

mkdir -p /tmp/fastq/SRR6327875
cd /tmp/fastq/SRR6327875

# note here the --no-sign-request makes an anonymous request to this public S3 bucket
aws s3 sync --no-sign-request s3://sra-pub-run-odp/sra/SRR6327875/ /tmp/fastq/SRR6327875/

# convert the sra formatted file to fastq, then gzip them and clean up
fasterq-dump ./SRR6327875
gzip SRR6327875_1.fastq
gzip SRR6327875_2.fastq
rm -f SRR6327875

download failed: s3://sra-pub-run-odp/sra/SRR6327875/SRR6327875 to ./SRR6327875 [Errno 28] No space left on device
위와 같은 에러가 나면 df -h 로 현재 다운로드 받고자 하는 경로의 용량을 확인해보세요. 그리고 /tmp 경로가 아닌 용량이 충분한 디렉토리로 이동해서 다시 다운로드 받을 수 있습니다.

여기서 문제!

SRR6327950 샘플에 대한 것도 위와 같이 동일하게 다운로드 받아보세요. 이 다운로드가 성공해야 다음 선택 실습인 기본 분석 수행하기를 진행할 수 있습니다.

(Optional) AWS CLI로 Amazon S3 사용해보기

버킷 생성

이때  --bucket 의 값으로는 임의로 버킷을 생성하게 됩니다. 단, 전세계 S3 사용자 누군가가 이미 사용중인 버킷명은 사용할 수 없습니다.

여기서는 brandon-20230927 로 예를 들었습니다.

aws s3api create-bucket \
    --bucket {본인의 버킷명} \
    --region us-east-1

AWS 계정 내 생성된 버킷 확인

생성된 버킷은 S3 콘솔에서도 확인할 수 있습니다 (브라우저의 AWS 콘솔에서 S3 로 검색하고 선택)

Screenshot 2023-09-27 at 1.30.49 PM.png

S3로 데이터 복사

aws s3 cp SRR6327875.sralite.1_1.fastq.gz s3://{앞에서 만든 본인이 사용한 버킷명}/raw/SRR6327875_1.fastq.gz
aws s3 cp SRR6327875.sralite.1_2.fastq.gz s3://{앞에서 만든 본인이 사용한 버킷명}/raw/SRR6327875_2.fastq.gz

참고. 많은 파일을 다룰 때 자주 사용하는 AWS S3 CLI 명령어

1) S3의 폴더 내용 조회 (주의: recursive 앞에 마이너스 기호(-) 2개 사용)
  . aws s3 ls
  . aws s3 ls s3://aws-lab-james
  . aws s3 ls --recursive s3://aws-lab-james
 
2) local 폴더를 서브폴더까지 s3로 upload
  . aws s3 cp --recursive ./video/ s3://aws-lab-james/video/
 
3) s3 에서 local 폴더로 서브폴더까지 download
  . aws s3 cp --recursive s3://aws-lab-james/video/ ./video/
 
4) local 폴더의 내용을 서브폴더까지 s3로 변경된 파일만 upload (cp 와 다르게 변경된 파일만 upload합니다. 삭제는 하지 않습니다)
  . aws s3 sync ./video/ s3://aws-lab-james/video/
 
5) s3에서 local 폴더로 서브폴더까지 변경된 파일만 download (cp 와 다르게 변경된 파일만 download 합니다. 삭제는 하지 않습니다)
  . aws s3 sync s3://aws-lab-james/video/ ./video/

S3 버킷에서 데이터 다운로드

이제 공유 S3 버킷에 액세스할 수 있으므로 S3 버킷에서 사용자 컴퓨터로 데이터를 다운로드합니다.

1. 먼저 S3 버킷에 폴더를 나열합니다:

aws s3 ls s3://{앞에서 만든 본인이 사용한 버킷명}/raw/SRR6327875_1.fastq.gz --region us-east-1

예) aws s3 ls s3://brandon-20230927/raw/SRR6327875_1.fastq.gz --region us-east-1

이제 이 폴더 내의 특정 위치에서 컴퓨터로 파일을 복사하겠습니다. 그 전에 이 데이터를 저장할 디렉터리를 컴퓨터에 만들어 보겠습니다.

2. 다음 명령을 실행하여 데이터를 저장할 디렉터리를 만들고 해당 디렉터리로 복사합니다

mkdir -p /tmp/fastq/SRR6327875
cd /tmp/fastq/SRR6327875

3. AWS CLI 명령어를 이용해 S3 bucket에서 새로운 디렉토리로 데이터를 다운로드합니다.

aws s3 cp s3://{앞에서 만든 본인이 사용한 버킷명}/raw/SRR6327875_1.fastq.gz .
aws s3 cp s3://{앞에서 만든 본인이 사용한 버킷명}/raw/SRR6327875_2.fastq.gz . --region us-east-1

4. MD5 checksum을 통해 원본 파일과 S3에서 다운로드한 데이터를 비교해볼 수 있습니다.

md5sum *.fastq.gz

예)

Screenshot 2023-10-07 at 1.06.55 AM.png

5. S3의 NCBI SRA repository (Registry of Open Data on AWS)를 사용하여 다른 데이터 세트를 다운로드합니다:

mkdir -p /tmp/fastq/SRR6327950
cd /tmp/fastq/SRR6327950

# note here the --no-sign-request makes an anonymous request to this public S3 bucket
aws s3 sync --no-sign-request s3://sra-pub-run-odp/sra/SRR6327950/ /tmp/fastq/SRR6327950/

# convert the sra formatted file to fastq, then gzip them and clean up
fasterq-dump ./SRR6327950

gzip SRR6327950_1.fastq
gzip SRR6327950_2.fastq
rm -f SRR6327950

이제 몇 가지 데이터 분석을 실행할 준비가 되었습니다.



연구자를 위한 AWS 학습 기초

기본 분석 수행하기 (옵션)

Bacterial Genome data 분석

이제 몇 가지 샘플 코드를 실행해 보겠습니다.

bwa, samtools 도구가 설치되어 있는지 확인해보겠습니다.

which bwa

출력에는 bwa가 설치된 위치가 표시됩니다.

which samtools

출력에는 samtools가 설치된 위치가 표시됩니다.

Basic Bacterial Genome Sequence Analysis

1. Get a reference sequence:

mkdir -p /tmp/outbreaks/SG-M1
cd /tmp/outbreaks/SG-M1
wget ftp://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/001/275/545/GCF_001275545.2_ASM127554v2/GCF_001275545.2_ASM127554v2_genomic.fna.gz
gunzip GCF_001275545.2_ASM127554v2_genomic.fna.gz
mv GCF_001275545.2_ASM127554v2_genomic.fna SG-M1.fna

2. Map and call SNPs:
Note: For an annotation of the programs used below and other bioinformatics tools, check out our course github page.

Reference indexing

bwa index SG-M1.fna

Mapping

bwa mem SG-M1.fna /tmp/fastq/SRR6327950/SRR6327950_1.fastq.gz /tmp/fastq/SRR6327950/SRR6327950_2.fastq.gz | samtools view -bS - > SRR6327950.bam

BAM Sorting

samtools sort SRR6327950.bam -o SRR6327950-sort.bam

BAM Indexing

samtools index SRR6327950-sort.bam

Variant calling

lofreq faidx SG-M1.fna
lofreq call -f SG-M1.fna -r NZ_CP012419.2:400000-500000 SRR6327950-sort.bam > SRR6327950-400k.vcf

Mapping takes ~5 min on a t2.medium. Sorting takes ~2 min. Running lofreq on this limited section of the genome takes ~1 min.

3. Assembly (runs ~4 min then will run out of RAM if you’re on a t2.medium):

spades.py -t 2 -1 /tmp/fastq/SRR6327950/SRR6327950_1.fastq.gz -2 /tmp/fastq/SRR6327950/SRR6327950_2.fastq.gz -o SRR6327950_spades

NOTE: This assembly above will complete on a t3a.large and takes about 5 hours.

훌륭합니다! 이 작업은 AWS EC2 인스턴스에서 쉽게 실행할 수 있는 매우 일상적인 작업입니다. 3단계에서 어셈블리를 수행할 때 경험했듯이, 작업에 적합한 머신을 선택하는 것은 매우 중요합니다. RAM이나 디스크 공간이 부족하면 작업이 중단될 수 있습니다. 다행히도 인스턴스 유형을 변경하거나 다른 EBS 볼륨을 머신에 연결하면 이러한 문제를 쉽게 해결할 수 있습니다.

연구자를 위한 AWS 학습 기초

EC2로부터 이미지 (AMI) 생성

EC2 인스턴스 중지

이제 실행 중인 인스턴스를 중지하겠습니다. 계속 진행하기 전에 실행 중인 애플리케이션을 모두 중지하고 데이터가 저장되어 있는지 확인하는 것이 좋습니다. 인스턴스를 중지하는 것은 컴퓨터/서버를 끄는 것과 같습니다.

이미지를 만들기 전에 인스턴스를 중지하는 것이 가장 좋지만 필수는 아닙니다. 그러나 이미지를 만드는 동안 인스턴스가 재부팅되므로 실행 중인 애플리케이션이 없는지 확인해야 합니다.

1. 인스턴스를 중지하면 /tmp가 지워지므로 중지하기 전에 필요한 모든 데이터를 /tmp에서 보다 영구적인 스토리지로 복사하세요. 계속 진행하기 전에 모든 필수 파일을 이전에 마운트한 EBS 볼륨(/mnt/volume1)에 복사합니다.

복사하기 전에 디렉터리에 대한 권한을 설정해야 합니다.

sudo chmod -R 777 /mnt/volume1/

만일 기본분석(옵션) 단계를 수행하지 않았다면 아래 명령어에서 No such file or directory 에러 메세지가 나옵니다. 다음 단계를 진행해도 무방합니다.

cp -ax /tmp/fastq /tmp/outbreaks /mnt/volume1/

2. AWS 콘솔에 로그인하고, AWS 관리 콘솔 검색창에 EC2를 입력합니다.

3. EC2를 선택하여 EC2 Dashboard를 엽니다.

4. 왼쪽 탐색 창에서 Instances 를 클릭하여 실행 중, 중지 중, 종료된 모든 인스턴스를 확인합니다.

5. 인스턴스를 선택합니다.

EC2 인스턴스의 Instance State는 머신이 Running 중임을 보여줍니다.

6. Actions 버튼을 클릭한 다음 Instance State를 클릭하고 마지막으로 Stop를 클릭합니다.

Screenshot 2023-09-27 at 4.34.50 PM.png

7. 대화 상자에서 Stop를 클릭하여 인스턴스 중지를 확인합니다. 

Screenshot 2023-09-27 at 4.35.51 PM.png

8. 이제 인스턴스가 중지를 시도하고 잠시 후 Instance State가 Stopped으로 변경됩니다. 창을 새로 고쳐야 할 수도 있습니다. 

EC2 이미지 생성

이제 EC2 인스턴스의 이미지를 생성하겠습니다.

1. 중지한 EC2 인스턴스를 선택하고, Actions 버튼을 클릭한 다음, Image를 클릭하고, Create Image을 클릭합니다.

Screenshot 2023-09-27 at 5.17.43 PM.png

2. 이미지 생성 페이지에서 이미지 이름과 이미지 설명을 입력합니다. "x" 버튼을 클릭하여 EC2 인스턴스에 연결한 추가 EBS 볼륨을 제거해야 합니다(아래 이미지 처럼 1개만 남으면 됩니다). 이미지 생성을 클릭하여 이미지 생성 작업을 시작합니다.

여기서 추가되어 있는 EBS 볼륨을 삭제하는 이유
기본 EBS에 필요한 연구용 Tool과 라이브러리가 설치될 것이고, 추가로 부착한 EBS에는 데이터만 저장되므로 이미지에 포함 시키지 않습니다

Screenshot 2023-09-27 at 5.19.05 PM.png

이미지 생성 작업이 백그라운드에서 시작되고 준비가 완료되면 EC2 대시보드 페이지 상단에 "성공적으로 생성됨 ..."이라는 메시지가 표시됩니다.

인스턴스를 중지하지 않고 계속 로그인한 상태였다면 인스턴스가 재부팅되고 ssh 세션이 종료되었을 것입니다. 다시 연결해야 합니다 (IP 주소 새로 확인 필요).

3. 이미지 생성 작업이 진행되도록 잠시 기다립니다. 이미지가 생성되었는지 확인하려면 왼쪽 탐색 창의 이미지 섹션에서 AMIs를 클릭하면 이전에 생성된 모든 AMI와 진행 중인 새 AMI를 볼 수 있습니다. 

새 AMI가 생성 중이거나 이미 생성되어 사용자가 지정한 이름으로 사용할 준비가 된 것을 확인할 수 있습니다.

Screenshot 2023-09-27 at 6.03.26 PM.png

4. 새 AMI 인스턴스를 선택하고 Actions 버튼을 클릭한 다음 Manage Tags 를 클릭합니다. 이전과 마찬가지로 이미지에 이름, 사용자 등 태그 기능을 사용해 리소스에 태깅할 수 있습니다.

Screenshot 2023-09-27 at 6.03.55 PM.png

Screenshot 2023-09-27 at 6.04.24 PM.png

연구자를 위한 AWS 학습 기초

EC2 종료와 볼륨 스냅샷 저장 (옵션)

클라우드에서 워크로드를 실행할 때 비용은 중요한 고려 사항입니다. 서비스에서 비용이 발생하는 방식을 인식하면 비용을 절감하고 효율적인 워크플로우를 채택하며 현재 워크로드에 더 적합한 정교한 서비스를 사용하는 데 도움이 됩니다. 특정 기능과 서비스의 사용이 어떻게 비용 절감으로 이어질 수 있는지 이해하는 것은 좋은 습관입니다.

이 워크샵 섹션에서는 AWS의 서비스와 관련된 비용에 대해 간략하게 소개하고, EC2 및 EBS와 같은 서비스를 사용하는 특정 서비스에 대해 비용을 절감할 수 있는 방법을 보여드리겠습니다.

Exploring EC2 Instance Lifecycle

Amazon EC2 인스턴스는 수명 주기 동안 다양한 상태로 전환됩니다.

EC2 인스턴스의 현재 인스턴스 상태를 보려면 다음과 같이 하세요:

  1. AWS 관리 콘솔 검색 창에 EC2를 입력합니다.

     

  2. EC2를 선택하여 EC2 Dashboard를 엽니다.

     

  3. 왼쪽 탐색 창에서 Instances 섹션 아래의 Instances 를 선택합니다.

     

  4. 현재 인스턴스 상태를 확인하려면 EC2 인스턴스를 선택하고 Instances state 열 아래의 값을 관찰합니다. 상태는 실행 중 (Running), 중지됨(Stopped) 또는 종료됨 (Terminated)으로 표시됩니다.

AWS Management Console

아래는 EC2 인스턴스 수명 주기의 다이어그램입니다. 인스턴스 상태는 EC2를 사용하는 동안 비용에 영향을 줍니다. 자세한 내용은  Instance Lifecycle를 참조하세요.

AWS Management Console

간단히 설명하자면, EC2 인스턴스는 실행되는 동안 비용이 누적됩니다. EC2 인스턴스를 중지하면 더 이상 관련 비용이 누적되지 않습니다.

하지만 머신의 스토리지에 대한 비용은 항상 청구됩니다. 루트 드라이브의 스토리지든 루트에 연결된 EBS 볼륨이든, 머신이 중지되어도 이러한 비용은 중지되지 않습니다. 이러한 볼륨을 영구적으로 삭제할 때만 중단됩니다. 또한 사용하는 용량뿐만 아니라 디스크에 있는 전체 스토리지에 대한 비용도 지불해야 합니다. 프로젝트에 적합한 리소스를 선택해야 합니다.

Detach the additional EBS Volume

  1. In the AWS Management Console search bar, type EC2.

  2. In the left Navigation pane click on Instances under the Instances section.

  3. Select your EC2 Instance and in the Instance Details pane below, select Storage to view the Block Devices and then click on the Volume ID of your additional EBS Volume attached previously (e.g. /dev/sdh; the device name may be different in your case).

Screenshot 2023-09-27 at 6.06.44 PM.png

This will open the Volumes page showing the specific Volume details.

  1. Click on the Actions button and further click on Detach Volume to detach the volume from the EC2 Instance.

Screenshot 2023-09-27 at 6.07.48 PM.png

  1. In the Detach Volume dialog box, click Detach; the volume will now be detached and in a few moments the Status of the volume will change to available, indicating that it could be attached to another instance if required.

Screenshot 2023-09-27 at 6.08.28 PM.pngCreate snapshot of detached Volume

  1. lick on Actions, then select Create Snapshot.

Screenshot 2023-09-27 at 6.09.20 PM.png

  1. In the Create Snapshot screen, provide a Description for the Volume; this will be an identifier to search for the Snapshot of the Volume.

Screenshot 2023-09-27 at 6.13.07 PM.png

  1. Click on Add Tag to provide a unique name tag for better identificaiton of the snapshot. Enter “Name” in the Key field, and “[your initials]-snapshot” for the Value field. Add the “User” and “Grant” tag you’ve previously used as well.
  2. Click on Create Snapshot.

  3. A Snapshot creation task will be started, and a message indicating the same will be displayed in a green bar on the top of the screen.

  4. Click on Snapshots under the Elastic Block Store section in the left Navigation pane to view all the snapshots created.

Screenshot 2023-09-27 at 6.14.06 PM.png

Delete the detached Volume

Now that a Snapshot has been taken of the volume, we will delete the volume itself.

  1. In the left Navigation pane click on Volumes under the Elastic Block Store section to view all the volumes.

Screenshot 2023-09-27 at 6.14.54 PM.png

  1. Click on Actions and select Delete Volume.

AWS Management Console

  1. On the Delete Volume dialog click on Delete to confirm the delete. The EBS Volume will now be deleted. This volume no longer exists on AWS, and you will no longer be charged for it.

Terminate EC2 Instance

We will now Terminate the EC2 Instance.

NOTE: Ensure your previous EC2 Image was successful; we’ll be using it in the next portion of the workshop. In this segment, you will be terminating your EC2 Instance. This is permanent and irreversible. However, using this EC2 Image, it is possible to spin up an identical machine. In general, be very cautious when terminating machines.

  1. Select the EC2 Instance from the list of instances. Click on Instance State > Terminate Instance.

Screenshot 2023-09-27 at 6.15.56 PM.png

  1. On the Terminate Instance dialog, observe the note “Associated resources may incur costs after these instances are terminated” and click Delete EBS Volume. Read the additional note. To proceed, select Yes, terminate. This is an important safeguard, and never click this automatically!

Screenshot 2023-09-27 at 6.16.23 PM.png

The instance will now be terminated.

  1. After a minute view the Instance State of the instance, it will indicate Terminated.
연구자를 위한 AWS 학습 기초

AMI로 쉽게 리눅스 머신 셋업하기

이제 앞 세션에서 만들어낸 AMI로 부터 새로운 인스턴스를 생성하는 방법을 배우겠습니다.

EC2 대시보드 시작

AWS 관리 콘솔 검색 창에 EC2를 입력합니다.

Screenshot 2023-09-26 at 10.49.54 PM.png

EC2를 선택하여 EC2 대시보드를 엽니다.

인스턴스는 그래픽 사용자 인터페이스(콘솔) 또는 명령줄 스크립트를 통해 시작할 수 있습니다. 먼저 EC2 대시보드라고 하는 그래픽 콘솔 인터페이스부터 시작하겠습니다.

대시보드의 레이아웃에 익숙해지는 데 몇 분 정도 시간을 투자하세요:

Screenshot 2023-09-26 at 10.51.20 PM.png

AMI에서 EC2 인스턴스 실행

이제 EC2 Linux 기반 인스턴스를 시작하겠습니다.

1. AWS 관리 콘솔에 로그인하고 Amazon EC2 콘솔(https://console.aws.amazon.com/ec2)을 엽니다. AWS 관리 콘솔의 오른쪽 상단 모서리에서 원하는 AWS 지역(예: N.Virginia)에 있는지 확인합니다.

실습을 하면서 가끔 사용하는 브라우저의 국가 설정에 의해 다른 리전으로 리전 정보가 바뀌는 경우가 있습니다. 워크샵에 사용하고 있는 리전 정보가 맞는지 꼭 확인해주세요. 

Screenshot 2023-09-26 at 10.53.20 PM.png

2. 왼쪽 탐색 창에서 이미지 섹션 아래의 AMI를 클릭합니다.EC2LaunchInstance3. 워크샵의 이전 섹션에서 만든 AMI를 선택한 다음 이미지에서 인스턴스 시작 버튼을 클릭합니다.

Screenshot 2023-10-15 at 7.26.10 PM.png

4. 인스턴스 시작 페이지에서 인스턴스 이름을 지정할 수 있습니다.

Screenshot 2023-10-15 at 7.27.27 PM.png

5. "추가 태그 추가" 및 "태그 추가"를 클릭합니다. 인스턴스에 대해 제공한 "이름"을 찾을 수 있습니다. 이제 키와 값을 입력합니다. 이 키(더 정확하게는 태그)는 인스턴스가 시작되면 콘솔에 나타납니다. 이를 통해 복잡한 환경에서 실행 중인 머신을 쉽게 추적할 수 있습니다. 이전에 키 쌍에 사용한 것과 유사한 태그를 추가로 생성하여 이 머신에 사용자와 부여 키를 지정하고 동일한 값을 입력합니다. 준비가 되면 리소스 유형 아래에서 인스턴스, 볼륨, 네트워크 인터페이스를 선택합니다.

Screenshot 2023-10-15 at 7.28.18 PM.png

6. 인스턴스 유형 아래에서 드롭다운 화살표를 클릭하고 검색창에 t2.2xlarge를 입력합니다.

실제 환경에서 프로젝트 요구 사항에 따라 리소스를 고려하기 전까지는 이 인스턴스를 기본 인스턴스로 간주해서는 안 됩니다. 지금은 어디까지나 실습입니다.

Screenshot 2023-10-15 at 7.29.09 PM.png

7. 키 쌍(로그인) 아래의 드롭다운 목록에서 이 실습의 시작 부분에서 만든 키 쌍을 선택합니다.

Screenshot 2023-10-15 at 7.28.46 PM.png

8. 다음으로 네트워크 설정에 대해 편집을 클릭합니다. 서브넷 및 보안 그룹 세부 정보를 입력하라는 메시지가 표시됩니다. 보안 그룹은 방화벽 규칙이 됩니다.

  1. 서브넷 필드는 특정 가용 영역에서 인스턴스를 시작하도록 구성할 수 있습니다. 이 워크샵에서는 기본값을 유지하지만, 이렇게 하면 컴퓨터의 위치를 제어할 수 있습니다.
  2. 기존 보안 그룹 선택을 선택합니다.

Screenshot 2023-10-15 at 7.29.42 PM.png9. 스토리지 구성에서 인스턴스에 스토리지 및 디스크 드라이브를 수정하거나 추가할 수 있습니다. 이 실습에서는 스토리지 기본값을 그대로 사용하겠습니다.EC2ChooseInstancetype10. 요약에서 구성을 검토하고 인스턴스 시작을 클릭합니다.

Screenshot 2023-10-15 at 7.56.28 PM.png

이제 인스턴스가 시작되며 잠시 시간이 걸릴 수 있습니다. 인스턴스 시작이 성공적으로 시작되었습니다라는 메시지와 함께 시작 상태 페이지가 표시됩니다.

11. 페이지 오른쪽 하단에서 모든 인스턴스 보기를 클릭하여 EC2 인스턴스 목록을 확인합니다. 인스턴스를 클릭합니다. 초기화 프로세스를 거치게 됩니다. 인스턴스가 시작되면 Linux 서버는 물론 인스턴스가 속한 가용 영역과 공개적으로 라우팅할 수 있는 DNS 이름이 표시됩니다.

Screenshot 2023-10-15 at 7.58.02 PM.png

12.  새롭게 부여된 접속주소 (ip)로 인스턴스에 로그인 해서 기존에 사용했던 AMI가 맞는지 확인해볼 수 있습니다.

참고

여기서는 history 명령어를 사용해 새로운 인스턴스 실행시 이전에 커맨드라인 사용내역을 확인해보았습니다.

Screenshot 2023-10-18 at 2.42.42 PM.png

Screenshot 2023-10-18 at 2.43.42 PM.png

연구자를 위한 AWS 학습 기초

Hail on EC2 (옵션)

앞에서 배운 것들을 토대로 새로운 EC2를 생성하고 접속한 뒤 오픈소스 프로그램인 Hail 을 설치 및 사용해 봅시다.

 

Python3 버전 확인

python3 --version

Python3는 설치되어 있다면 아래와 같이 pip을 설치합니다.

curl -O https://bootstrap.pypa.io/get-pip.py

python3 get-pip.py --user

Hail 툴 의존성 패키지 및 프로그램 설치

sudo yum install -y java-11-amazon-corretto-headless
sudo yum groupinstall -y "Development Tools"
sudo yum install -y lapack-devel blas-devel

Hail 설치

pip install hail

Hail 테스트

import hail as hl
mt = hl.balding_nichols_model(n_populations=3,
                              n_samples=10,
                              n_variants=100)
mt.show()

---

참고문서

연구자를 위한 AWS 서비스


연구자를 위한 AWS 서비스

Amazon Lightsail for Research

 

서비스 소개

홈페이지

연구용 Amazon Lightsail을 사용하면 클라우드의 강력한 컴퓨터에서 연구를 가속화할 수 있습니다. Scilab, RStudio, Jupyter 등 선호하는 연구 애플리케이션이 사전 설치되어 있어 몇 번의 클릭만으로 바로 사용할 수 있습니다. 브라우저를 통해 원격으로 실행되는 애플리케이션에 액세스하고 웹 인터페이스를 통해 가상 컴퓨터에 데이터를 업로드 및 다운로드할 수 있습니다. 가상 컴퓨터를 사용하는 기간 동안 번들 요금만 지불하면 됩니다.

image.png

관련 워크샵

 

연구자를 위한 AWS 서비스

Research and Engineering Studio on AWS

RES(Research and Engineering Studio on AWS)는 관리자가 안전한 클라우드 기반 연구 및 엔지니어링 환경을 만들고 관리할 수 있는 사용하기 쉬운 오픈 소스 웹 기반 포털입니다. 과학자와 엔지니어는 RES를 사용하여 클라우드 전문 지식 없이도 데이터를 시각화하고 대화형 애플리케이션을 실행할 수 있습니다.

https://aws.amazon.com/hpc/res/

https://aws.amazon.com/blogs/hpc/new-research-and-engineering-studio-on-aws/

users-shot.png


CleanShot-2023-11-08-at-10.57.51.png

CleanShot-2023-11-08-at-10.59.48.pngres-architecture.png

유용한 링크들 모음

생명과학 Ramp-Up guide

Bioinformatics on AWS Workshops
FSx for Lustre, AWS Batch, Step Fucntions 등 관련 서비스와 더불어 간단한 Bioinfo 워크샵

EC2 따라잡기

EC2 따라잡기

실습용 윈도우 EC2 인스턴스 자동화

이 가이드는 AWS CLI를 사용하여 윈도우 서버 EC2 인스턴스를 여러 개 자동으로 설정하는 과정을 상세히 설명합니다. 실제 환경에서는 사용자의 요구사항에 맞게 설정을 조정해야 하며, 실제 테스트가 반드시 필요합니다.

사전 요구사항

전체 워크플로우

  1. 초기 EC2 인스턴스 실행
  2. 윈도우 인스턴스에 접속하여 필요한 프로그램 설치
  3. 커스텀 AMI 생성
  4. 커스텀 AMI를 이용해 필요한 만큼의 인스턴스 실행
  5. 결과 CSV 파일 확인

상세 과정

1. 초기 EC2 인스턴스 실행

먼저, 커스텀 AMI를 만들기 위한 초기 인스턴스를 실행합니다. 다음 AWS CLI 명령어를 사용하세요:

aws ec2 run-instances \
  --image-id ami-04df9ee4d3dfde202 \
  --instance-type m5.large \
  --key-name your-key-pair-name \
  --security-group-ids sg-your-security-group-id \
  --subnet-id subnet-your-subnet-id \
  --count 1 \
  --associate-public-ip-address

주의: --image-id, --instance-type, --key-name, --security-group-ids, --subnet-id를 사용자의 환경에 맞게 수정하세요.

2. 윈도우 인스턴스에 접속 및 프로그램 설치

RDP를 사용하여 윈도우 인스턴스에 접속한 후, 필요한 프로그램을 설치합니다.

3. 커스텀 AMI 생성

다음 Bash 스크립트를 사용하여 커스텀 AMI를 생성할 수 있습니다:

#!/bin/bash

# AMI 생성 함수
create_ami() {
    local instance_id=$1
    local ami_name=$2
    local ami_description=$3

    aws ec2 create-image \
        --instance-id "$instance_id" \
        --name "$ami_name" \
        --description "$ami_description" \
        --no-reboot \
        --query 'ImageId' \
        --output text
}

# AMI 상태 확인 함수
check_ami_status() {
    local ami_id=$1
    aws ec2 describe-images \
        --image-ids "$ami_id" \
        --query 'Images[0].State' \
        --output text
}

# 메인 스크립트
echo "인스턴스 ID를 입력하세요:"
read instance_id

echo "새 AMI의 이름을 입력하세요:"
read ami_name

echo "새 AMI의 설명을 입력하세요:"
read ami_description

echo "AMI 생성 중..."
ami_id=$(create_ami "$instance_id" "$ami_name" "$ami_description")

echo "AMI 생성이 시작되었습니다. AMI ID: $ami_id"
echo "AMI가 사용 가능할 때까지 대기 중..."

while true; do
    status=$(check_ami_status "$ami_id")
    if [ "$status" = "available" ]; then
        echo "AMI가 사용 가능합니다."
        break
    elif [ "$status" = "failed" ]; then
        echo "AMI 생성에 실패했습니다."
        exit 1
    else
        echo "현재 상태: $status. 30초 후 다시 확인합니다..."
        sleep 30
    fi
done

echo "최종 AMI ID: $ami_id"

4. 커스텀 AMI를 이용한 다수의 인스턴스 실행

다음 Bash 스크립트를 사용하여 커스텀 AMI로부터 여러 인스턴스를 실행하고 설정할 수 있습니다:

#!/bin/bash

# 랜덤 비밀번호 생성 함수
generate_password() {
    openssl rand -base64 12
}

# 인스턴스 실행 함수
launch_instance() {
    local instance_number=$1
    local initial_password=$2
    aws ec2 run-instances \
        --image-id ami-your-custom-ami-id \
        --count 1 \
        --instance-type m5.large \
        --key-name your-key-pair-name \
        --security-group-ids sg-your-security-group-id \
        --subnet-id subnet-your-subnet-id \
        --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=WindowsInstance-'$instance_number'}]' \
        --user-data "net user Administrator '${initial_password}'" \
        --query 'Instances[0].InstanceId' \
        --output text
}

# 공개 IP 가져오기 함수
get_public_ip() {
    local instance_id=$1
    aws ec2 describe-instances \
        --instance-ids $instance_id \
        --query 'Reservations[0].Instances[0].PublicIpAddress' \
        --output text
}

# SSM을 사용한 비밀번호 변경 함수
change_password() {
    local instance_id=$1
    local new_password=$2
    aws ssm send-command \
        --instance-ids "$instance_id" \
        --document-name "AWS-RunPowerShellScript" \
        --parameters "commands=[\"net user Administrator '${new_password}'\"]" \
        --output text
}

# 초기 비밀번호 입력 받기
read -s -p "모든 인스턴스의 초기 비밀번호를 입력하세요: " INITIAL_PASSWORD
echo

# 생성할 인스턴스 수 입력 받기
read -p "생성할 인스턴스 수를 입력하세요: " INSTANCE_COUNT

# CSV 파일 준비
echo "Instance ID,Public IP,Username,Password" > rdp_info.csv

# 인스턴스 실행
echo "$INSTANCE_COUNT 개의 인스턴스를 실행 중..."
instance_ids=()
for i in $(seq 1 $INSTANCE_COUNT); do
    instance_id=$(launch_instance $i "$INITIAL_PASSWORD")
    instance_ids+=($instance_id)
    echo "인스턴스 $i 실행됨: $instance_id"
done

# 인스턴스 실행 대기 및 추가 5분 대기
echo "인스턴스가 실행되고 안정화될 때까지 대기 중..."
aws ec2 wait instance-running --instance-ids "${instance_ids[@]}"
echo "인스턴스가 실행 중입니다. 완전한 초기화를 위해 추가로 5분 대기합니다..."
sleep 300

# 각 인스턴스 처리
for instance_id in "${instance_ids[@]}"; do
    echo "인스턴스 처리 중: $instance_id"
    
    # 공개 IP 가져오기
    public_ip=$(get_public_ip $instance_id)
    
    # 새 비밀번호 생성
    new_password=$(generate_password)
    
    # 비밀번호 변경
    echo "인스턴스 $instance_id의 비밀번호 변경 중..."
    change_password "$instance_id" "$new_password"
    
    # CSV에 추가
    echo "$instance_id,$public_ip,Administrator,$new_password" >> rdp_info.csv
    
    echo "인스턴스 $instance_id 처리 완료"
done

echo "모든 인스턴스가 실행되고 처리되었습니다. RDP 정보가 rdp_info.csv 파일에 저장되었습니다."
echo "주의: 비밀번호가 무작위로 생성된 새 비밀번호로 변경되었습니다."

주의사항:

5. 결과 CSV 파일 확인

스크립트 실행이 완료되면 rdp_info.csv 파일에 각 인스턴스의 접속 정보가 저장됩니다. 이 파일을 안전하게 보관하세요.

참고: 30개의 인스턴스를 실행하는데 약 74초 정도 소요되었습니다.

Screenshot 2024-07-06 at 12.24.23 AM.png

결론

이 가이드를 통해 AWS CLI를 사용하여 윈도우 EC2 인스턴스를 자동으로 설정하는 방법을 배웠습니다. 이 과정을 통해 다수의 윈도우 인스턴스를 효율적으로 관리할 수 있습니다. 하지만 실제 환경에 적용하기 전에 반드시 테스트를 진행하고, 보안 설정을 신중히 검토해야 합니다.

추가 질문이나 도움이 필요하다면 언제든 문의해주세요!

EC2 따라잡기

Rstudio 실습환경 자동화 구성

Amazon EC2의 Ubuntu 24버전 기준으로 아래 문서를 작성했습니다. 아래 내용은 시간이 지남에 따라 적절히 작동하지 않을 수 있으므로 필요한대로 수정하고 확인하는 것을 추천드립니다!

 

Amazon EC2의 User data 기능을 사용하기 위해 User Data내용을 파일로 만들어둡니다.

여기 예에서는 install_rstudio.txt라고 파일을 만들었습니다.

#!/bin/bash

# update indices
apt update -qq
# install two helper packages we need
apt install -y --no-install-recommends software-properties-common dirmngr
# add the signing key (by Michael Rutter) for these repos
# To verify key, run gpg --show-keys /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
# Fingerprint: E298A3A825C0D65DFD57CBB651716619E084DAB9
wget -qO- https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | tee -a /etc/apt/trusted.gpg.d/cran_ubuntu_key.asc
# add the repo from CRAN -- lsb_release adjusts to 'noble' or 'jammy' or ... as needed
add-apt-repository -y "deb https://cloud.r-project.org/bin/linux/ubuntu $(lsb_release -cs)-cran40/"

# Install R
apt install -y --no-install-recommends r-base

# Install RStudio dependencies
apt install -y gdebi-core

# Install R pkacage dependencies
apt install -y build-essential

wget https://download2.rstudio.org/server/jammy/amd64/rstudio-server-2024.12.1-563-amd64.deb

gdebi -n rstudio-server-2024.12.1-563-amd64.deb

# Add rstudio user and set password
useradd -m -s /bin/bash rstudio
echo "rstudio:rstudio" | chpasswd

R -e "options(HTTPUserAgent = sprintf('R/%s R (%s)', getRversion(), paste(getRversion(), R.version['platform'], R.version['arch'], R.version['os']))); install.packages('TwoSampleMR', repos = c('https://mrcieu.r-universe.dev/bin/linux/noble/4.4/', 'https://p3m.dev/cran/__linux__/noble/latest', 'https://cloud.r-project.org'))"

이제 다음과 같은 명령어로 EC2를 실행할 수 있습니다. 이 부분이 어렵다면 Amazon EC2 콘솔에서 먼저 진행 후 Command line을 완성하는 것을 추천드립니다.

export AMI_ID={Ubuntu 나 필요한 OS가 설치된 Base AMI}
export INSTANCE_TYPE=t3.large
export KEY_NAME={본인의 KeyName}

# 이외에도 security group (sg-로 시작하는 것들)과 SnapshotId는 본인의 맞게 설정합니다.

aws ec2 run-instances --image-id "${AMI_ID}" --instance-type "${INSTANCE_TYPE}" --key-name "${KEY_NAME}" \
    --user-data file://install_rstudio.txt \
    --block-device-mappings '{"DeviceName":"/dev/sda1","Ebs":{"Encrypted":false,"DeleteOnTermination":true,"Iops":3000,"SnapshotId":"snap-0dbe62bb8f1f21357","VolumeSize":100,"VolumeType":"gp3","Throughput":125}}' \
    --network-interfaces '{"AssociatePublicIpAddress":true,"DeviceIndex":0,"Groups":["sg-0d2f7724e68ddff15","sg-0e2c103f2a28a9be7"]}' \
    --credit-specification '{"CpuCredits":"unlimited"}' --tag-specifications '{"ResourceType":"instance","Tags":[{"Key":"Name","Value":"rstudio server"}]}' \
    --metadata-options '{"HttpEndpoint":"enabled","HttpPutResponseHopLimit":2,"HttpTokens":"required"}' \
    --private-dns-name-options '{"HostnameType":"ip-name","EnableResourceNameDnsARecord":true,"EnableResourceNameDnsAAAARecord":false}' \
    --count "1" --region ap-northeast-2

EC2로 접속해봅니다. 인스턴스 구성이 예상한대로 잘되었다면 아래와 같이 AMI로 만들수 있습니다.

aws ec2 create-image \
    --instance-id {본인의 대상 인스턴스 아이디} \
    --name "My Rstudio server" \
    --description "An AMI for my Rstudio server with TwoSampleMR R package" \
    --region ap-northeast-2

이제 만들어진 AMI로 원하는 수와 설정내용으로 새로운 인스턴스를 실행해보세요!

대규모 인스턴스 수의 실습환경을 제공시 사전에 실습 환경 구성을 해둘 것을 권장합니다. 아래 설명한 인스턴스 생성에대한 Quota 제한도 존재할 수 있고 예기치못한 상황이 있을 수 있으므로 반드시 실습 환경을 실제로 운영하기 시작 전에 충분한 시간을 가지고 인스턴스를 미리 만들어 두는 것을 추천합니다.

AWS에서는 기본 서비스 Quota가 존재합니다. 예를들어 계정 내의 API 초당 요청수, Ec2 인스턴스 요청 수 등이 그 예입니다.
https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html
다음을 참고하여 필요한 만큼 Quota를 사전에 늘리시는 것을 권장드립니다.
https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html