반응형

1. 시험환경

    ˙ Ubuntu

    ˙ ArgoCD

 

2. 목적

    ˙ ArgoCD에서 계정(신규 사용자)을 추가하는 방법을 알아보자.

 

3. 적용

    ① ArgoCD ConfigMap 파일을 수정하기 위해 edit 한다.

        - 명령어 : $ kubectl edit configmap argocd-cm -n argo

 

    ② configmap 파일에서 신규 사용자를 추가한다.

        - 신규 계정 : new-user

1
2
3
data:
    accounts.new-user: login, apiKey
    accounts.new-user.enabled: "true"
cs

 

    ③ 콘솔에서 Admin 계정으로 argocd에 로그인한다.

        $ argocd login url

 

    ④ 추가한 신규 사용자(여기서는 new-user)가 계정 목록에 들어 갔는지 확인한다.

        $ argocd account list

 

    ⑤ 계정 상태를 확인한다.

        $ argocd  account  get  --account  new-user

 

    ⑥ 신규 계정의 PW를 설정한다.

        $ argocd  account  update-password  new-user

 

4. 결과

    ˙ 추가한 계정 ID와 PW로 ArgoCD 사이트에 접속되는지 확인한다.

반응형
반응형

1. 시험환경

    ˙ 윈도우 커맨드

    ˙ 리눅스(ubuntu)

    ˙ AWS CodeCommit, IAM

 

2. 목적

    ˙ AWS CodeCommit을 사용하기 위한 사전 설정 절차를 알아보자.

    ˙ AWS CodeCommit에서 생성한 Repository에 코드를 업로드(push)하는 방법을 알아보자.

 

3. 적용

    ① Host PC에 Git을 설치한다.

        - Host PC가 윈도우(window)인 경우 : https://languagestory.tistory.com/40

 

[git] Git CLI 최신 버전 설치 (window)

1. 시험환경 - 윈도우 11 - git-scm 2. 목적 - 윈도우 환경에서 GIT 최신 버전을 설치한다. 3. 적용 ① GIT 사이트에 접속하여 설치 프로그램을 다운 받는다. - URL : httpgit-scm.com ② Windows용 설치 파일을 다

languagestory.tistory.com

 

        - Host PC가 리눅스(ubuntu)인 경우 : $ sudo apt-get install git

 

    ② Host PC에 AWS CLI(AWS Command Line Interface)를 설치한다.

        - https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html

 

최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

 

    ③ AWS CodeCommit 권한이 부여된 IAM 계정을 만들고, 보안 자격증명(CodeCommit ID/PW)을 생성한다.

 

    ④ AWS CodeCommit에 New Repository를 생성한다. (또는 기존 Repository 사용)

        - HTTPS, SSH 복사 버튼 클릭시 Repository의 URL 주소가 복사된다.

 

    ⑤ Git에서 클라이언트와 서버 간 전송되는 데이터를 암호화하기 위하여 HTTPS credential 설정한다.

        - Host PC가 윈도우(window)인 경우 : 큰 따옴표("")

1
2
git config --global credential.helper "!aws codecommit credential-helper $@"
git config --global credential.UseHttpPath true
cs

 

        - Host PC가 리눅스(ubuntu)인 경우 : 작은 따옴표('')

1
2
git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
cs

 

    ⑥ 원격지 Repository를 Host PC의 프로젝트 폴더(.)에 복제(clone)한다.

        - 명령어 : git clone [git-repository-url] .

        -  git-repository-url : ④번 절차에서 HTTPS 복사

        - 원격 Repository 복제시 팝업창에 보안자격증명 ID/PW(③번 절차)를 입력한다.

 

    ⑦ Host PC의 프로젝트 폴더(.)에 소스코드를 생성 및 작업 한다.

 

    ⑧ Host PC의 프로젝트 폴더에 만들어진 코드를 원격지 Repository에 commit & push 한다.

        - git add *
        - git commit -m "message"
        - git push

 

