AWS

AWS EC2 Connect to S3, Streamlit Web (2025 june)

개요

  • EC2 접속을 할 수 있다.
  • EC2에서 개발환경 설정을 할 수 있다.

회원가입

image.png

image.png

image.png

  • 회원가입 진행

image.png

  • 재 로그인

image.png

IAM user sign in

  • Account ID : 12자리 숫자로 AWS 계정을 식별하는 고유 값이다. 같은 회사라도 계정마다 ID가 다르다.
  • IAM User : 각 IAM User는 별도 패스워드·액세스키를 갖고, 정책으로 권한을 제한

image.png

AWS SageMaker 개발 환경 설정 on Windows 11 (feat. Anaconda)

개요

  • Anaconda 설치 (2025년 버전)
  • Windows 11에서 설치 후 딥러닝 프레임워크 까지 개발환경 설정

다운로드

image.png

  • 다음 화면에서 Download 버튼 클릭

image.png

image.png

설치파일 실행

  • 필자는 관리자 권한으로 실행하는 것을 선호함

image.png

image.png

  • 어떤 분은 Just Me 선택하기도 하지만, 필자는 All Users 선택

image.png

  • 설치 경로 확인

image.png

  • 기존에 Python이 설치가 되었더라도 Anaconda 파이썬 기준으로 테스트 할 예정이기 때문에 반드시 체크할 것
  • 확인 버튼 클릭한다.

image.png

Amazon SageMaker ML on Local Machine via VS Code

개요

  • AWS SageMaker 사용하여 ML 코드 생성
  • VS Code에서 코드 생성
  • S3 Bucket에서 모델 업로드 및 다운로드 응용하여 테스트 진행 코드

사전조건

  • SageMaker가 정상적으로 실행되려면 Docker가 필요할 수 있기, Docker를 먼저 설치하기를 바란다.

AWS & SageMaker 연결 설정

Screenshot 2025-03-09 at 4.49.34 PM.png

Connect EC2 to VSCode using AWS Toolkit (2025 march)

개요

  • Root 계정에서 사용자 그룹 만들기, I AM 정책
  • 사용자 계정에서 정책과 역할 분배하기
  • VS Code에서 AWS Toolkit 이용해서 접속하기

사전조건

  • AWS 회원가입은 완료되어 있고, 로그인이 된 상태라 가정한다.
  • VS Code에서 AWS Toolkit 설치가 되어 있다고 가정한다.

Root 계정에서 I AM 계정 만들기

사용자 생성

  • I AM 검색 후 사용자 클릭, 사용자 생성 버튼을 클릭한다.

Screenshot 2025-03-09 at 10.04.50 AM.png

  • 사용자 세부 정보에서 사용자 이름 선택
  • AWS Management Console에 대한 사용자 액세스 권한 제공 – 선택 사항
    • IAM 사용자를 생성하고 싶음
  • 콘솔 암호 지정
    • A!234567890
  • 사용자는 다음 로그인 시 새 암호를 생성해야 합니다 - 권장 체크 해제

Screenshot 2025-03-09 at 10.08.23 AM.png

AWS EC2 생성하기 (2025 march)

개요

  • EC2 프리티어 생성하기
  • 주요 개발환경 설정하기 (Ubuntu 기반)

EC2 프리티어 생성 및 연결

  • 계정 로그인 후, EC2 서비스 검색 후, EC2 클릭

Screenshot 2025-03-08 at 10.47.08 AM.png

  • 인스턴스란, “구현된 컴퓨터”라고 생각한다. 인스턴스 시작 버튼을 클릭한다.

Screenshot 2025-03-08 at 10.48.34 AM.png

  • 이제 본격적인 설계도를 하나 생성한다.
  • 필자는 lectureServer01 이라고 명명했다.

Screenshot 2025-03-08 at 11.06.39 AM.png

  • 다목적 개발이 목적이라면 Ubuntu(Linux)를 추천. 프리티어가 아닌 OS도 있으니 유의한다.

Screenshot 2025-03-08 at 11.08.18 AM.png

Connect to AWS via VS Code (2025 버전)

개요

  • VS Code가 설치가 되어 있다고 가정한다.
  • AWS 제품을 VS Code를 통해서 연결하도록 한다.

Prerequisites

  • VS Code requires a Windows, macOS, or Linux operating system.
  • The AWS Toolkit for Visual Studio Code requires you to work from VS Code version 1.73.0 or a later version.

AWS 회원가입

image.png

  • 이메일 인증절차 진행 후, PW 등록한다.

image.png

  • 연락처 정보를 입력한다.

image.png

  • 결제 정보를 기재한다.

image.png

VS Code with AWS EC2 접속

