안녕하세요 쿤드입니다. 🍀

S3 버킷에서 어떤 object가 생성되면 그에 대한 이벤트를 SQS로 받아서 처리할 필요가 생겼습니다.

설정대로 맞춰놓고 생성을 했는데 

  • [버킷] - [Properties] - Advenced settings [Events] 

에러가 발생합니다.

S3 이벤트 세팅

에러메시지

Unable to validate the following destination configurations. Permissions on the destination queue do not allow S3 to publish notifications from this bucket. (arn:aws:sqs:REGION:AWS계정ID:세팅하려던_SQS_QUEUE_NAME)

 

최초 생성은 IAM role로 접근에 제한을 둔 account로 생성하다가 실패해서 단순히 account에 권한이 없어서 안되는줄 알았습니다.

그래서 ADMIN 권한 (* 접근)을 가진 account로 다시 생성을 했는데 

마찬가지로 에러가 발생합니다.

 

이제서야 AWS 문서를 찾아서 읽어봤습니다.

https://docs.aws.amazon.com/AmazonS3/latest/dev/ways-to-add-notification-config-to-bucket.html 

 

Walkthrough: Configure a bucket for notifications (SNS topic and SQS queue) - Amazon Simple Storage Service

Walkthrough: Configure a bucket for notifications (SNS topic and SQS queue) Walkthrough summary In this example, you add a notification configuration on a bucket requesting Amazon S3 to do the following: Publish events of the s3:ObjectCreated:* type to an

docs.aws.amazon.com

읽어보니

SNS를 추가하면 SNS topic에 권한을 설정해주고

SQS를 추가하는 거라면 마찬가지로 SQS Queue에 권한을 추가하라는 말이었습니다.

 

남은 작업은

이제 정확하게 권한을 추가해주면 되는데 

{
 "Version": "2012-10-17",
 "Id": "example-ID",
 "Statement": [
  {
   "Sid": "example-statement-ID",
   "Effect": "Allow",
   "Principal": {
    "AWS":"*"  
   },
   "Action": [
    "SQS:SendMessage"
   ],
   "Resource": "SQS-queue-ARN",
   "Condition": {
      "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" },
      "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" }
   }
  }
 ]
}

이게 뭐지? (라고 처음엔 느껴졌지만 작업을 마무리하고 다시 읽어보니 이해가 갑니다.)

 

일단 stackoverflow에서 비슷한 문제를 찾았습니다.

 stackoverflow.com/q/54791704/8163714

 

Unable to configure SQS queue notification in S3