4. 결과

    ˙ Host PC에서 생성한 프로젝트 코드가 AWS CodeCommit Repository에 업로드(push)된 것을 확인한다.

 

반응형
반응형

1. 시험환경

    ˙ AWS

    ˙ VPC, Subnet, NACL(Network Access Control List), Security Group, Routing, IGW, EC2

 

2. 목적

    ˙ AWS 콘솔에서 VPC, Subnet, NACL, 보안그룹 등을 이용하여 네트워크를 구성한다.

    ˙ Private Subnet에서 생성된 EC2에 접속하기 위한 AWS 네트워크 구성법을 알아보자. 

AWS 구성도

 

3. 적용

    ① VPC를 생성한다.

        - VPC 이름 : study-vpc

 

    ② VPC 안에서 서브넷(subnet) 2개를 생성한다.

        - 서브넷 이름 : study-public-subnet

        - 서브넷 이름 : study-private-subnet

 

    ③ 라우팅 테이블을 생성하고 명시적으로 서브넷에 연결한다.

        - 기본 라우팅 테이블 : study-private-routing

        - 라우팅 테이블 생성 : study-public-routing

 

    ④ Public Subnet에 인터넷 연결을 위한 인터넷 게이트웨이를 생성한다.

        - IGW : study-igw

 

    ⑤ NACL을 생성한다. (NACL은 stateless 성격을 갖으므로 Inbound/Outbound 모두 설정해야 한다.)

        - 기본 라우팅 테이블 : study-private-nacl

        - 라우팅 테이블 생성 : study-public-nael

        - 여기서는 모든 Inbound/Outbound를 허용하였다.

 

NACL 인바운드규칙 설정

 

    ⑥ 보안그룹(security group)을 설정한다.

        - ec2-public-sg : 모든 소스에 대하여 ssh 접속 포트 허용 설정

        - ec2-private-sg : 소스가 "ec2-public-sg"인 경우만 허용 설정 했음에 주의 (★중요)

보안그룹 생성

 

private 보안그룹의 인바운드는 public 보안그룹만 허용 설정

 

    ⑦ Public/Private 서브넷에서 각각 EC2를 생성한다.

Public Subnet 안에 있는 EC2는 외부 접속을 위해 퍼블릭 IP 할당

 

Private Subnet 안에 있는 EC2는 외부 접속 차단을 위해 프라이빗 IP만 할당

 

4. 결과

    ˙ Public 서브넷에 있는 EC2에 접속한 후 Private 서브넷에 있는 EC2를 접속한다.

 

반응형
반응형

1. 시험환경

    ˙ AWS

 

2. 목적

    ˙ AWS Lambda 서비스(함수)를 생성한다.

    ˙ AWS Lambda 함수를 트리거 하기위해 API Gateway를 생성한다.

    ˙ API Gateway에 등록한 URL에 의하여 AWS Lambda 서비스(함수)가 실행되는지 확인한다.

 

3. 적용

    ① AWS Lambda 함수를 생성한다.

 

    ② 람다함수의 코드를 생성하고 "Deploy" 버튼을 클릭한다.

        - Deploy 마다 Log Stream이 1개씩 생성되어 로그가 남겨진다.

 

    ③ AWS Lambda를 실행하기 위한 "트리거 추가" 버튼을 클릭한다.


    ④ 설정정보를 입력하고 "API 게이트웨이"를 생성한다.

 

    ⑤ AWS Lambda 함수에 API Gateway가 연동된 것을 확인한다.

 

    ⑥ API Gateway 기본 경로에 추가 경로 및 방식(ANY, GET, POST 등)을 구성할 수 있다.

 

    ⑦ API Gateway 기본경로에 AWS Lambda 서비스 연결을 설정한다.

 

    ⑧ API Gateway 세부정보에서 URL을 확인한다.

 

