-
테라폼에서 루프문 사용하기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
-
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..
-
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 /..
-
^M 문자로 인해 shell script 오류발생시 해결법
기본적으로 개발환경 및 서버 머신을 맥과 리눅스를 사용하고 있다. 보통 스크립트 작성을 하거나 프로그래밍을 할 때 맥에서는 VSCode를 사용하고 터미널상에서는 리눅스든 맥이든 vi를 통해 프로그래밍을 하고 있다. 사내에서 관리용 스크립트는 github에 올려놓고 몇 명이 협업과 리뷰를 하고 있는데 어느 날 지금까지 문제없이 사용하던 쉘 스크립트가 갑자기 command not found 로 시작하는 오류를 뱉으면서 실행이 안되는 것이다. 코드상으로는 아무런 문제가 없어서 다시 한 번 실행을 해봐도 같은 증상으로 실행이 안되는 것이었다. 같이 협업하는 사람들이 사용하는 PC는 모두 윈도우즈 기반의 머신이어서 혹시나하고 확인해보니 줄바꿈에 문제가 있었던 것이다. 이런 문제가 생기는 이유는 운영체제별 개행방식..
-
쉘 스크립트에서 특정조건의 파일을 찾아 이동, 복사하기
첫번째 방법 먼저 mv, cp 커맨드의 Source부분을 검색결과로 매칭하는 방법이 있습니다. 특정 디렉토리안의 첫번째 계층에서 이름으로 매칭되는 파일 찾아 이동, 복사하기 mv $(find . -maxdepth 1 -name "*.bak") /복사할경로 cp -p $(find . -maxdepth 1 -name "*.bak") /복사할경로 특정 디렉토리안의 첫번째 계층의 파일 전체를 찾아 이동, 복사하기 mv $(find /test/files -maxdepth 1 -type f) /복사할경로 cp -p $(find /test/files -maxdepth 1 -type f) /복사할경로 두번째 방법 find 명령어의 옵션인 exec을 사용하여 매칭된 파일을 이동하거나 복사하는 방법이 있습니다. 특정 디렉..
-
쉘 스크립트에서 실행결과가 변수에 저장되지 않는 경우 변수 저장 방법
쉘 스크립트에서 일반적인 실행 결과를 변수로 저장하고 싶을 때는 아래와 같이 하면 변수에 결과 값이 저장이 되지만 VAR_TEST=$(date +%Y) echo ${VAR_TEST}웹서버의 종류나 버전 정보를 보기 위해 -v 옵션을 준 커맨드를 실행하면 이 결과 값이 일반적인 방법으로는 저장되지 않는다. VAR_TEST=$(httpd -v | awk '{print $1}') echo ${VAR_TEST}이럴 때 출력 결과를 변수에 저장하고 싶다면 아래와 같은 방법을 사용해 보길 바란다. 아래 내용은 표준에러를 표준출력으로 리다이렉트해서 변수로 저장할 수 있게 한 것이다. VAR_TEST=$(httpd -v 2>&1 | awk '{print $1}') echo ${VAR_TES..
-
[shell] find로 검색한 리스트를 배열에 넣기
find 커맨드로 검색한 디렉토리명을 루핑을 돌아 배열에 넣어보자 쉘 스크립트를 작성할 때 가끔 find로 찾은 결과를 배열에 넣어서 처리해야 할 경우가 있죠. 이때 많은 사람들은 find에서 찾을 결과를 loop를 돌려 배열에 집어넣는 방법을 사용합니다. array=() while IFS= read -r -d $'\0'; do array+=("$REPLY"); done <
-
쉘 스크립트 변수 뒤에서부터 자르기
쉘 스크립트의 변수의 문자열 자르기 할 때 뒤에서 부터 잘라야 할 경우가 있다. 이런 경우 아래와 같이 하면 된다. 뒤에서 특정 길이 만큼 제외하고 출력하기 ${변수명: -뒤에서부터의 포지션} #!/bin/bash VAR_LOCALE="ko_KR" echo ${VAR_LOCALE: -3} _KR ${변수명: -뒤에서 부터의 포지션:자를 글자수} #!/bin/bash VAR_LOCALE="ko_KR" echo ${VAR_LOCALE: -3:2} _K #!/bin/bash VAR_LOCALE="ko_KR" echo ${VAR_LOCLAE: -3:3} _KR 여기서 주의할 것은 포지션을 지정할 때 문자열을 앞에서부터 자를 때와는 달리 변수명 바로 뒤에 오는 포지션의 앞에 스페이스를 주지 않으면 문자열조작이 이..
-
find 명령의 mtime 옵션 정리
이번에는 find의 시간 지정 옵션에 대해 알아봅시다. 우선 시간 지정 관련 옵션 목록을 보도록 합니다.. 옵션 옵션 요약 -mmin 파일의 데이터가 마지막으로 수정 된 시간 (분 지정) -mtime 파일의 데이터가 마지막으로 수정 된 날짜와 시간 (일 지정) -amin 파일의 데이터에 마지막으로 액세스 한 날짜와 시간 (분 지정) -atime 파일의 데이터에 마지막으로 액세스 한 날짜와 시간 (일 지정) -cmin 파일 데이터 및 상태가 마지막으로 수정 된 시간 (분 지정) -ctime 파일 데이터 및 상태가 마지막으로 수정 된 날짜와 시간 (일 지정) 현재 3 일전까지 (현재 시간 ~ 72 시간 전) # find [path] -mtime -3 3 일전 (72 시간 ~ 96 시간 전) # find ./..