ARN이란 ?
ARN이란 ?
Amazon Resource Number의 약자로 AWS 서비스를 생성할 때 생성되는 일련번호를 말한다.
AWS는 각각의 서비스에서 만든 리소스들을 ARN으로 구분하고 ARN이 다르면 서로 다르게 취급한다.
ARN/파티션 구분자/서비스 명/리전/계정 번호 + 서비스마다 상세 구분자
ex) arn:aws:lambda:region:account-id:function:function-name
람다 함수의 경우 상세 구분자로 function과 function-name이 있다.
그 이유는 람다 함수에 layer라는 서비스도 있기 때문에 layer일 경우 layer:layer-name으로 구분지어준다.
람다 함수의 layer란 ?
공통으로 사용되는 패키지 또는 라이브러리를 압축하여 업로드 함으로써 여러 람다 함수에서 접근하여 코드 수정 없이 사용하는 것
여기서 중요한 것은 함수 이름이 다르면 완전히 다른 리소스로 처리한다는 것이다.
람다 함수의 이름을 바꾸고 싶다면 새로운 람다 함수를 만들어 소스 코드를 붙여넣기 하는 수 밖에 없다.
ARN에 함수 이름이 포함되기 대문에 완전히 다른 개체로 봐야하기 때문이다.
ARN은 많은 정보를 포함하고 있지만 가용 영역의 정보는 없다.
그래서 가용 영역을 바꾼다고 했을 때 새로운 함수를 만들 필요가 없고 언제든 가용 영역이 바뀔 수 있다.
따라서 가용 영역 C에서 불이난다면 가용 영역을 A로 바꾸어 동작할 수 있는 것이다.
ARN 형식은 IAM을 통해 권한을 설정할 때 많은 도움이 된다.
{ "Effect": "Allow",
"Action": "lambda:*",
"Resource": [ " arn:aws:lambda:ap-northeast-2:964581251123123:function:lambda_api_billing",
해당 IAM 정책을 해석하면 lambda_api_billing이라는 lambda 함수의 모든 설정을 부여한다는 것이다.
또한, 콘솔로 생성한 리소스를 Terraform으로 관리하려 할 때 Terraform import 명령을 사용해야 하는데 이 때 arn이 필요하다.
ARN 예제
1. Elastic Beanstalk의 Application Version을 지정하기 위한 ARN
<!-- Elastic Beanstalk application version -->
arn:aws:elasticbeanstalk:us-east-1:123456789012:environment/My App/MyEnvironment
2. IAM의 User의 Name 자원을 지정하기 위한 ARN
<!-- IAM user name -->
arn:aws:iam::123456789012:user/David
3. RDS 인스턴스를 위한 ARN
<!-- Amazon RDS instance used for tagging -->
arn:aws:rds:eu-west-1:123456789012:db:mysql-db
참고