4. 결과

    ˙ 트리거 입력에 의하여 AWS Lambda 서비스가 호출되는지 확인한다.

        - URL : http://[API-Gateway-URL]/[기본경로]

 

반응형
반응형

1. 시험환경

    ˙ EC2, 대상그룹(Target Group)

    ˙ ALB(ELB)

    ˙ Route 53

    ˙ ACM(AWS Certificate Manager)

 

2. 목적

    ˙ ELB의 대상그룹(Target Group)을 생성하고 대상그룹 안에 EC2 인스턴스를 할당하는 방법을 알아보자.

    ˙ ELB 인스턴스를 생성하고 대상그룹(Target Group)을 설정하는 방법을 알아보자.

    ˙ Route 53에 도메인을 등록하고 ELB 인스턴스를 설정하는 방법을 알아보자.

    ˙ Route 53에 TLS(https) 인증서를 적용하는 방법을 알아보자.

    ˙ 아래와 같은 구성으로 개발한 웹서비스를 제공할 수 있는지 알아보자.

서비스 구성도

 

3. 적용

    ① 대상그룹(Target Group) 생성(create) 버튼을 클릭하여 이름 및 서비스 프로토콜/포트를 입력한다.

        - Traget group name : 대상 그룹 이름

        - Protocol, Port : EC2의 서비스 프로토콜 및 포트

 

    ② 대상그룹(Target Group)에 포함할 "running 상태의 EC2" 및 서비스 포트를 선택하고 대상그룹을 생성한다.

        - EC2의 Listening Port는 3000으로 설정하였다. (서비스 마다 다름)

대상그룹(Target Group)에 포함할 EC2(running) 선택
Target Group 생성 결과
설정 부분 (빨간색 박스)

 

    ③ ALB(Application Load Balancer)를 생성한다.

 

    ④ ALB 의 Listener/Forward 규칙을 설정한다.

        - Listener : HTTP / 80

        - Action : 대상그룹(Target Group) 선택

 

설정부분 (빨간색 박스)

 

    ⑤ Route 53에 등록된 도메인과 ELB를 연결한다.

        - 별칭 : 활성화

        - 트래픽 라우팅 대상 : ALB

설정부분 (빨간색 박스)

 

    ⑥ TLS(https)를 적용할 도메인 정보를 입력하여 인증서를 발급한다.

 

    ⑦ 도메인 소유권 인증을 위해 생성된 이름/값을 Route 53에서 CNAME으로 등록한다.

설정 부분 (빨간색 박스)

 

4. 결과

    ˙ DNS 도메인을 입력하여 서비스 되는지 확인한다.

 

반응형
반응형

1. 시험환경

    ˙ Github

    ˙ Ubuntu v20.04

    ˙ Docker, Docker Hub

    ˙ Spring Boot Project

 

2. 목적

    ˙ Github에서 Spring Boot Project를 다운로드(pull) 한다.

    ˙ Spring Boot Project가 정상적으로 빌드(build) 되어 결과 파일(war, jar)가 생성되는지 확인한다.

    ˙ build.gradle 파일에서 JIB 라이브러리 추가 및 JIB 영역을 작성한다.

    ˙ JIB을 이용하여 Spring Boot Project를 Docker Image 빌드 및 Docker Hub에 업로드(push) 한다.

    ˙ Docker Hub에서 다운로드(pull) 하고 컨테이너를 실행하여 동작여부를 확인한다.

 

3. 적용

    ① Spring Boot 프로젝트를 생성한다.

        - Git Clone 명령어 : git clone [repository] .

        - Repository :  https://github.com/silkWater/template-gradle-springboot.git

 

GitHub - silkWater/template-gradle-springboot

Contribute to silkWater/template-gradle-springboot development by creating an account on GitHub.

