DevEnjoy

One Step Closer

AWS

AWS CodeDeploy 설정

2016년 11월 18일 by YongPwi Leave a Comment

%ec%8a%ac%eb%9d%bc%ec%9d%b4%eb%93%9c2

  • Jenkins gProxyServer – Operation
    • 빌드 성공되면 AWS S3 버킷으로 결과물 업로드
    • Deploy an application to AWS CodeP plugin 사용
    • Deploy an application to AWS CodeDeply 설정값
      • AWS CodeDeploy Application Name : gProxyServer-Operation
      • AWS CodeDeploy Deployment Group : gp-gProxyServer-Operation
      • AWS CodeDeploy Deployment Config : CodeDeployDefault.OneAtATime
      • AWS Region : AP_NORTHEAST_2
      • S3 Bucket : gproxyserver-opertaion
      • Subdirectory : target/gProxyServer – 여기에 설정된 경로를 기준으로 아래 Include Files 를 가지고 온다.
        • appspec.yml 파일은 / 경로에 존재해야 한다. 그걸 고려해서 path를 잡아야 한다.
      • Include Files : **
      • Deploy Revision(radio selected)
      • Use Access/Secret keys – AWS AMI에 jenkins user 정보 등록

        • AWS Access Key : AKIAIKPIIGRGYZE22XFA
        • AWS Secret Key : ewLYt2u0suiYmMSm2uWVM/ueJtNWAZym4/LdLKTm
        • Secret Key 정보는 생성시에면 조회 가능, 분실시 재생성하고 jenkins 옵션에서 Access Key, Scret Key 정보 수정 필요
    • 빌드 및 S3까지는 정상적으로 처리 그러나 deploy 부분은 fail
      • 원인은 아직 못 찾음
      • jenkins 빌드 상태도 fail로 뜨기 때문에 콘솔 상태에서 build 상태와 S3로의 전송 로그를 확인 해야 한다.
  • AWS S3
    • Bucket: gproxyserver-opertaion 사용
    • jenkins에서 빌드가 완료되면 gProxyServer – Operation-896214853180744560.zip 형식으로 zip 파일로 저장
      확장자명 전에 숫자는 유니크 넘버인듯
  • CodeDeploy
    • 아마존 EC2 인스턴스 및 온프레미스에서 실행 중인 application 자동 배포 지원
    • 준비
      • EC2 인스턴스에서 S3에 접근하여 소스 다운을 위한 권한
      • CodeDeploy 서브시 실행 권한
      • 인스턴스에서 실행중인 Agent
      • 소스의 배포 명세하는 appspec.yml


    • IAM Role 생성
      • EC2 인스턴스를 위한 Role
        • Role을 생성하기 이전에 Policy를 먼저 생성한다.
          • Create Policy > Create Your Own Policy 클릭
          • Name : CodeDeploy-EC2-Policy
            Descriptions : Policy 설명을 적는다.
            Policy Document :

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            {
                "Version": "2012-10-17",
                "Statement": {
                    "Effect": "Allow",
                    "Action": [
                        "s3:Get*",
                        "s3:List*"
                    ],
                    "Resource": "*"
                }
            }
        • Create New Role

          • Set Role Name : CodeDeply-EC2
            Next Step 클릭

          • AWS Service Roles 탭 Amazon EC2 클릭

          • Attach Policy : CodeDeploy-EC2-Policy(상위에서 만든 Policy) 체크
            Next Step 클릭

          • Review : 입력한 정보 확인 후 Create Role 클릭

      • CodeDeploy를 위한 Role

        • Create New Role

          • Set Role Name : CodeDeploy-Service
            Next Step 클릭

          • AWS Service Roles 탭 Amazon EC2 클릭

          • Attach Policy : AWSCodeDeployRole 체크
            Next Step 클릭

          • Review : 입력한 정보 확인 후 Create Role 클릭

        • 추가 설정
          • IAM > Roles : 상위에서 만든 CodeDeploy-Service 클릭

          • 두번째 Trust Relationships 탭 선택 Edit Trust Relationship 클릭

          • Policy Document :

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            {
              "Version": "2012-10-17",
              "Statement": [
                {
                  "Sid": "",
                  "Effect": "Allow",
                  "Principal": {
                    "Service": "codedeploy.ap-northeast-2.amazonaws.com" // 환경에 맞는 resion 정보를 입력 해준다.
                  },
                  "Action": "sts:AssumeRole"
                }
              ]
            }
    • CodeDeploy Agent 설치

      • 배포될 EC2 인스턴스에 CodeDeploy Agent 설치

        • 1
          2
          3
          4
          5
          6
          7
          8
          sudo apt-get update
          sudo apt-get install python-pip
          sudo apt-get install ruby
          sudo apt-get install wget
          cd /home/ubuntu
          wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install
          chmod +x ./install
          sudo ./install auto
      • CodeDeploy 설치 상태 확인

        • 1
          sudo service codedeploy-agent statu
    • 배포 파일 준비

      • appspec.yml

        • AWS CodeDeploy 기본 배포 파일

        • 해당 파일은 압축된 원본 파일의 가장 상위에 존재해야 한다.

        • 1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          version: 0.0
          os
          : linux
          files
          :
            - source
          : /       // 배포될 소스 경로 지정(단일 파일 혹은 디렉토리 지정 가능)
              destination
          : /opt/tomcat-8.5.6/webapps/gProxyServer     // 인스턴스에 배포될 경로 지정
          hooks
          :
            BeforeInstall
          :       // 소스가 배포되기 전에 실행할 스크립트
               - location
          : scripts//stopTomcat.sh
            AfterInstall
          :    // 소스가 배포된 이후에 실행할 스크립트
              - location
          : scripts/reStartTomcat.sh
                timeout
          : 180
    • 배포
      • AWS-Console > CodeDeploy > Get Started Now > Custom Deployment > Skip Walkthrough
        • Create New Application
          • Application Name : gProxyServer-Operation
          • Deployment Group Name : gp-gProxyServer-Operation
          • Search by Tags : EC2 생성할때 입력한 tag 입력 Auto Scaling Group명 입력
            • 해당 Tag 명으로 instance를 찾아서 deploy target을 잡는다.
          • Service Role ARN : IAM에서 CodeDeploy를 위한 Role로 생성하였던 CdoeDeploy-Service Role 선택


      • Deploy New revision 생성
        • Actions > Deploy new revision 클릭
        • Application : CodeDeploy 설정할때 만들었던 Application Name
        • Deployment Group : Application 설정된 Group 리스트가 보인다.
        • Revision Location : S3://생성한 bucket-name/파일위치/파일명(zip, tar, tar.gz)
        • Deployment Config : CodeDeployDefalut.OneAtTime(일반적인 설정 환경에 맞게 선택)
        • Deploy Now 클릭
      • 이슈
        • 생성한 Deploy group으로 새롭게 생성된 S3 빌드 파일을 인식 못하는 버그가 있음
        • Deploy Group 삭제 후 다시 생성할때 변경된 S3 파일 링크 정보를 입력하면 정상 작동
