-
테라폼에서 루프문 사용하기4
목차1. 테라폼에서 루프문 사용하기12. 테라폼에서 루프문 사용하기23. 테라폼에서 루프문 사용하기34. 테라폼에서 루프문 사용하기4for_each를 사용하는 장점1. 동적 리소스 관리for_each문은 컬렉션(map 또는 set)을 기반으로 리소스를 동적으로 생성, 관리 및 destroy를 가능하게 합니다. 이 동적 접근 방식을 통해 인프라는 Terraform 코드의 구성을 수동으로 업데이트하지 않고도 terraform.tfvars에 정의된 입력변수 데이터의 변경만으로도 자동으로 구성을 변경할 수 있습니다.예를 들어, 아래 예와 같이 프로젝트 이름 목록을 기반으로 동적 개수의 S3 버킷을 프로비저닝하기 위한 인프라 프로비저닝을 위한 IaC를 작성할 수 있습니다.variable.tf# variable.t..
2024.08.23 18:51 -
테라폼에서 루프문 사용하기3
목차1. 테라폼에서 루프문 사용하기12. 테라폼에서 루프문 사용하기23. 테라폼에서 루프문 사용하기34. 테라폼에서 루프문 사용하기4for_each의 실제 사용 사례1. 리소스 체이닝리소스 체이닝은 한 리소스의 구성이 다른 리소스의 출력에 따라 달라지는 리소스 간 종속성을 만드는 것을 포함합니다. 이는 특정 리소스를 순차적으로 프로비저닝해야 하는 인프라 설정에서 일반적입니다.리소스 체이닝을 더 잘 이해하기 위해 VPC를 설정하고 VPC 내에 서브넷을 배포하는 일반적인 시나리오를 살펴보겠습니다.variable.tf# variable.tfvariable "networks" { description = "Map of networks configurations" type = map(string({ ci..
2024.08.23 18:48 -
테라폼에서 루프문 사용하기2
목차1. 테라폼에서 루프문 사용하기12. 테라폼에서 루프문 사용하기23. 테라폼에서 루프문 사용하기34. 테라폼에서 루프문 사용하기4for_each는 어떻게 작동하나요?더 잘 이해하기 위해 for_each문의 실제 사용 사례를 살펴보겠습니다.EC2 인스턴스의 식별자인 각 키의 문자열 값과 인스턴스 유형 및 AMI ID를 포함하는 또 다른 맵인 인스턴스 구성 맵이 있다고 가정해 보겠습니다.variable.tf# variable.tfvariable "instances" { description = "Map of instance configurations" type = map(object({ ami = string instance_type = string })) defaul..
2024.08.23 18:43 -
테라폼에서 루프문 사용하기1
목차1. 테라폼에서 루프문 사용하기12. 테라폼에서 루프문 사용하기23. 테라폼에서 루프문 사용하기34. 테라폼에서 루프문 사용하기4Terraform에서 Looping이 필요한 이유는 무엇인가요?Terraform CLI를 사용하여 인프라스트럭처 코드(IaC)를 관리할 때 , 비슷하지만 동일하지 않은 여러 리소스를 별도로 생성해야 하는 상황이 자주 발생합니다.여기에는 여러 가용성 영역에 걸쳐 여러 인스턴스를 배포하거나, 여러 DNS 레코드를 설정하거나, 수많은 사용자 계정을 관리하는 것까지 다양할 수 있습니다.각 리소스에 대한 구성을 수동으로 작성하는 것은 지루해지고 오류와 불일치의 가능성이 높아집니다.여기서 Terraform의 루핑이 작용합니다. 루핑 구조는 다음과 같습니다. for문, for_each문..
2024.08.23 18:40 -
ec2인스턴스 기동/정지 스케쥴링
1. 정책(policy)생성람다가 ec2의 start/stop의 실행 가능한 권한을 정책(policy)에 부여lambda_start_stop_ec2_policy{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:Start*", "ec2:Stop*" ], "Resource": "*" } ]}2. Role 생성Lambda_EC2_StartStopRole란 이름의 Role를 생성해주고생성한 lambda_start_stop_ec2_policy 정책을..
2023.07.11 11:46
-
find 명령의 mtime 옵션 정리
이번에는 find의 시간 지정 옵션에 대해 알아봅시다. 우선 시간 지정 관련 옵션 목록을 보도록 합니다.. 옵션 옵션 요약 -mmin 파일의 데이터가 마지막으로 수정 된 시간 (분 지정) -mtime 파일의 데이터가 마지막으로 수정 된 날짜와 시간 (일 지정) -amin 파일의 데이터에 마지막으로 액세스 한 날짜와 시간 (분 지정) -atime 파일의 데이터에 마지막으로 액세스 한 날짜와 시간 (일 지정) -cmin 파일 데이터 및 상태가 마지막으로 수정 된 시간 (분 지정) -ctime 파일 데이터 및 상태가 마지막으로 수정 된 날짜와 시간 (일 지정) 현재 3 일전까지 (현재 시간 ~ 72 시간 전) # find [path] -mtime -3 3 일전 (72 시간 ~ 96 시간 전) # find ./..
-
Apache2.4에서 "client denied by server configuration"이라는 오류 발생시
오늘 외주로 관리하고 있는 서버에 문제가 있어 접속해서 확인을 해보니 아파치의 설정이 엉망진창이었다. 아파치 서버가 2.4인데 버추얼 호스트 설정에는 2.2의 파라미터가 설정되어 있고 있지도 않은 버추얼호스트를 정의해 놓고 지금까지 운영을 해왔던 것이다. Apache 오류 로그를 확인해보았더니 client denied by server configuration 라는 오류 메시지가 발생하고 있었다. Apache의 설정 파일을 검토하면, DocumentRoot /aaaaa/bbbbb/cccc/html ServerName sample.com ServerAlias www.sample.com CustomLog /xxx/xxxx/xxxxx/xxxxxxx-access_log combined ErrorLog /xx..
-
^M 문자로 인해 shell script 오류발생시 해결법
기본적으로 개발환경 및 서버 머신을 맥과 리눅스를 사용하고 있다. 보통 스크립트 작성을 하거나 프로그래밍을 할 때 맥에서는 VSCode를 사용하고 터미널상에서는 리눅스든 맥이든 vi를 통해 프로그래밍을 하고 있다. 사내에서 관리용 스크립트는 github에 올려놓고 몇 명이 협업과 리뷰를 하고 있는데 어느 날 지금까지 문제없이 사용하던 쉘 스크립트가 갑자기 command not found 로 시작하는 오류를 뱉으면서 실행이 안되는 것이다. 코드상으로는 아무런 문제가 없어서 다시 한 번 실행을 해봐도 같은 증상으로 실행이 안되는 것이었다. 같이 협업하는 사람들이 사용하는 PC는 모두 윈도우즈 기반의 머신이어서 혹시나하고 확인해보니 줄바꿈에 문제가 있었던 것이다. 이런 문제가 생기는 이유는 운영체제별 개행방식..
-
ssh 접속시 간편하게 사용하기
터미널에서 ssh 접속을 하려면 아래와 같이 뭔가 길게 내용을 써주어야 한다. ssh -p 50000 user@111.111.111.111 접속할 때마다 이렇게 길게 써주는 것은 무척 귀찮은 일이 아닐 수 없다. 여기에 포트가 기본 포트가 아니라면 옵션이 더 늘어나게 된다. 그래서 좀 더 간단한 방법으로 접속하는 방법에 대해 알아보도록 하자. 1. 키를 이용해 패스워드 없이 접속하기 ssh에서 간편하게 접속하는 방법 첫번째는 키를 이용해서 패스워드 없이 접속하는 것이다. 먼저 해당서버에 콘솔이나 ssh로 접속을 한 후 키를 생성해주어야 한다. 키를 생성하는 방법은 아래와 같다. ssh-keygen -b 4096 -t rsa -C "ssh user test key" -f ~/.ssh/id_rsa_ssh_u..
-
[shell] find로 검색한 리스트를 배열에 넣기
find 커맨드로 검색한 디렉토리명을 루핑을 돌아 배열에 넣어보자 쉘 스크립트를 작성할 때 가끔 find로 찾은 결과를 배열에 넣어서 처리해야 할 경우가 있죠. 이때 많은 사람들은 find에서 찾을 결과를 loop를 돌려 배열에 집어넣는 방법을 사용합니다. array=() while IFS= read -r -d $'\0'; do array+=("$REPLY"); done <
-
gzip을 멀티코어를 사용해 압축해보자
파일이나 디렉토리의 gzip 압축을 수행할 때 1 코어 밖에 사용하지 않기 때문에 압축시간이 오래 걸린다. 8 코어 CPU를 활용하여 병렬에서 gzip 압축을 하고 싶다. 이런 상황에서 쓸 수 있는 좋은 방법을 소개합니다. pigz yum으로도 설치 가능한 "pigz"는 멀티 코어를 충분히 이용하여 파일 압축 성능을 올려줄 수 있습니다. 사용법 평소 사용하는 tar 명령에 --use-compress-prog옵션을 함께 사용하여 pigz을 지정합니다. # tar cf sample.tar.gz --use-compress-prog=pigz sample 데이터 디렉토리 (/var/lib/mysql)을 압축한다면 다음과 같은 형식의 커맨드로 실행하시면 됩니다. # cd /var/lib # sudo tar cf /..
-
쉘 스크립트에서 문자열이 매칭되었을 때 분기하기
쉘 스크립트에서 if문에서 찾고자 하는 문자가 포함되어 있는지를 확인하기 위한 두가지 방법에 대해 이야기 해보려 합니다. 먼저 스크립트를 보시죠 #!/bin/sh VAR_STR1="This is test string" VAR_STR2="test" if [[ "${VAR_STR1}" == *"test"* ]];then echo "1st find it" fi if [[ "${VAR_STR1}" =~ "test" ]];then echo "2nd find it" fi첫번째는 아스테리스크(*)를 사용하여 "test" 라는 문자열에 포함된 것을 찾아 분기한 것이고 두번째는 쉘 스크립트의 if문의 기능을 이용한 것입니다. 참고로 "=~"는 bash 버전3 이상일 때 지원합니다. 개인적으로는 두번째 패턴을 좋아합니다만..
-
쉘 스크립트에서 계산하기 [expr]
expr 기본적으로 expr은 커맨드로 별도로 존재하고 있습니다. /usr/bin/expr 하지만, bash 쉘은 expr를 built-in으로 내장시켜 쉘스크립트에서 expr 명령어를 사용하면, /usr/bin/expr를 사용하지 않고 내장된 build-in 명령어를 실행합니다. 실행속도도 build-in 명령이 외부 명령보다 빠릅니다. expr로 연산할 수 있는 내용은 아래 4가지 입니다. 산술 + : 더하기 - : 빼기 * : 곱하기('\*'로 사용) / : 나누기를 한 후의 몫의 값 % : 나누기를 한 후의 나머지 값 논리 | : 어느 한쪽이 조건에 만족하면 참(or) & : 양쪽 조건이 모두 만족하면 참(and) 관계 = : 같음 > : 왼쪽이 오른쪽보다 큼 >= : 왼쪽이 오른쪽보다 크거나 같..