github.com

 

    ② 프로젝트 빌드(Gradle) 명령어 실행 후 BUILD SUCCESSFUL 및 결과 파일이 생성된 것을 확인한다.

        - JIB Build와 상관없이 해당 프로젝트의 빌드(Gradle Build)가 정상적으로 SUCCESS 되는지 확인하기 위한 단계이다.

        - Gradle 빌드 명령어 : $ gradle build --info

        - 빌드 파일 경로 : $ (pwd)/build/libs/[파일명].war

 

    ③ build.gradle 파일에서 JIB 라이브러리를 추가하고 빌드 명세(기존 Dockerfile 역활)를 작성한다.

        - plugins 추가 : id 'com.google.cloud.tools.jib' version '3.1.4'

        - 빌드 명세 작성 (기존 Dockerfile 역활) : jib { ... }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
plugins {
        id 'org.springframework.boot' version '2.7.1'
        id 'io.spring.dependency-management' version '1.0.11.RELEASE'
        id 'java'
        id 'war'
        id 'com.google.cloud.tools.jib' version '3.1.4'
}
 
group = 'com.boot.template'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
 
configurations {
        compileOnly {
                extendsFrom annotationProcessor
        }
}
 
repositories {
        mavenCentral()
}
 
dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        implementation 'javax.servlet:jstl'
        implementation "org.apache.tomcat.embed:tomcat-embed-jasper"
}
 
tasks.named('test') {
        useJUnitPlatform()
}
 
jib {
        from {
                image = 'adoptopenjdk/openjdk11:alpine-jre'
        }
        to {
                image = 'silkwater/boot-template'
                tags = ['1.0']
        }
        container {
                entrypoint = ['java''-Dspring.profiles.active=template''-jar''template-0.0.1-SNAPSHOT.war']
                // mainClass = 'com.test.StartApplication'
                jvmFlags = ['-Xms512m''-Xmx512m''-Xdebug''-XshowSettings:vm''-XX:+UnlockExperimentalVMOptions''-XX:+UseContainerSupport']
                ports = ['8080']
 
                environment = [SPRING_OUTPUT_ANSI_ENABLED: "ALWAYS"]
                labels = [version:project.version, name:project.name, group:project.group]
                creationTime = 'USE_CURRENT_TIMESTAMP'
                format = 'Docker'
        }
        extraDirectories {
                paths {
                        path {
                                from = file('build/libs')
 
                        }
                }
        }
}
cs

 

     Docker Hub에 업로드(push) 권한을 얻는다.

        - $ docker login

 

    JIB 명세에 의하여 Spring Boot 프로젝트를 docker image 빌드 및 정의된 Repository로 업로드(push) 한다.

        - Gradle JIB 빌드 명령어 : $ ./gradlew jib

 

    JIB(to)에서 지정한 Repository에 Docker Image가 업로드(push) 되었는지 확인한다.

        - Docker Hub Repository 전/후 비교

 

     Docker Hub로부터 이미지를 다운로드(pull) 받아 실행한다.

        - docker pull [repository]/[image]:[tag]

 

4. 결과

    ˙ HTTP 접속하여 서비스가 동작하는지 확인한다.

반응형
반응형

1. 시험환경

    ˙ Github

    ˙ Ubuntu v20.04

    ˙ Docker, Docker Hub

    ˙ Spring Boot Project

 

2. 목적

    ˙ Github에서 Spring Boot Project를 다운로드(pull) 한다.

    ˙ Spring Boot Project가 정상적으로 빌드(build) 되어 결과 파일(war, jar)가 생성되는지 확인한다.

    ˙ Dockerfile을 이용하여 Spring Boot Project를 Docker Image로 빌드한다.

    ˙ Docker Image를 Docker Hub에 업로드(push) 한다.

    ˙ Docker Hub에서 다운로드(pull) 하고 컨테이너를 실행하여 동작여부를 확인한다.

 