Posted in: AWS, Gitlab, Java, Programing, Ubuntu Tagged: AWS, CodeDeploy

AWS ELB와 Auto Scaling 연동, nginx

2016년 11월 8일 by YongPwi 1 Comment

%ec%8a%ac%eb%9d%bc%ec%9d%b4%eb%93%9c1

    • Webserver(Nginx)
      • IP : 설정 IP
      • Port : 8080
      • AWS ELB를 사용하면 ELB DNS 네임으로 접근 가능하기 때문에 사실 Webserver의 필요성은 높지 않다.
        하지만 도메인 이외의 서비스를 요청하는 회사가 있기 때문에 그리고 ELB는 고정 IP를 사용 불가하다. (2개의 IP를 할당 받으나 동적으로 변경 됨)
      • Nginx의 기능은 javascript api, webservice api 호출시 호출을 AWS ELB로 전달 해준다.
      • Nginx 설정 파일 경로
        • /etc/nginx 하위
          • /etc/nginx/site-enabled/gProxyServer
    • AWS ELB(Elastic Load Balancing)
      • WAS의 부하 분산
      • Nginx, WAS 와 8080 port를 통해서 통신
      • 60초 동안 ping 응답이 없으면 인스턴스 가동 확인 실패로 판단
      • WAS의 상태값에 따른 auto scaling 발동하게 되면 추가 삭제 instance는 자동으로 ELB의 인스턴스로 추가 된다.
      • DNS 주소로 직접 접근 가능
    • AWS Auto Scaling
      • WAS 인스턴스 상태에 따라서 Scaling 조절
      • 1 WAS 80% >= CPU 1분동안 평균 조건을 만족하면 1 WAS를 자동으로 증설
      • 1 WAS CPU 1분동안 평균 >= 20% 조건을 만족하면 1WAS를 자동으로 삭제
      • 추가 증설은 미리 설정해둔 AMI를 이용하여 생성한다.
        • AMI에는 초기 버전의 gProxyServer가 포함되어 있음
        • 기능 개선 및 개발소스 업데이트가 발생하면 Auto Scaling 세팅을 삭제 후 재작성 해야함
          • 이미지 및 초기 설치 script는 수정이 안됨
      • AMI 이용하여 instance 생성시 그룹 codeDeply(배포)를 위해서 IAM role을 CodeDeply-EC2로 설정 해줘야 한다.
      • 설정한 조건에 만족하지 않아서 Instance 즉시 추가, 삭제 가능(Auto Scaling Groups => 하단 메뉴중 Scaling Policies => Actions 메뉴)
Posted in: AWS, Nginx, Programing, Ubuntu Tagged: Auto Scaling, AWS, ELB, nginx, Tomcat, ubuntu

Calendar

5월 2025
일 월 화 수 목 금 토
« 4월    
 123
45678910
11121314151617
18192021222324
25262728293031

Recent Posts

  • ubuntu bastion 설정
  • Spring Boot properties 암호화
  • Git Repository Bitbucket과 Issue Tracker Redmine 연동 설정
  • Spring Security 동일 session 제어
  • Spring @Mock, @Mockbean, @InjectMock

Recent Comments

  • pzotov (Ubuntu 14.04에서 Sonarqube 6.7.1 service 등록)
  • cours de theatre paris (AWS ELB와 Auto Scaling 연동, nginx)
  • bayern munich (IntelliJ EAP Font rendering)
  • camiseta del chelsea (OS X에서 APP 아이콘 변경)
  • cheap football shirts replica (jQuery Ajax에서 json Array 직렬화)

Copyright © [the-year] [site-link].

Powered by [wp-link] and [theme-link].