cli에는 --dry-run
이라는 옵션이 있다. 명령에 옵션으로 넣으면 되고, EC2 인스턴스에서 해당 명령을 할 권한이 있는지 확인하는 것이다. 이렇게 하면 실제로 실행되지 않으므로 비용적인 문제나 실제 구동이 되는 것을 방지할 수 있다.
명령을 내렸을 때, 에러가 나오면 에러메세지가 나오는데, 이 에러 메세지를 STS 커맨드로 디코딩할 수 있다. 해당 IAM에 sts 권한을 줘야한다. 밑에 예시코드를 적어 두었다.
aws sts decode-authorization-message --encoded-message {value}
앞에서 user-data를 배웠다. user-data는 해당 인스턴스가 시작될 때, 딱 한 번만 실행되는 스크립트라고 말했고, 지금 이 meta-data는 조금 다른 개념이다. 인스턴스 정보를 뜻하며, 인스턴스의 거의 모든 정보를 불러올 수 있고, 특정한 ip를 통해서 가져온다. 가져오는 방법은 아래의 주소에 명령내릴 키워드를 추가하여 데이터를 불러올 수 있다.
169.254.169.254/latest/meta-data/{keyword}
STS GetSessionToken API 를 써서 MFA를 인증해야한다. 밑과 같이 명령을 내려 세션토큰을 얻은 후, 프로필에 저장해준다.
aws sts get-session-token --serial-number {arn-of-the-mfa-device} --token-code {code-from-token} --duration-seconds 3600
EC2 상세정보 API는 100req/sec 로 제한되고, s3 get Object API는 5500req/sec로 제한된다. 이처럼 각 API는 제한되어 있고, 이 제한(API Rate Limits)을 증가시키려면 AWS에 요청해야 한다.
서비스 할당량도 제한이 있는데, 1152개의 CPU까지 사용가능하다. 이렇게 서비스 할당량도 각 리소스마다 정해진 양이 있고, 빈도 제한과 마찬가지로 티켓을 열어서 AWS에 더 많은 CPU를 사용할 수 있도록 요청 가능하다.
요청을 재시도를 해야하는 경우 사용한다. Throttling Exception(재시도 에러) 시, 1초동안 첫번째 요청, 다음 요청은 2초, 다음요청은 4초, 다음시도는 8초, 그 다음시도는 16초처럼 지수곱을 하여 다음 요청을 요청하게 된다.
이걸보면 인스턴스 자체에서 환경변수로 쓰는 것을 권장하지 않는다. 예를 들어, 한 인스턴스에서 두 서비스가 돌 때, 한 서비스에는 권한이 모두 풀려야 되고, 다른 서비스에서는 읽기 권한만 가져와야한다고 상상해보자. 그 때, 환경변수에 지정해 놓으면 읽기 권한만 가져와야하는 서비스도 모든 권한이 풀려있기 때문에 쓰기가 된다. 그렇기 때문에 IAM role을 많이 쓰게 된다고 한다.