BLOG
AWS Systems Manager의 일부인 매개 변수 저장소는 일반텍스트 데이터(공개 URL) 또는 보안 정보(예: 암호 또는 API 키) 등과 같은 구성 데이터를 관리할 수 있는 중앙 집중식 암호화된 저장소를 제공합니다. 매개 변수 저장소는 AWS CLI, API 및 SDK를 통해 사용할 수 있습니다. AWS Lambda 및 Amazon ECS(Amazon Elastic Container Service)와 같은 AWS 서비스에서 매개 변수를 쉽게 참조할 수 있습니다.
매개 변수 저장소 레이블을 사용하여 사람이 읽을 수 있는 이름을 구성 매개 변수 세트에 추가하여 여러 매개 변수 버전을 관리할 수 있습니다. 라벨링은 사용자 매개 변수 업데이트로 인한 의도하지 않은 매개 변수 값 덮어쓰기를 방지하는 데 도움이 됩니다. 예정된 구성을 업데이트하는 동안 문제가 발생하면 레이블을 사용하여 이전 버전으로 쉽게 롤 백 할 수 있습니다. 이 글에서, 매개 변수 레이블을 매개 변수 버전에 대한 별칭으로 사용하는 방법을 보여 드리겠습니다. 레이블을 사용하여 계층 전체에서 매개 변수 버전을 그룹화하고 계층 및 레이블을 사용하여 환경 전체에 매개 변수에 대한 새 업데이트를 배포할 수 있습니다.
매개변수를 그룹화하는 다양한 방법–계층, 태그 및 레이블
매개변수 계층: 매개 변수 저장소를 사용하면 환경(예: dev/test/prod) 또는 응용 프로그램(예: /Config/Prod/Fleet/MinHealthyHosts, /Config/Beta/Fleet/MinHealthyHosts) 과 같은 일반 그룹을 나타내는 계층 구조에서 매개 변수를 구성할 수 있습니다. 각 매개 변수에는 고유한 히스토리 버전 라인(line)이 있으며 개별 매개 변수에 대한 액세스를 제어할 수 있습니다. 매개 변수 계층에 대한 자세한 내용은 ‘AWS Systems Manager 매개 변수 저장소를 사용하여 계층, 태그 또는 Amazon CloudWatch 이벤트별로 매개 변수를 구성‘ 글을 참조하십시오.
태그: 다른 AWS 리소스와 마찬가지로 매개 변수에 태그를 지정하고 매개 변수에 대한 태그 기반 사용 권한을 설정할 수도 있습니다.
레이블: 레이블을 사용하면 구성 또는 배포의 다른 값에 대해 단일 매개 변수를 유지할 수 있습니다. 예를 들어, 베타 및 프로덕션 환경에 대한 API 키가 서로 다른 경우 단일 API 키 매개 변수를 생성하고 베타와 프로덕션을 위한 다른 매개변수 버전이 있으며 레이블이 첨부되어 있습니다. 그러면 매개 변수 버전에 대한 단일 내역 추적이 생성되며, 매개 변수가 있는 버전에 레이블을 부착할 수 있는 사용자에 대한 액세스를 제어할 수도 있습니다.
매개 변수 레이블
매개 변수가 업데이트될 때마다 새 버전이 생성되고 고유 버전 번호가 할당됩니다. 사람이 읽을 수 있는 별칭을 특정 매개 변수 버전에 연결하고 레이블을 사용하여 히스토리 버전의 값을 검색할 수 있습니다. 고유한 레이블은 한가지 버전의 매개 변수에만 연결할 수 있습니다. 즉, 두가지 매개 변수 버전이 동일한 레이블을 가질 수 없습니다. 레이블을 부착한 후에는 삭제할 수 없지만 매개 변수의 한 버전에서 다른 버전으로만 이동할 수 있습니다. 각 매개 변수 버전에는 레이블이 10개까지 포함될 수 있습니다.
다음 예에는 매개 변수 P1의 5가지 버전이 있습니다. 매개 변수의 이전 버전에 레이블을 부착하고 구문을 사용하여 매개 변수 값을 검색할 수 있습니다.
<parameter-name>:<label>
손쉬운 구성 업데이트를 위해 매개 변수 레이블 사용
베타 및 프로덕션 환경에서 데이터베이스 연결 문자열 및 API 키와 같은 일련의 응용 프로그램 구성 매개 변수가 있는 경우를 가정해 보십시오. 이러한 구성 매개 변수를 자주 업데이트하고 매개 변수를 삭제하거나 업데이트하지 않고도 응용 프로그램에서 특정 버전의 매개 변수를 검색할 수 있습니다. 프로덕션 환경의 경우 데이터베이스 연결 문자열의 버전 4와 API 키의 버전 6이 필요합니다. 베타 환경에서는 데이터베이스 연결 문자열의 버전 1과 API 키의 버전 3이 필요합니다. 레이블을 사용하여 계층 구조의 매개 변수 버전 집합에 대해 스냅샷을 생성할 수 있습니다.
1단계: 매개 변수 생성
AWS CLI 또는 AWS 관리 콘솔을 사용하여 구성 매개 변수를 만듭니다. 예를 들어 API 키 매개 변수를 생성하는 CLI 명령은 다음과 같습니다.
aws ssm put-parameter –name “/Config/Prod/XYZService/APIKey” –type SecureString –value “MyAPIKey”
매개 변수를 업데이트하기 위해 덮어쓰기 플래그를 사용합니다.
aws ssm put-parameter –name “/Config/Prod/XYZService/APIKey” –type SecureString –value “MyNewAPIKey” –overwrite
구성 매개 변수를 여러번 업데이트했으며 프로덕션 환경에 데이터베이스 연결 문자열 버전 5와 API 키의 버전 6이 있다고 가정합니다. 베타 환경에는 데이터베이스 연결 문자열 버전 2와 API 키의 버전 3이 있다고 가정합니다.
2단계: 매개 변수 레이블 부착
적절한 매개 변수 버전에 “현재(Current)” 레이블을 부착합니다. API 키 매개 변수에는 최신 버전이 필요하므로 매개 변수 버전을 제공할 필요가 없습니다.
aws ssm label-parameter-version –name /Config/Prod/DB/ConnectionString –labels Current –parameter-version 4
aws ssm label-parameter-version –name /Config/Prod/XYZService/APIKey –labels Current
콘솔을 사용하여 적절한 매개변수 버전에 “현재(Current)” 레이블을 부착할 수도 있습니다. AWS Systems Manager 콘솔에서 매개 변수 저장소로 이동하고 매개 변수 히스토리 보기에서 버전을 선택하고 레이블을 부착합니다.
마찬가지로 “현재(Current)” 레이블을 베타 환경 구성 매개변수의 해당 매개변수 버전에 부착합니다.
3단계: 현재(Current) 레이블을 사용하여 응용 프로그램 구성 매개 변수 검색
GetParametersByPath 명령을 사용하여 “/Config/” 경로에 있는 모든 매개 변수를 검색하고”현재(Current)” 레이블을 연결합니다. 이 명령에 레이블 필터를 제공하지 않으면 API가 매개 변수의 최신 값을 반환합니다.
aws ssm get-parameters-by-path –path /Config –recursive –with-decryption –parameter-filters Key=Label,Values=Current,Option=Equals
매개 변수 이름과 레이블을 함께 지정하여 GetParameters를 사용할 수도 있습니다.
aws ssm get-parameters –names /Config/Prod/XYZService/APIKey:Current /Config/Prod/DB/ConnectionString:Current –with-decryption
4단계: 매개 변수 업데이트
이제 3단계에서 설명한 대로 응용 프로그램이 Get API 작업을 사용하여 “현재(Current)” 레이블을 사용하여 매개 변수를 검색하므로 매개 변수에 대한 업데이트는 즉시 적용되지 않습니다. 따라서 실수로 덮어쓰더라도 응용 프로그램에 영향을 주지 않습니다.
aws ssm put-parameter –name “/Config/Prod/XYZService/APIKey” –type SecureString –value “MyLatestAPIKey” –overwrite
5단계: “현재(Current)” 레이블을 새 업데이트된 값으로 이동
응용 프로그램에서 값을 선택할 준비가 되면 관리자는 레이블 “현재(Current)”를 다른 버전으로 이동할 수 있습니다. 이전 유효한 값에 레이블 “Fallback”을 부착합니다.
aws ssm label-parameter-version –name /Config/Prod/XYZService/APIKey –labels Current
aws ssm label-parameter-version –name /Config/Prod/XYZService/APIKey –labels Fallback –parameter-version 6
응용 프로그램이 구성 값에 대해 매개 변수 저장소를 폴링(poll)하는 경우 “현재(Current)” 레이블이 이동된 후 업데이트된 값을 선택합니다. 매개 변수의 특정 버전을 참조하기 위해 코드를 변경할 필요는 없습니다.
응용 프로그램의 유사 코드
apiKey = get-parameters(/Config/<env>/XYZService/APIKey:Current)
Validate the API key value retrieved
If any failures
Get the fallback value and use the previous valid configuration
apiKey = get-parameters(/Config/<env>/XYZService/APIKey:Fallback)
6단계: 각 매개 변수 버전과 연관된 모든 레이블 보기
콘솔에서 매개 변수 히스토리 보기로 이동하여 매개 변수의 모든 버전과 부착된 레이블을 검색할 수 있습니다.
CLI를 사용하여 모든 버전의 매개 변수와 연결된 레이블을 검색할 수도 있습니다.
aws ssm get-parameter-history –name /Config/Prod/XYZService/APIKey
레이블 부착을 위한 접근 제어
레이블 승격은 응용 프로그램에서 사용되는 매개 변수 버전을 제어하므로 LabelParameterVersion API 작업에 대한 액세스를 거부하여 레이블 승격에 대한 액세스 제어를 보장합니다. 예를 들어, 다음 IAM 정책은 모든 프로덕션 구성 매개 변수에 대해서만 LabelParameterVersion에 대한 액세스를 제한하고 베타에 대한 액세스를 허용합니다.
{
“Effect”: “Deny”,
“Action”: “ssm:LabelParameterVersion”,
“Resource”: “arn:aws:ssm:<region>:<accountid>:parameter/Config/Prod*”
}
레이블 업데이트에 대한 알림 및 이벤트 설정
Amazon CloudWatch와 Amazon Simple Notification Service (Amazon SNS)를 사용하여 레이블이 한 버전에서 다른 버전으로 부착되거나 이동되었는지 알려 줄 수 있습니다. 이 예에서는 레이블 및 매개 변수 업데이트에 대한 이메일 알림을 설정하는 방법에 대해 보여드립니다.
매개 변수 업데이트를 나타내기 위해 수정되는 이벤트 패턴은 이벤트를 트리거해야 합니다. 다음 예제에서는 프로덕션 데이터베이스 연결 문자열에 대한 매개 변수 업데이트 및 레이블 업데이트와 API 키가 이벤트를 트리거하고 사용자에게 알림을 보냅니다.
{
“source”: [
“aws.ssm”
],
“detail-type”: [
“Parameter Store Change”
],
“detail”: {
“name”: [
“/Config/Prod/DB/ConnectionString”,
“/Config/Prod/XYZService/APIKey”
],
“operation”: [
“Update”,
“Delete”,
“LabelParameterVersion”
]
}
}
결론
이 글은 매개 변수 저장소 레이블 지정 기능을 보여 줍니다. 이 기능은 매개 변수 버전 관리를 기반으로 구축되었으며 매개 변수 버전을 관리하는 보다 간단한 방법을 제공합니다. 레이블은 매개 변수 버전에 대한 사용자 정의 별칭이며 계층 구조에 걸쳐 매개 변수 버전을 그룹화하는 데 사용할 수 있습니다. 레이블은 매개변수 업데이트 중에 추가적인 보호 레이어를 제공하여 이전 버전으로 빠르게 fall back 할 수 있도록 합니다. IAM 정책을 사용하여 레이블 승격 컨트롤을 제한할 수 있습니다. 또한 CloudWatch를 사용하여 레이블을 만들거나 한 버전에서 다른 버전으로 이동할 때 알림을 받을 수 있습니다.
원문 URL: https://aws.amazon.com/ko/blogs/mt/use-parameter-labels-for-easy-configuration-update-across-environments/
** 메가존 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.