VSCode - Remote SSH 설치

  • putty 같은 SSH 툴로 vi 에디터 이용해서 수정
  • 매우 불편함
  • vscode에서 직접 EC2에 접속하도록 한다.

AWS Extension 확장팩 설치

  • 아래와 같이 확장팩을 설치한다.

Screenshot 2023-09-08 at 4.15.10 PM.png

Remote SSH Extension 확장팩 설치

  • Remote - SSH 확장팩을 아래와 같이 설치를 진행하도록 한다.

Screenshot 2023-09-08 at 4.27.47 PM.png

  • 설치가 완료가 되면 SSH 연결할 호스트를 입력한다.
ssh [계정]@[ip주소]
ssh aa@1.1.1.1 

Screenshot 2023-09-08 at 4.29.30 PM.png

  • /User/evan/.ssh/config 선택한다.

Screenshot 2023-09-08 at 4.30.40 PM.png

AWS EC2 접속 (with pem & ppk file)

멀티캠퍼스 AWS 서버 관련 정리

실습용 서버 실행

Untitled

  • 실습용 서버 사용자 정보 참조하여 로그인 (강의 때 공유)

  • 비밀번호 변경

    • 본인 비밀번호는 반드시 기억한다. (강사비번 : ****)
    • Slack 강사 DM으로 남겨주세요.

Untitled

EC2 실행

  • 우측 상단 리전 정보를 ‘오사카’로 변경 후 서비스 검색창에서 EC2 검색

Untitled

  • 변경된 상태에서 EC2 검색

Untitled

Untitled

S3 with Python Basic Tutorial

Bucket 만들기

  • Bucket을 만들어보도록 한다.
import boto3
print(boto3.__version__)
1.23.5
bucket = boto3.resource('s3')

response = bucket.create_bucket(
    Bucket = "your_bucket_name",
    ACL="private", # public-read
    
    CreateBucketConfiguration = {
        'LocationConstraint' : 'ap-northeast-2'
    }
)

print(response)
s3.Bucket(name='your_bucket_name')
  • 버킷 대시보드에서 실제 Bucket이 만들어졌는지 확인한다.

Client Bucket

  • 이번에는 client 버킷을 생성한다.
client = boto3.client('s3')

response = client.create_bucket(
    Bucket = "your_bucket_name",
    ACL = "private",
    
    CreateBucketConfiguration = {
        'LocationConstraint' : 'ap-northeast-2'
    }

)

