lamda와 cloudwatch를 이용한 개발계 시스템 주중에만 작동 하도록 하기

목표: 개발계 시스템 주중 업무시간에만 작동하도록 자동화 한다. 아래 대로 진행하면 해당 인스턴스 시작, 정지를 자동화 할 수 있다. 1. lambda 설정 2. cloudwatch rule 설정 3. trigger 등록 1. lambda 설정 *stop server code(node.js) var AWS = require('aws-sdk'); exports.handler = function(event, context) {  var ec2 = new AWS.EC2({region: 'EC2 region'});  ec2.stopInstances({InstanceIds : ['EC2 instance ID'] },function (err, data) {  if (err) console.log(err, err.stack); // an error occurred  else console.log(data); // successful response  context.done(err,data);  }); }; *start server code(node.js) var AWS = require('aws-sdk'); exports.handler = function(event, context) {  var ec2 = new AWS.EC2({region: 'EC2 region'});  ec2.startInstances({InstanceIds : ['EC2 instance ID'] },function (err, data) {  if (err) console.log(err, err.stack); // an error occurred  else console.log(data); // successful response  context.done(err,data);  }); }; *role policy { "Versio...

AWS를 이용한 Serverless 환경 구축 3 - AWS API Gateway를 통해 기존 DynamoDB 접근

이미지
Lambda와 DynamoDB를 연결한 상태에서 외부에서 접근하여 쓰기 및 읽기를 할 수 있도록 AWS API Gateway를 추가 해보자. 이번에 해 볼 것은 API 생성 및 설정이다. API 설정(GET, POST) 1. API Gateway를 생성한다. 2. OK 버튼 클릭 후 "New API" 선택, API name 기입, 생성 한다. 3. Resource 항목의 Actions를 pull-down하여 Create Resource를 선택한다. Get, Post를 위한 각각 Resource를 만든다. 4. 각 Resource 아래 "Create Method" 통해 GET, POST를 생성함.(v 표 클릭해서 완성) 5. GET, POST method를 클릭하여 세부설정을 해 준다. 각각 DynamoDB에 GET, POST 한 Lambda 함수를 지역과 이름을 지정해 준다. 6. GET method를 선택하고 오른쪽에 있는 Method Execution에서 Method Request를 선택한다. "URL Query String Parameters"에 "id"를 추가 해 준다. 7. Method Execution에서 Integration Request를 선택한다. 하단의 "Body Mapping Templates"을 펼 친후 Content-Type에 "application/json"을 추가 한다. 아래 소스를 붙여 넣어 준다. #set($inputRoot = $input.path('$')) { "id": "$input.params('id')" } 8. Method Execution의 첫 화면으로 돌아 가서 "Test'를 클릭한다. 9. Query String "id"에  전 화...

AWS를 이용한 Serverless 환경 구축 2 - Lambda로 DynamoDB 쓰고 읽기

이미지
지난 번에 Lamda로 hello_world만 찍기만 하여 demo의 성격 이었다면 이번은 실제로 DynamoDB에 쓰고 읽기를 해보자. 순서는 아래와 같다. DynamoDB table 생성 후 IAM 권한 추가(Access DynamoDB) Lambda 함수의 쓰기, 읽기를 만들 것이다. DynamoDB table 생성 1. "Create table"을 선택한다.   2. "Table name", "Primary key"에 값을 입력한 후 "Create"를 클릭한다.(예 Table name: Page, Primary key: id) 3. DynamoDB table이 간단하게 생성 되었다. IAM DynamoDB 접근권한 추가 기존 Role에는 DynamoDB 접근권한이 없으므로 권한을 추가해야 한다. 1. 기존에 사용하던 " lambda_basic_execution" Role에 Jason을 추가 해 주면 된다.("Statement"[]안에 추가) { "Sid": "Stmt1428341300017", "Action": [ "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem" ], "Effect": "Allow", "Resource": "*" } Lambda 쓰기 함수 만들기 이번에는 L...

AWS를 이용한 Serverless 환경 구축 1 - Lambda 서비스 하기& S3를 이용한 자동배포

이미지
S3에 코드 파일(.zip)이 업로드 되면 자동으로 AWS Lambda에 배포되는 환경을 만들어 보자. 필요한 AWS 서비스 S3 - 코드 업로드를 위한 bucket Lambda 2개 - code upload 과 실행하기 위한 함수 IAM - S3 Access와 lambda 코드 갱신 Role 설정 S3버켓생성 제일 먼저 S3를 만들어 준다. 1. S3 버켓 만들기 적당한 이름의 S3를 만들어 준다. S3 만드는 화면은 생략하겠다. 진짜로 어렵지 않다. 다만 지금 만드는 서비스를 위해 Lambda와 같은 지역에서 만들어야 작동 한다. 2. 그리고 "hellow_world"를 찍는 .js파일을 만든 후 해당파일 .zip파일로 만들고 그 파일을 S3에 업로드 한다. 예) bucket명: codetest      zip파일명: code.zip ===> s3://codetest/code.zip Lambda 생성 먼저 실행 Lambda를 생성한다. (hellow_world를 찍는 lambda로 하자) 1. lambda 서버를 생성한다. 2. 과감하게 넘어간다. 3. 이름에 Hello_World를 넣고 "Code entry type" 은 S3에서 Upload를 선택한 후 "S3 link URL"은 위에서 만든 S3의 .zip 파일의 URL을 넣으면 된다. 그리고 아래 Handler에는  .zip 파일 안의 실행할 .js 파일의 이름을 넣는다.(예 code.js이면 code.handler) 상단 그림에서 Role 부분에  pull down 메뉴 중 Basic execution role을 선택하면 아래 하면으로 새탭이 열린다. 과감하게 Allow를 누르면 된다. 그리고 상단 그림의 "Next"버튼을 누르면 된다. 이제 upload lambda를 구현해 보자. 1. lambda 서버를 생성한다. 첫번째와 동일하다. 2....

AWS Certificate Manager(ACM) ELB와 CloudFront에 적용하기

이미지
ACM ELB 적용 1. 필요한 ELB로 이동하여 하단의 "Listeners" 탭을 누르고 맨 아래 "Edit"를 누른다. 기존 것을 변경 하던지 상단의 "Add"버튼으로 포트를 추가 한 후 Https를 선택하면 된다.(VPC의 private에 위치한 instance라면 instance 포트는 80으로 해도 무방하다.) 그리고 SSL Certificate 항목의 "Change"를 누른다.  2. ACM을 선택 한 후 아래 인증받은 도메인을 선택 후 "Save" 하면 탑재 완료다. 3. 선택한 ACM을 "Save" 하면 최종 마무리이다. ACM CloudFront 적용(ACM은 반드시 US East (N. Virginia) 지역에서 생성해야 한다. http://docs.aws.amazon.com/acm/latest/userguide/acm-services.html ) 1. 운영 중인 CloudFront에 접근하여 Edit를 위해 Distribution Setting 부분으로 이동한다. Custom SSL Certificate의  Pull-down메뉴에서 생성한 ACM을 선택 후 하단의 "Edit"버튼을 클릭하면 된다. 배포 시간은 15분 정도 예상된다.

AWS Ceritificate Manger 이용방법

이미지
간편하게 SSL 서비스를 이용할 수 있는 방법으로 AWS Ceritficate Managemer(이하 ACM) 서비스가 출시 되었다. Virginia 지역에서만 가능하던 것이 이제 전 지역에서 사용가능하다. 기존 SSL 을 이용하는 것과 비교하여 매우 쉬워졌다. https://aws.amazon.com/ko/blogs/aws/new-aws-certificate-manager-deploy-ssltls-based-apps-on-aws/ ACM은 기존 SSL인증 업체에 해당 키 값을 받아 Amazon 서비스에 등록하고 매년 갱신 하는 불편함을 제거 해 주는 서비스이다. 기존 SSL 인증업체 같은 경우 보안사고가 발생하였을때, 보험금을 통해 해당 사고를 보상 해주지만 ACM은 무료이니 보상이라는 개념은 없어 보인다. 적용하고 보니 최상위 인증기관Certificate Authorities(CA)은 Starfiled Service이다. https://en.wikipedia.org/wiki/Starfield_Technologies 소유주가 GoDaddy이다. CA업체에 관한 정보는 이러하다. https://en.wikipedia.org/wiki/Certificate_authority 결론적으로 판단은 본인이 하겠지만 믿고 써도 된다고 본다. 본격적으로추가하는 방법은 매우 간단하다. 1. ACM 페이지를 방문하여 시작한다.(Get started) - ELB에 추가하려면 해당 지역에서 추가 해야 하는 것으로 알고 있다. 2. Domain입력 지점에 필요한 domain명을 입력하고(www.example.com) Review and request를 누르면 거의 완료다. 여러개 추가 하려고 하면 "Add another name to this certificate" 나 *(wildcard)를 이용한다. 3. confirm하면 생성은 끝났다.. 4. validation을 위해 e-mail 인증을 한다. 해당 e-mail을 찾아...

Gitlab CI에 grunt를 통한 테스트 환경 구현(Nodejs)

Runner를 통해 진행 해야 하므로 .gitlab-ci.yml을 작성한다. 작성 예시는 아래와 같다.(Docker 환경) 1. NodeJS를 설치한다. ( https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions ) 참고 2. Grunt 설치 npm install -g grunt-cli http://gruntjs.com/getting-started  참고 3. 추가 패키지들을 설치 해 준다. 4. grunt 실행 gurnt test .gitlab-ci.yml 내용 before_script : - curl -sL https://deb.nodesource.com/setup_4.x | bash - - apt-get install -y nodejs - npm install -g grunt-cli - npm install job : script : " grunt test"