# ssh/known_hosts 생성
ansible all -m ping -> yes로
# key생성
ssh-keygen -t rsa
ls -al .ssh/id_rsaid_rsa.pubknown_hosts# key 복사ssh-copy-id dgk@172.1.1.11# 원격 접속후 pub파일 잘 복사됬는지 확인ssh dgk@172.1.1.11ls -al .ssh/ authorized_keys# 확인ansible all -m ping
2021년 12월 24일 금요일
[ Ansible ] ssh-key를 통한 비밀번호 없이 ssh접속
2021년 12월 21일 화요일
[ Ansible ] 설치 및 실행
/etc/sudoers 에 nopasswd 계정 추가
앤서블 설치
$ yum install ansible -y
앤서블에서 사용 가능한 명령어 확인
$ ls /usr/bin/ansible*
노드들 주소 추가
$ vi /etc/ansible/hosts
(추가)
192.1.1.1
192.1.1.2
192.1.1.3
known_hosts_key 값 입력 받음
$ ansible all -m ping
(yes를 노드수만큼 입력)
....
Are you sure you want to continue connecting (yes/no)? yes
정상적으로 노드들에게 명령 전달 확인
$ ansible all -m ping -k
SSH password : (노드 비밀번호 입력)
앤서블 명령어 옵션
-m : 모듈선택
- 쉘모듈 : ansible all -m shell -a "df -h" -k
- yum모듈 : ansible all -m yum -a "name=httpd state=present" -k (삭제 : state=absent)
-k : 비밀번호 입력
- --list-hosts : 적용 노드들 확인 ( ansible all -m ping -k --list-hosts )
앤서블 참조파일
/etc/ansible/ansible.cfg
/etc/ansible/hosts
플레이북
보통앤서블은 플레이북으로 노드들을 관리합니다.
nginx_install.yml 파일 작성
---
- name: Install nginx on linux
hosts: nginx
gather_facts : no
tasks :
- name: install epel-release
yum: name=epel-release state=latest
- name: install nginx web server
yum: name=nginx state=present
- name: start nginx web server
service: name=nginx state=started
플레이북 실행
$ ansible-playbook nginx_install.yml -k
앤서블 기본 개념 참조글 :
https://blog.naver.com/alice_k106/221333208746
https://engineering.linecorp.com/ko/blog/ansible-awx-for-provisioning-1/
앤서블 공식사이트 :
https://docs.ansible.com/ansible_community.html
남들이 짠 앤서블 플레이북 코드 :
https://galaxy.ansible.com/crivetimihai/development
2021년 12월 16일 목요일
[ Elasticsearch ] Opendistro Kibana 유저 확인, 추가, 삭제
kibana역시 다른 BI툴과 같이 해당 유저의 Id/Password, Role을 정의할 수 있다.
path: /usr/share/elasticsearch/plugins/opendistro_security/securityconfig
- 로그인 유저 설정파일 : internal_users.yml
- 역할 설정파일 : roles.yml
- 역할 맵핑 설정파일 : roles_mapping.yml
- tenants관련 설정파일 : tenants.yml
[ user 추가 ]
유저확인
1. curl명령어로 유저 확인
$ curl -GET https://localhost:9200/_opendistro/_security/api/internalusers/ -u 'admin:admin' --insecure
2. 유저 정보가 저장되어있는 설정파일 internal_users.yml 확인
$ sudo vi /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
3. kibana web ui에서 api 실행
유저 추가
internal_users.yml 파일을 열어 해당 텍스트 추가
testuser:
hash: "$2VKsMNflmcL0zF84pdyc0dsdf$sdfsdf$sdfsdf"
reserved: false
hidden: false
backend_roles:
- "admin"
description: "test user"
sudo /usr/share/elasticsearch/plugins/opendistro_security/tools/hash.sh -p mypwd
변경 사항을 securityadmin.sh 스크립트를 통해 kibana의 security plugin에 적용한다.
sudo /usr/share/elasticsearch/plugins/opendistro_security/tools/securityadmin.sh \
-cacert /etc/elasticsearch/root-ca.pem \
-cert /etc/elasticsearch/kirk.pem \
-key /etc/elasticsearch/kirk-key.pem \
-cd /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/
새로 추가된 계정으로 로그인 확인
curl api 참조 :
https://opendistro.github.io/for-elasticsearch-docs/docs/security/access-control/api/
security 관련 설정 yml파일 참조 :
https://opendistro.github.io/for-elasticsearch-docs/docs/security/configuration/yaml/#internal_usersyml
securityadmin.sh 옵션 참조 :
https://opendistro.github.io/for-elasticsearch-docs/docs/security/configuration/security-admin/
2021년 12월 15일 수요일
[ Elasticsearch ] Opendistro 와 Kibana 설치
Elasticsearch의 무료버전인 Opendistro 설치과정
[ opendistro 설치 ]
가이드를 보고 설치한다.
https://opendistro.github.io/for-elasticsearch-docs/docs/install/
single node 설정
elasticsearch.yml 수정
# 네크워크 접근 대역설정
network.host: 0.0.0.0
# 싱글노드 타입
discovery.type: single-node
# 주석으로 막혀져 있어야한다
# cluster.initial_master_nodes: ["node-1", "node-2"]
추가 설정 (optional)
기본 config 파일은 etc/elasticsearch/elasticsearch.yml 파일이다.
bootstrap.memory_lock: true 주석을 풀어준다.
jvm에서 elasticsearch가 사용하는 메모리를 고정한다. 설치된 서버의 시스템에
너무 많은 메모리를 차지하지 않도록 전체 시스템 메모리의 50%가 넘지 않도록 한다.
jvm관련 설정 파일은 /etc/elasticsearch/jvm.options 파일이다.
elasticsearch 사용량에 따라 java heap size 설정을 바꿀 수 있다.
initial size와 maximum size는 같게 설정한다.
Ex] -Xms4g
[ kibana 설치 ]
똑같이 가이드를 따라 설치한다.
https://opendistro.github.io/for-elasticsearch-docs/docs/kibana/
기본 config 파일은 etc/kibana/kibana.yml에 있다.
해당 파일에
server.port: 5601
server.host: "0.0.0.0"
을 추가한다.
http://yourhostip:5601 에 접속 후 kibana.yml에 default로 설정된 계정정보로
로그인을 하면 kibana ui를 사용할 수 있다.
2021년 12월 9일 목요일
[ Shell Script ] Mulit AWS Instance 생성 후 코드 실행
#!/bin/bashif [ $# -ne 2 ]; thenecho "Usage: $0 yyyyMMdd filename"exit -1fiDATE=$1FILE=$2AWS_REGION=s3.ap-northeast-2.amazonaws.comAWS_ACCESS_KEY_ID=AKAKAKAAKAAAAAAWS_SECRET_ACCESS_KEY=080sdfsdf(((D0sdf/3333S3_INPUT_PATH="s3://bucket/input/${DATE}/${FILE}"S3_OUTPUT_PATH="s3://bucket/input/${DATE}/"LOCAL_INPUT_PATH="./data/input"LOCAL_OUTPUT_PATH="./data/output"echo "[INFO] CP INPUT From S3 To Local"aws s3 cp ${S3_INPUT_PATH} "${LOCAL_INPUT_PATH}/"echo "[INFO] Run A process"...A작업 실행코드...echo "[INFO] CP OUTPUT From Local To S3"aws s3 cp "${LOCAL_OUTPUT_PATH}/output_${FILE}.csv" ${S3_OUTPUT_PATH}echo "[INFO] FINISH JOB & SHUTDOWN"shutdown
#!/bin/sh# curl을 사용하여 aws cli 패키지다운로드curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"unzip awscliv2.zip# 설치 진행sudo ./aws/install -i /usr/local/aws-cli -b /usr/local/bin# 버전확인aws --version
#!/bin/sh# 변수값 정의
DATE=$1IMAGE_ID=ami-00000000id
INSTANCE_TYPE=t3.smallSUBNET_ID=subnet-77777aa
SECURITY_GROUP_ID=sg-0ffffffff00000
KEY_NAME=your_aws_keyAWS_ACCESS_KEY_ID=AKAKAKAKAKAKAKAAKAWS_SECRET_ACCESS_KEY=88OOOO888OOOOOSTART_NUMBER="00000"FINISH_NUMBER="00009"/usr/local/bin/aws configure set aws_access_key_id "$AWS_ACCESS_KEY_ID"
/usr/local/bin/aws configure set aws_secret_access_key "$AWS_SECRET_ACCESS_KEY"
/usr/local/bin/aws configure set default.region "ap-northeast-2"
run_instance(){S3_FILE=part-$1
/usr/local/bin/aws ec2 run-instances --image-id ${IMAGE_ID} --count 1 --instance-type ${INSTANCE_TYPE} \
--subnet-id ${SUBNET_ID} --security-group-ids ${SECURITY_GROUP_ID} --instance-initiated-shutdown-behavior terminate \
--key-name ${KEY_NAME} --user-data \
"#!/bin/bashcd /home/centos/exec
sh _run.sh ${DATE} ${S3_FILE}" > /dev/null}echo "[INFO] START JOB : ${DATE}"
for CURR_NUMBER in $(seq -f "%05g" $START_NUMBER $FINISH_NUMBER)dorun_instance ${CURR_NUMBER}donefi
echo "[INFO] FINISH JOB"
exit 0
2021년 12월 1일 수요일
[ AWS ] S3 수명주기 관리
[ 수명 주기 관리 ]
스토리지 수명 주기 관리에는 2가지 작업으로 수행한다.
- 전환작업
- 스토리지 클래스 전환 Ex. S3d STANDARD-IA -> S3 Glacier
- 만료작업
- 설정한 만료 기간에 따라 객체 삭제
해당 작업을 위해선 설정하려는 S3에 대해
날짜와 빈도를 고려해야 최적의 비용을 산출 할 수 있다.
날짜 : 최근 N일은 자주 사용하지만 그 이후는 참조가 거의 없음
빈도 : N일 동안 M번 정도 참고 할 것 같고, N일 이후에는 액세스가 적지만 P번 정도 참조
[ 수명 주기 구성 생성 ]
생성할 수 있는 Tool
- Amazon S3 콘솔
- REST API
- AWS SDK
- AWS CLI
[ 객체 전환 ]
아래의 그림과 같이 내려갈수록
객체 액세스 빈도 ↓, 비용 ↓
또한 하위 객체에서 상위 객체로의 전환은 불가하다.
* 제약사항 *
사이즈
S3 Standard-IA, S3 Intelligent-Tiering, S3 One Zone-IA로 전환 시
128KB보다 작은 객체는 전환을 제공하지 않는다.
최소 유지 기간
객체가 전환되고 난 후 다른 스토리지 클래스로 전환하기 위해선
최소 기간을 유지한 후에 가능하다.
TYPE | 1G당 비용(1개월) | 최소 유지 기간 | 설계 내용 |
---|---|---|---|
S3 Standard | 0.025 | 자주 액세스하는 데이터 | |
S3 Standard - Infrequent Access | 0.018 | 30 | 수명이 길고 자주 액세스하지 않는 데이터 |
S3 One Zone - Infrequent Access | 0.0144 | 30 | 수명이 긴 데이터에 자주 액세스하지 않는 중요하지 않은 데이터 |
S3 Glacier | 0.005 | 90 | 분에서 시간 단위로 검색 시간을 지원하는 장기간 데이터 보관 |
S3 Glacier Deep Archive | 0.002 | 180 | 12시간의 기본 검색 시간으로 거의 액세스하지 않는 데이터 아카이빙 |
S3 Glacier
- S3 Glacier or S3 Glacier Deep Archive에 저장된 객체는 실시간으로 사용X
- 아카이브 상태이므로 임시복사본으로 복원하는 작업 필요
- 복원 후 지정한 기간 동안 사용 가능, 그 후 복사본 삭제 후 아카이브 상태로 유지
[ 객체만료 ]
수명 주기 정책에 따라 만료가 될 경우
S3에서는 제어를 위해 대기열에 넣고 비동기 방식으로 제거합니다.
만료 된 객체에 대해서는 요금이 청구 되지 않습니다.
[ 버킷 수명 주기 설정 ]
버킷의 수명 주기를 설정하는 방법은 4가지가 있다.
- S3 Console
- AWS CLI
- AWS SDK ( Java/.NET/Ruby )
- REST API ( PUT/GET/DELETE )
[ S3 console을 사용하여 간단히 수명 주기를 적용 ]
1. S3버킷 페이지에서 -> 버킷선택 -> 관리 -> 수명 주기 규칙 생성
2. 수명 주기 규칙 구성
규칙 범위 선택 :
버킷 하위 파일 모두 적용하느냐 필터로 범위를 제한하느냐 여부
'하나 이상의 필터를 사용하여 이 규칙의 범위 제한' 선택 시 접두사 사용
Ex. path가 아래와 같다면,
bucket_name/logs/users/yymmdd=20211201/00001.parquet
- logs하위 파일들에게만 적용 접두사 = logs
- 파티셔닝된 yymmdd 하위 파일들에게만 적용, 접두사 = logs/users/yymmdd=
3. 수명 주기 규칙 작업
'스토리지 클래스 간에 객체의 현재 버전 이동'
- Standard(현재)에서 Standard-IA로 스토리지 클래스 변경
'객체의 현재 버전 만료'
- 제시한 요청일 이후 객체삭제
* 이전버전 사용시 버킷생성할 때 아래 설명을 활성화해야한다.
4. 일수 설정
해당 일수를 설정하고 규칙생성 클릭
참조
스토리지 클래스 종류 :
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/storage-class-intro.html
S3 Glacier :
https://docs.aws.amazon.com/ko_kr/amazonglacier/latest/dev/introduction.html
스토리지 수명 주기 관리 :
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html
2021년 11월 29일 월요일
[ AWS ] Organization 시작하기
[ Organization이란? ]
AWS Organizations 기능
- 중앙에서 계정 관리
- 계정 일부나 전체에 정책연결 가능
- 계정 별로의 서비스 사용 요금 식별 가능
- 계정 별로 활동 기록 로그 추적
- 계정 또는 계정을 그룹화 하여 서비스 액세스관리
- 계정 수준으로 권한 관리를 확장( Organizations >> 사용자 iam role )
- 사용자는 organizations와 iam정책 모두 허용하는 것만 액세스
- 다른 AWS 서비스와 통합
- 전역 액세스 ( 리전 구분없음 )
AWS Organizations 요금
- 무료
AWS Organizations에 액세스
- Organization Console
- AWS CLI
- AWS SDK
- AWS HTTPS API