print(response)
{'ResponseMetadata': {'RequestId': '1X0BAXRG653Q7Y61', 'HostId': 'WwKyxNBcd1V9x6D/WZn8twMKSWKBnkwVCPWtvarZvyNSSvqr7Q77J6OFAdWuYAwiv/nQfXoW/0U=', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amz-id-2': 'WwKyxNBcd1V9x6D/WZn8twMKSWKBnkwVCPWtvarZvyNSSvqr7Q77J6OFAdWuYAwiv/nQfXoW/0U=', 'x-amz-request-id': '1X0BAXRG653Q7Y61', 'date': 'Wed, 25 May 2022 03:16:52 GMT', 'location': 'http://your_bucket_name.s3.amazonaws.com/', 'server': 'AmazonS3', 'content-length': '0'}, 'RetryAttempts': 0}, 'Location': 'http://your_bucket_name.s3.amazonaws.com/'}

Resource와 Client의 차이

  • Resource
    • high-level, 객체지향적 인터페이스
    • resource description에 의해 만들어짐
    • 식별자(identifier)와 속성(attribute)을 사용
    • 자원에 대한 조작 위주
  • Client
    • low-level 인터페이스
    • service description에 의해 만들어짐
    • botocore 수준의 client를 공개(botocore는 AWS CLI와 boto3의 기초가 되는 라이브러리)
    • AWS API와 1:1 매핑됨
    • 메소드가 스네이크 케이스로 정의되어 있음

이미지 업로드 및 조회

  • 일반적으로 이미지를 업로드 하는 코드는 다음과 같다.
    • 단, Django나 Flask 등을 활용하여 이미지를 업로드할 때는 코드 작성 방법이 달라지니 참고용으로 확인한다.
  • 코드 실행 후, Web UI에서 직접 확인한다.

IAM User Practice

라이브러리 불러오기

  • 기 설치된 라이브러리를 불러오도록 한다.
import boto3
print(boto3.__version__)
1.23.5

IAM User 관련 주요 코드

  • 다음 코드는 유저를 생성하는 코드이다.
def create_user(username):
    iam = boto3.client('iam')
    response = iam.create_user(UserName=username)
    print(response)

create_user('testuser2fromwsl2')
{'User': {'Path': '/', 'UserName': 'testuser2fromwsl2', 'UserId': 'AIDAVRRRQ3HFXFQPOOY7Q', 'Arn': 'arn:aws:iam::381282212299:user/testuser2fromwsl2', 'CreateDate': datetime.datetime(2022, 5, 24, 5, 30, 6, tzinfo=tzutc())}, 'ResponseMetadata': {'RequestId': 'd5fa242b-9aa9-4ad9-a75a-ed23e041d4ba', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'd5fa242b-9aa9-4ad9-a75a-ed23e041d4ba', 'content-type': 'text/xml', 'content-length': '495', 'date': 'Tue, 24 May 2022 05:30:05 GMT'}, 'RetryAttempts': 0}}
  • 이번에는 모든 사용자를 가져오는 코드를 작성한다.
def all_users():
    iam = boto3.client('iam')
    paginator = iam.get_paginator('list_users')
    for response in paginator.paginate():
        for user in response['Users']:
            username = user['UserName']
            Arn = user['Arn']
            print('Username : {} Arn : {}'.format(username, Arn))

all_users()
Username : aws-wsl2 Arn : arn:aws:iam::381282212299:user/aws-wsl2
Username : human Arn : arn:aws:iam::381282212299:user/human
Username : human-m1 Arn : arn:aws:iam::381282212299:user/human-m1
Username : testuser Arn : arn:aws:iam::381282212299:user/testuser
Username : testuser2 Arn : arn:aws:iam::381282212299:user/testuser2
Username : testuser2fromwsl2 Arn : arn:aws:iam::381282212299:user/testuser2fromwsl2
Username : testuser3 Arn : arn:aws:iam::381282212299:user/testuser3
  • 이번에는 사용자 이름을 변경한다.
    • testuser2fromwsl2 이름을 updatetest로 변경하는 코드다.
def update_user(old_username, new_username):
    iam = boto3.client('iam')
    
    response = iam.update_user(
        UserName=old_username, 
        NewUserName=new_username
    )
    
    print(response)

update_user('testuser2fromwsl2', 'updatetest')
all_users()
{'ResponseMetadata': {'RequestId': '4a567c96-d5ce-4e76-9344-6ab762fc9e01', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '4a567c96-d5ce-4e76-9344-6ab762fc9e01', 'content-type': 'text/xml', 'content-length': '200', 'date': 'Tue, 24 May 2022 05:30:16 GMT'}, 'RetryAttempts': 0}}
Username : aws-wsl2 Arn : arn:aws:iam::381282212299:user/aws-wsl2
Username : human Arn : arn:aws:iam::381282212299:user/human
Username : human-m1 Arn : arn:aws:iam::381282212299:user/human-m1
Username : testuser Arn : arn:aws:iam::381282212299:user/testuser
Username : testuser2 Arn : arn:aws:iam::381282212299:user/testuser2
Username : testuser3 Arn : arn:aws:iam::381282212299:user/testuser3
Username : updatetest Arn : arn:aws:iam::381282212299:user/updatetest

Python AWS 연동 예제

import boto3
import json

def create_policy():
    iam = boto3.client('iam')

    user_policy = {
        "Version":"2012-10-17",
        "Statement":[
            {
                "Effect": "Allow",
                "Action": "*",
                "Resource": "*"
            }
        ]
    }

    response = iam.create_policy(
        PolicyName = 'pyFullAccess',
        PolicyDocument=json.dumps(user_policy)
    )
    print(response)


create_policy()
{'Policy': {'PolicyName': 'pyFullAccess', 'PolicyId': 'ANPAVRRRQ3HFQIRVWB2MX', 'Arn': 'arn:aws:iam::381282212299:policy/pyFullAccess', 'Path': '/', 'DefaultVersionId': 'v1', 'AttachmentCount': 0, 'PermissionsBoundaryUsageCount': 0, 'IsAttachable': True, 'CreateDate': datetime.datetime(2022, 5, 23, 5, 40, 21, tzinfo=tzutc()), 'UpdateDate': datetime.datetime(2022, 5, 23, 5, 40, 21, tzinfo=tzutc())}, 'ResponseMetadata': {'RequestId': '8da83bae-6c24-4104-9da4-22795e46652a', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '8da83bae-6c24-4104-9da4-22795e46652a', 'content-type': 'text/xml', 'content-length': '759', 'date': 'Mon, 23 May 2022 05:40:21 GMT'}, 'RetryAttempts': 0}}
  • AWS 콘솔창에서 IAM 대시보드에서 정책을 클릭하면 PolicyName인 pyFullAccess가 등록되어 있는 것을 확인할 수 있다.