#aws

Create IAM User

Using AWS CLI

다음과 같은 AWS CLI 를 확인하여 Administrators 유저 그룹을 만들고 루트 계정을 생성한다.

1
2
3
4
5
brew install aws # install aws cli
aws iam create-group --group-name Administrators # create iam group
aws iam list-groups # list groups
aws iam attach-group-policy --group-name Administrators --policy-arn arn:aws:iam::aws:policy/AdministratorAccess # AdministratorAccess Policy 적용
aws iam list-attached-group-policies --group-name Admins # 적용된 Policy 확인

Create Lambda function

함수의 확인

1
aws lambda list-functions

Serverless Application Management(SAM)

Lambda Function 을 작성하고 배포하는 일련의 과정을 위해서 SAM 을 사용한다.

1
2
3
brew install aws-sam-cli # install SAM
sam init # initialize sam
sam local start-api # test locally

local test

아래 함수를 실행하면 로컬의 3000번 포트에서 lambda 함수들이 동작된다.

1
sam local start-api

create package

람다함수가 클라우드 환경에서 실행되기 위해서는 S3 버킷에 배포되어야 하고 이를 위해 package 화를 시켜야 한다.

1
2
3
sam package \
--output-template-file packaged.yaml \
--s3-bucket <bucketname>

위 명령어를 실행하면 sam-app/hello_world 디렉토리를 압축하여 .zip 파일을 만들고 amazon s3 에 업로드 한다. 여기서 새롭게 생긴 packaged.yaml 파일은 template.yaml 파일과 동일한 내용을 가지지만 차이가 있다면, packaged.yaml 파일의 경우 codeUri 가 실제 클라우드 uri 를 가진다는 것이다.

Deploy AWS lambda

패키지화를 다 시키고 s3 를 업데이트 했다면 lambda 함수를 배포할 차례이다.

1
2
3
4
5
sam deploy \
--template-file packaged.yaml \
--stack-name samp-app \
--capabilities CAPABILIY_IAM \
--region ap-northeast-2

npm serverless

SAM 이 아니라 serverless 는 npm 패키지로 좀 더 쉽다.

아래와 같이 설치하고

1
npm install -g serverless # install serverless

serverless.yaml

1
2
3
4
5
6
7
8
9
service: my-app

provider:
name: aws
runtime: nodejs8.10

functions:
helloWorld:
handler: handler.js

handler.js

1
2
3
4
module.exports.run = (event, context, callback)=>{
console.log("Debugging...");
callback(null,"hello world");
}

deploy

1
2
sls deploy # deploy project
sls deploy function --function helloWorld # deploy function

invoke

1
sls invoke --function helloWorld --log

What is AWS Lambda

CLI Tool

What is VPC

VPC 란 Virtual Private Cloud 의 약어로 사용자가 모든 AWS 자원에 대한 Access Control 이 가능한 private network 입니다.

즉, 사용자는 VPC 안의 Internet Gateway, Route Table, Subnet 등 다양한 네트워크 리소스를 마음대로 제어할 수 있으며 자신의 네트워크에 접근할 수 있는 사용자들에 대한 권한설정이 가능합니다.

다음 그림은 AWS 의 VPC 를 시각적으로 표현한 도식입니다.

Screen Shot 2019-04-20 at 4.40.45 PM

아마존에는 수많은 region 이 존재하며, 이는 전 세계에 분포되어 있으며, 각 지역별 가용한 zone 을 Availavility Zone 이라고 부릅니다.

사용자는 여러 availability 존에 분산하여 리소스를 운영함으로써 aws 에 지역적인 결함이 생겨도 문제없이 서비스를 운영할 수 있습니다. VPC 는 이러한 여러 Region 을 모두 포괄하는 개념입니다.

VPC를 세팅함에 있어 다음과 같은 순서로 진행합니다.

  1. Choosing IP Address
    VPC 는 네트워크로써 외부에서 접근하기 위한 IP 주소를 가지며, 내부 ip를 사용합니다.
    사용할 내부 IP의 범위를 설정하며 이는 CIDR 표기법으로 작성합니다.
  2. Routing Table 을 설정합니다.
    VPC 내부에서 외부로 자원을 요청할 때, VPC 는 외부 주소를 확인해야 합니다. 이처럼 외부 주소를 라우팅 해주는 Route Table 이 필요하며 Routing Table 은 외부 요청에 대한 Routing 을 담당합니다.
  3. Security Group
    각 VPC 에는 여러 개의 Security 그룹을 가질 수 있으며, VPC 내의 리소스 마다 해당 VPC에 종속되는 Security 그룹을 할당합니다.

Choosing IP Address

사용할 내부 IP 의 범위를 설정합니다.

Screen Shot 2019-04-20 at 4.42.00 PM

Routing Table

아래와 같이 요청을 Route 해줄 Routing Table 을 설정합니다. 네트워크 외부로의 요청에 대한 Routing 을 담당합니다.

Screen Shot 2019-04-20 at 4.44.39 PM

해당 VPC 의 모든 내부 ip 는 local 로 routing 하며 그 외의 모든 주소에 대해서는 Internet Gateway 에 요청을 전달하고 적합한 목적지로 요청을 Routing 해줍니다.

Setup Subnet

요청에 대한 접근 관리는 Security Group 설정으로 관리됩니다.

Screen Shot 2019-04-20 at 4.47.21 PM

위 그림에서 위의 4개의 인스턴스는 웹 서버를 의미하며, 아래의 세개의 인스턴스는 웹 서버에서만 접근이 가능한 private resource 입니다.

각 subnet 은 vac 의 서로 다른 내부 ip range 를 할당하여 가상으로 다른 네트워크로 분리합니다.

이 경우 두개의 resource 를 각각 public subnetprivate subnet 으로 나누어 관리할 수 있으며 각 subnet 마다 다른 security 그룹을 할당하여 접근을 관리할 수 있습니다.

##

Outbound request in VPC

아래와 같이 외부로의 요청을 처리하는 NAT 는 VPC 의 내부 ip range 로의 모든 요청을 VPC 내부로 Route 하고 그 외의 모든 요청을 NAT Gateway 를 통한 외부접근으로 설정한다.

Screen Shot 2019-04-20 at 4.55.35 PM

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×