I created an SQS queue and added policy under permission tab allowing only my account users to configure the configure the notification Policy Document { "Version": "2012-10-17", "Id": "arn:...

stackoverflow.com

들여쓰기의 차이일 뿐인데 이것을 보니 이해가 갑니다.

https://gist.github.com/marcelog/7b0224b63c90802996ab2dee7d7082e4

 

SQS Policy to allow an S3 bucket to publish messages

SQS Policy to allow an S3 bucket to publish messages - aws-sqs.policy

gist.github.com

이 설정은 SQS에서 QUEUE를 선택하고 

아래 화면에서 볼 수 있었습니다.

여기에 위의 gist에 있는 내용에서 나와 관련된 내용을 추가하고

S3에서 접근할테니 관련 bucket 정보를 추가하면 됩니다.

 

Bucket이 1개만 추가되지 않을 수도 있는데 2개 이상 추가도 됩니다. 

2개의 bucket을 [   ] 배열로 묶으면 더 보기 좋을텐데 방법을 못 찾았습니다.

Principals는 Everybody(*)로 두었는데, 

account로 제한을 더 두는게 나을 것 같은데 방법을 못 찾겠다. 제한을 좀 더 두고 싶은데..

  • arn:aws:iam::계정의ID:root 로만 되는것 같고 *을 줄 수가 없다. 내가 못 찾은걸지도 모르겠지만... 

 

S3에서 event 생성 잘 됩니다.

 

안녕하세요 쿤드입니다. 🍀

CloudWatch 요금 폭탄이 나와서 추적하는데 CloudWatch/CloudTrail의 차이를 안다고 생각했는데
말로 설명하려니 말문이 막혀서 찾게 되었습니다.

 

원작자 허락하에 포스팅

원문: https://medium.com/awesome-cloud/aws-difference-between-cloudwatch-and-cloudtrail-16a486f8bc95

 

CloudWatch vs CloudTrail in AWS

CloudWatch

AWS CloudWatch
CloudWatch는 AWS 서비스 및 자원 활동에 초점을 맞추고, 그 상태와 성능에 대해 보고(report)
CloudTrail은 AWS 환경에서 수행 된 모든 작업의 로그

CloudWatch:

AWS CloudWatch는 AWS 클라우드 리소스와 AWS에서 실행되는 애플리케이션의 모니터링 서비스입니다. 

Amazon CloudWatch를 사용하여 메트릭 수집 및 추적 로그 파일의 수집 및 모니터링, 알람 설정, AWS 리소스 사용량 변화에 자동으로 대응 할 수 있습니다.

CloudTrail:

AWS CloudTrail은 AWS 계정 거버넌스, 컴플라이언스, 운영 감사, 리스크 감사를 가능하게하는 서비스입니다. 

CloudTrail을 사용하면 AWS 인프라 작업 관련 계정 활동을 기록하고 지속적으로 모니터링 및 유지할 수 있습니다. 

CloudTrail은 AWS 관리 콘솔, AWS SDK command line 도구, 기타 AWS 서비스로 실행 된 것을 포함한 AWS 계정 활동 이벤트 기록을 제공합니다. 이 이벤트 기록으로 보안 분석, 자원 변경 추적, 문제 해결이 간소화됩니다.

 

Comparison between CloudWatch and CloudTrail

CloudTrail

 

CloudWatch : "AWS에서 무슨 일이 일어나고 있나?"특정 서비스 또는 응용 프로그램의 모든 이벤트를 기록합니다.

What is happening on AWS?
CloudTrail : "AWS에서 누가 무엇을합니까?"서비스 또는 리소스에 대한 API 호출.

Who did what on AWS?

 

 

CloudWatch는 AWS 리소스와 애플리케이션의 모니터링 서비스입니다. 

CloudTrail은 AWS 계정의 API 활동을 기록하는 웹 서비스입니다. 모두 AWS의 편리한 모니터링 도구입니다.

 

CloudWatch는 기본적으로 EC2 인스턴스, EBS 볼륨, RDS DB 인스턴스와 같은 자원의 무료 기본 모니터링을 제공합니다. 

AWS 계정을 만들면 CloudTrail도 기본적으로 활성화됩니다.
CloudWatch를 사용하면 메트릭 수집 및 추적 로그 파일을 수집하고 모니터링 및 알람 설정을 할 수 있습니다. 

 

한편, CloudTrail는 요청을 한 사용자, 사용 된 서비스 실행 된 액션, 매개 변수 및 AWS 서비스에서 반환 된 응답 요소에 대한 정보를 기록합니다. 

CloudTrail 로그는 지정된 S3 버킷 또는 CloudWatch Logs 로그 그룹에 저장됩니다.

일반적으로 CloudTrail은 API 호출에서 15 분 이내에 이벤트를 전달합니다. 

 

CloudWatch는 기본적인 모니터링은 5 분 간격으로, 자세한 모니터링은 1 분 간격으로 메트릭 데이터를 제공합니다. 

CloudWatch Logs 에이전트는 기본적으로 5 초마다 로그 데이터를 전송합니다.
AWS 리소스의 상세한 모니터링을 사용하여 추가 비용으로 더 자주 메트릭 데이터를 CloudWatch에 전송할 수 있습니다.

CloudTrail은 규정 준수 및 규제 기준의 확보에 도움이됩니다.

CloudWatch Logs는 응용 프로그램 로그에 대한 보고서를 제공하고 

CloudTrail Logs는 AWS 계정에서 발생한 것에 대한 특정 정보를 제공합니다.

 

CloudWatch 이벤트는 AWS 리소스에 대한 변경을 기술 시스템 이벤트의 실시간 스트림입니다. 

CloudTrail은 AWS 계정의 AWS API 호출에 중점을두고 있습니다.
CloudTrail은 AWS 리전마다 관리 이벤트 로그의 무료 복사본을 하나 전달합니다. 관리 이벤트는 사용자가 계정에 로그인 할 때 등 AWS 계정의 리소스로 실행 된 관리 작업이 포함됩니다. 로깅 데이터 이벤트는 부과됩니다. 데이터 이벤트는 S3 객체 수준의 API 활동과 Lambda 함수 실행 활동 등 자원 자체에서 또는 리소스에서 실행되는 리소스 작업이 포함됩니다.

 

사용자의 실수를 방지하기 위해서 설정할 수 있다.

 

Termination Protection이 설정 된경우 아래와 같은 경고 화면이 나오고

Yes, Terminate 버튼이 비활성화 되어있다.

ec2 terminate which protected termination instance

설정은 간단하다

setup menu

 

Yes, Enable 버튼을 클릭한다.

세팅 끝이고

이 인스턴스를 terminated 시키기 위해서는

같은 메뉴에서 Yes, Disable을 클릭하면 된다.

Grafana와 Zabbix를 연동해서

사설 클라우드의 서버를 모니터링하는데 쓰고 있었는데

AWS에서 사용중인 Elasticache, SQS, RDS도 함께 사용하고 있으니

이를 통합해서 보고 싶은 욕구가 생겼다.


역시나 이미 누군가 구현해놨다..😨

심지어 grafana를 설치할때 같이 설치 되어있어서 추가 설치도 필요가 없다.
그럼 그걸 연동하기 위한 세팅 방법에 대해서 여기에 기록해둬야겠다.


문서에 간단하게 나와있다.
http://docs.grafana.org/features/datasources/cloudwatch/#metric-query-editor




Data Sources를 클릭



+Add data srouce 클릭



Type에서 Cloudwatch 선택



AWS의 IAM 인증받고 발급했던 개인 액세스, 시큐릿 키가 있을텐데

(이건 awscli 사용하거나 python boto3를 쓰건 어쨌건 일반적으로 가지고 있으니 패스)


아래처럼 직접 키값을 넣어도 되고


물론 키값을 넣고 나면 일단은 아래처럼 안 보이게 해준다.

센스있는 grafana..



여튼 아래와 같이 설정해주고 Save & Test로 저장한다.




참고로 Default를 체크하고 안하고는 다음에 직접 사용할때와 연관있다.

그럼 이제 진짜 추가해보자.


그래프를 선택하고




Edit 화면에서 Metrics에 가서 저기 default 부분을 눌러준다.

일단 현재 사용하는 곳은 zabbix가 기본이라서 위의 설정에서 Default에 'v' 체크가 없는데

CloudWatch를 주로 사용하면 default로 체크하면 될듯 하다.




대략 아래처럼 해주면 그래프에 모아서 볼 수 있다. (일부 정보는 모자이크 처리)

물론 아래의 그래프는 CloudWatch에 가면 똑같이 볼 수 있다.

참고로 Dimensions를 세팅해줘야 원하는 아이템에 대해서 볼 수 있다.



나머지는 그래프 보기 설정만 만져주면 끝.

생각보다 매우 간단하다.

아,, ssh 키를 뭔가 건드린거 같다. 

접속이 아예 안되서 뭐 어떻게 할 방법이 없다. 😭


디스크를 볼륨을 떼서 다른 EC2 인스턴스에 붙여서 처리하는 수밖에 없지.

근데 뒤져보니 User Data기능이 있다.

부팅할 때 내가 원하는 명령을 실행시켜준다.




헛!

그렇다면 이걸로 하면 구지 디스크 볼륨 떼었다 붙였다 안해도 되겠군!

User Data에만 내가 원하는 명령어를 세팅하고

EC2 인스턴스를 껐다 켜기만 하면 해결 되겠군


시작 시 Linux 인스턴스에서 명령 실행

https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/user-data.html

이거 적으면서 보니 저거 제목 번역이 잘 못 번역되어있다...

(원문: Running Commands on Your Linux Instance at Launch)

아놔 내 삽질한 아까운 시간들...



아무리 해도 안된다.

#cloud-init으로 하거나 #!/bin/bash

안된다. 😭

 

씩씩 거리면 찾아봤다.

https://stackoverflow.com/questions/27086639/user-data-scripts-is-not-running-on-my-custom-ami-but-working-in-standard-amazo

 

.. 저방식은

말그대로 인스턴스 생성하고 정말 처음 기동할 쓰는거다.

 

행히 훜으로 건드리는 방법이 있다.

아래와 같이 하니까 잘된다.


#cloud-boothook 을 가장 위에 적어주니까 된다.


최초 부팅

 

#!/bin/bash

yum install -y gcc

 

 

이후 재부팅

#cloud-boothook

#!/bin/bash

yum install -y patch;

yum install -y zlib;

yum install -y zlib-devel;

yum -y install openssl-devel;

wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.6p1.tar.gz -P /home/ec2-user;

 

이후 재부팅

#cloud-boothook

#!/bin/bash

gunzip /home/ec2-user/openssh-7.6p1.tar.gz

 


아놔.. 어이없는 문제가 하나 더있다.


tar 명령어가 안 먹힌다.

옵션이 문제인가 싶지만 다 안된다. 😭😭


 

#cloud-boothook

#!/bin/bash

/usr/bin/tar -xf /home/ec2-user/openssh-7.6p1.tar

/usr/bin/tar xf /home/ec2-user/openssh-7.6p1.tar

/usr/bin/tar xopf /home/ec2-user/openssh-7.6p1.tar

 

 


어처구니 없게도 tar 명령 실행하기 전에

change directory 해주면 먹힌다.


#cloud-boothook
#!/bin/bash
cd /home/ec2-user
/bin/tar xf /home/ec2-user/nginx-1.12.2.tar

 




로그 백업하고 있는 디스크 사용량이 80%를 넘어서서

디스크 볼륨 사이즈를 증가하게 되었습니다.

물론 장기 백업은 S3 버켓에 하고 있습니다.


실제와는 달리 테스트 vm이라서 볼륨사이즈가 작긴 하지만

후에 참고하기위해 기록해둡니다.



10G -> 15G로 증가시키기

 

[ec2-user@ip-xxx ~]$ df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/xvda2       10G  2.8G  7.3G  28% /

devtmpfs        474M     0  474M   0% /dev

tmpfs           496M     0  496M   0% /dev/shm

tmpfs           496M   13M  483M   3% /run

tmpfs           496M     0  496M   0% /sys/fs/cgroup

tmpfs           100M     0  100M   0% /run/user/1000

 

 

[ec2-user@ip-xxx ~]$ lsblk

NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

xvda    202:0    0  10G  0 disk

├─xvda1 202:1    0   1M  0 part

└─xvda2 202:2    0  10G  0 part /

 

아래와 같이 적절하게 사이즈 증가

 

 


 


 

디스크 블락 상태 확인 xvda2

[ec2-user@ip-xxx ~]$ lsblk

NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

xvda    202:0    0  15G  0 disk

├─xvda1 202:1    0   1M  0 part

└─xvda2 202:2    0  10G  0 part /

 

 

명령어 growpart 로 증가 시킴

[root@ip-xxx ec2-user]# growpart /dev/xvda 2

CHANGED: disk=/dev/xvda partition=2: start=4096 old: size=20967390,end=20971486 new: size=31453150,end=31457246

 

15G로 증가된것을 확인

[root@ip-xxx ec2-user]# lsblk

NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

xvda    202:0    0  15G  0 disk

├─xvda1 202:1    0   1M  0 part

└─xvda2 202:2    0  15G  0 part /

 

명령어 resize2fs로 파티션에 반영 시도 했으나 실패

==> ext2, ext3, ext4 일때 사용가능한 명령

[root@ip-xxx ec2-user]# resize2fs /dev/xvda2

resize2fs 1.42.9 (28-Dec-2013)

resize2fs: Bad magic number in super-block while trying to open /dev/xvda2

Couldn't find valid filesystem superblock.

 

 

xvda2의 파티션 확인 해보니 xfs

[root@ip-xxx ec2-user]# blkid /dev/xvda2

/dev/xvda2: UUID="50axxxxb-3xx0-44d0-ad12-28f205xxxx27" TYPE="xfs" PARTUUID="cc8f8c5a-xxxx-xxxx-aa62-ed173xxxxede"

 

 

xfs는 xfs_growfs 명령을 사용해야함

[root@ip-xxx ec2-user]# xfs_growfs /dev/xvda2

meta-data=/dev/xvda2             isize=512    agcount=7, agsize=393216 blks

         =                       sectsz=512   attr=2, projid32bit=1

         =                       crc=1        finobt=0 spinodes=0

data     =                       bsize=4096   blocks=2620923, imaxpct=25

         =                       sunit=0      swidth=0 blks

naming   =version 2              bsize=4096   ascii-ci=0 ftype=1

log      =internal               bsize=4096   blocks=2560, version=2

         =                       sectsz=512   sunit=0 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0

data blocks changed from 2620923 to 3931643

 

 

수행 후 명령어로 확인후 반영 완료

[root@ip-xxx ec2-user]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/xvda2       15G  2.8G   13G  19% /

devtmpfs        474M     0  474M   0% /dev

tmpfs           496M     0  496M   0% /dev/shm

tmpfs           496M   13M  483M   3% /run

tmpfs           496M     0  496M   0% /sys/fs/cgroup

tmpfs           100M     0  100M   0% /run/user/1000

 

 


+ Recent posts