3. 적용

    ① Spring Boot 프로젝트를 생성한다.

        - Git Clone 명령어 : git clone [repository] .

        - Repository :  https://github.com/silkWater/template-gradle-springboot.git

 

GitHub - silkWater/template-gradle-springboot

Contribute to silkWater/template-gradle-springboot development by creating an account on GitHub.

github.com

 

    ② 프로젝트 빌드(Gradle) 명령어 실행 후 BUILD SUCCESSFUL 및 결과 파일이 생성된 것을 확인한다.

        - Gradle 빌드 명령어 : $ gradle build --info

        - 빌드 파일 경로 : $ (pwd)/build/libs/[파일명].war

 

    ③ 프로젝트의 최상위 디렉토리에서 Dockerfile을 작성한다.

    ④ Dockerfile에 의하여 Spring Boot 프로젝트를 docker image로 빌드한다.

       - Gradle 빌드 명령어 : $ docker build -t [repository:tag] .

 

    ⑤ Docker Hub에 업로드(push) 권한을 얻는다.

        - $ docker login

 

    ⑥ DockerHub에 이미지를 업로드(push) 한다.

        - $ docker push [repository:tag]

 

    ⑦ Docker Hub의 지정한 Repository에 Docker Image가 업로드(push) 되었는지 확인한다.

        - Docker Hub Repository 전/후 비교

 

 

    ⑧ Local PC의 docker image를 삭제하고 Docker Hub로부터 이미지를 다운로드(pull) 받는다.

    ⑨ 도커(docker) 컨테이너(container)를 실행한다.

 

4. 결과

    ˙ HTTP 접속하여 서비스가 동작하는지 확인한다.

 

반응형
반응형

1. 시험환경

    ˙ 우분투(ubuntu) v20.04

    ˙ AWS AMI : 사용자 생성

    ˙ AWS ECR(Elastic Container Registry)

 

2. 목적

    ˙ AWS ECR(Elastic Container Registry) 저장소(repository)를 생성한다.

        - 참고: https://languagestory.tistory.com/211 ①~⑥

    ˙ AWS CLI 사용을 위한 사용자로 IAM user를 등록한다.

        - 참고: https://languagestory.tistory.com/211~⑩

    ˙ Docker Image를 생성한 ECR 저장소에 업로드(push) 한다.

    ˙ ECR 저장소에 등록된 이미지를 다운로드(pull) 받는다.

 

3. 적용

    ① 우분투(ubuntu) 리눅스 환경에서 AWS-CLI 패키지를 설치한다.

        - sudo apt install awscli

 

    ② 설치완료 후 동작 여부를 확인한다.

        - $ aws cli

 

    ③ AWS CLI 사용을 위해 IAM 사용자를 등록한다. (참고: https://languagestory.tistory.com/211)

        - Access Key, Secret Key, reging, type(json)을 차례대로 입력한다.

 

    ④ 등록한 AWS ECR에 권한(pull) 획득을 위해 AWS-ECR과 Docker 로그인한다.

        - $ aws  ecr  get-login-password  --region  [region]  |  docker  login  --username  AWS  --password-stdin  [ECR URL]

 

    ⑤ DockerHub에서 nginx 이미지를 다운로드(pull) 한다.

 

    ⑥ 다운받은 이미지를 AWS ECR Repository에 push하기 위해 tag명을 생성한다.

        - $ docker  tag   [기존 REPOSITORY:TAG]   [신규 REPOSITORY:TAG]

 

    ⑦ AWS ECR로 업로드(push) 한다.

        - $ docker  push  [업로드 이미지 REPOSITORY : tag]

 

4. 결과

    ˙ ECR Repository에 도커 이미지가 등록된 것을 확인한다.

 

    ˙ Local PC에서 Docker Image를 삭제(rmi)하고 AWS ECR에 등록된 이미지를 다운로드(pull) 받는다.

        - $ docker  pull  [repository/image:tag]

 

반응형

+ Recent posts