사용자 정의 인벤토리 작업
AWS Systems Manager Inventory 사용자 정의 인벤토리를 생성하여 원하는 메타데이터를 노드에 할당할 수 있습니다. 예를 들어 데이터 센터에서 여러 랙에 다수의 서버를 설치하여 관리하고 있으며, 이 서버들은 Systems Manager 관리형 노드로 구성되었다고 가정하겠습니다. 현재는 서버 랙 위치에 대한 정보를 스프레드시트에 저장하고 있습니다. 하지만 사용자 정의 인벤토리를 사용하면 각 노드의 랙 위치를 노드에 대한 메타데이터로 지정할 수 있습니다. Systems Manager를 사용하여 인벤토리를 수집할 경우에는 메타데이터가 다른 인벤토리 메타데이터와 함께 수집됩니다. 그런 다음 리소스 데이터 동기화를 사용하여 모든 인벤토리 메타데이터를 중앙 Amazon S3 버킷으로 포팅하고 데이터를 쿼리할 수 있습니다.
참고
Systems Manager는 AWS 계정당 최대 20개의 사용자 정의 인벤토리 유형을 지원합니다.
노드에 사용자 정의 인벤토리를 할당하려면 관리형 노드에 사용자 지정 인벤토리 메타데이터 할당에 설명된 대로 Systems Manager PutInventory API 작업을 사용할 수 있습니다. 아니면, 사용자 정의 인벤토리 JSON 파일을 생성하여 노드에 업로드하는 방법이 있습니다. 이번 단원에서는 JSON 파일을 생성하는 방법에 대해서 설명합니다.
다음 예제 JSON 파일은 온프레미스 서버의 랙 정보를 지정하는 사용자 지정 인벤토리를 포함하고 있습니다. 이 예제는 Content
아래에 데이터를 설명하는 여러 항목을 포함하는 한 사용자 지정 인벤토리 데이터 형식("TypeName": "Custom:RackInformation"
)을 지정합니다.
{ "SchemaVersion": "1.0", "TypeName": "Custom:RackInformation", "Content": { "Location": "US-EAST-02.CMH.RACK1", "InstalledTime": "2016-01-01T01:01:01Z", "vendor": "DELL", "Zone" : "BJS12", "TimeZone": "UTC-8" } }
다음 예제에 나온 것처럼 Content
섹션에 개별 항목을 지정할 수도 있습니다.
{ "SchemaVersion": "1.0", "TypeName": "Custom:PuppetModuleInfo", "Content": [{ "Name": "puppetlabs/aws", "Version": "1.0" }, { "Name": "puppetlabs/dsc", "Version": "2.0" } ] }
사용자 정의 인벤토리에 사용되는 JSON 스키마는 SchemaVersion
TypeName
및 Content
섹션이 필요하지만 이 섹션의 정보를 정의할 수 있습니다.
{ "SchemaVersion": "
user_defined
", "TypeName": "Custom:user_defined
", "Content": { "user_defined_attribute1
": "user_defined_value1
", "user_defined_attribute2
": "user_defined_value2
", "user_defined_attribute3
": "user_defined_value3
", "user_defined_attribute4
": "user_defined_value4
" } }
TypeName
값은 100자로 제한됩니다. 또한 TypeName
값은 대문자로 된 Custom
단어로 시작해야 합니다. 예: Custom:PuppetModuleInfo
. 따라서 이 예시(CUSTOM:PuppetModuleInfo
, custom:PuppetModuleInfo
)에서는 예외가 발생합니다.
Content
섹션에는 속성과 data
가 포함됩니다. 이들 항목은 대/소문자를 구분하지 않습니다. 하지만 속성을 정의하는 경우에는(예: "Vendor
": "DELL") 사용자 정의 인벤토리 파일에서 이 속성을 일관적으로 참조해야 합니다. 한 파일에서 "Vendor
": "DELL"(vendor
에서 대문자 “V” 사용)을 지정한 다음 다른 파일에서 "vendor
": "DELL"(vendor
에서 소문자 “v” 사용)을 지정하면 시스템이 오류 메시지를 반환합니다.
참고
파일을 .json
확장자로 저장해야 하며 정의한 인벤토리는 문자열 값으로만 구성되어야 합니다.
파일을 생성한 후에는 노드에 저장해야 합니다. 다음은 노드에서 사용자 정의 인벤토리 JSON 파일을 저장해야 하는 위치를 나타낸 표입니다.
운영 체제 | 경로 |
---|---|
Linux |
/var/lib/amazon/ssm/ |
macOS |
|
Windows |
%SystemDrive%\ProgramData\Amazon\SSM\InstanceData\ |
사용자 지정 인벤토리를 사용하는 방법의 예제는 EC2 Systems Manager 사용자 지정 인벤토리 유형을 사용하여 플릿의 디스크 사용률 얻기
사용자 지정 인벤토리 삭제
DeleteInventory API 작업을 사용하여 사용자 정의 Inventory 유형 및 해당 유형과 연결된 데이터를 삭제할 수 있습니다. AWS Command Line Interface(AWS CLI)를 사용하여 delete-inventory 명령을 호출함으로써 인벤토리 유형의 모든 데이터를 삭제합니다. SchemaDeleteOption
과 함께 delete-inventory 명령을 호출하여 사용자 지정 인벤토리 유형을 삭제합니다.
참고
인벤토리 유형을 인벤토리 스키마라고도 합니다.
SchemaDeleteOption
파라미터에는 다음과 같은 옵션이 있습니다.
-
DeleteSchema: 이 옵션은 지정한 사용자 지정 유형 및 해당 유형과 연결된 모든 데이터를 삭제합니다. 원한다면 나중에 스키마를 다시 만들 수 있습니다.
-
[DisableSchema]: 이 옵션을 선택하면 시스템에서 현재 버전을 해제하고, 현재 버전에 대한 모든 데이터를 삭제하고, 해당 버전이 해제된 버전과 같거나 이전 버전일 경우 새 데이터를 모두 무시합니다. 해제된 버전보다 높은 버전에 대해 PutInventory 작업을 호출함으로써 이 Inventory 유형을 다시 허용할 수 있습니다.
AWS CLI를 사용하여 사용자 정의 인벤토리를 삭제하거나 해제하려면
아직 하지 않은 경우 AWS Command Line Interface(AWS CLI)를 설치하고 구성합니다.
자세한 내용은 최신 버전의 AWS CLI 설치 또는 업데이트를 참조하세요.
-
dry-run
옵션으로 시스템에서 삭제할 데이터를 확인하려면 다음 명령을 실행하십시오. 이 명령은 어떤 데이터도 삭제하지 않습니다.aws ssm delete-inventory --type-name "Custom:
custom_type_name
" --dry-run시스템은 다음과 같은 정보를 반환합니다.
{ "DeletionSummary":{ "RemainingCount":3, "SummaryItems":[ { "Count":2, "RemainingCount":2, "Version":"1.0" }, { "Count":1, "RemainingCount":1, "Version":"2.0" } ], "TotalCount":3 }, "TypeName":"Custom:
custom_type_name
" }인벤토리 삭제 요약을 이해하는 방법은 인벤토리 삭제 요약 이해하기 섹션을 참조하세요.
-
다음 명령을 실행하여 사용자 지정 인벤토리 유형의 데이터를 모두 삭제합니다.
aws ssm delete-inventory --type-name "Custom:
custom_type_name
"참고
이 명령의 출력에는 삭제 진행 상황이 표시되지 않습니다. 그러므로 [총 개수(TotalCount)]와 [남은 개수(Remaining Count)]는 항상 동일합니다. 아직 아무것도 삭제되지 않았기 때문입니다. 이 주제 후반부에서 설명하는 방법으로 describe-inventory-deletions 명령을 사용하여 삭제 진행 상황을 표시할 수 있습니다.
시스템은 다음과 같은 정보를 반환합니다.
{ "DeletionId":"
system_generated_deletion_ID
", "DeletionSummary":{ "RemainingCount":3, "SummaryItems":[ { "Count":2, "RemainingCount":2, "Version":"1.0" }, { "Count":1, "RemainingCount":1, "Version":"2.0" } ], "TotalCount":3 }, "TypeName":"custom_type_name
" }그러면 Systems Manager Inventory 서비스에서 지정된 사용자 정의 Inventory 유형의 데이터가 모두 삭제됩니다.
-
다음 명령을 실행합니다. 이 명령은 현재 버전을 해제하고, 해당하는 데이터를 모두 삭제하고, 해제된 버전 이하의 버전에서는 신규 데이터를 모두 무시하는 등의 작업을 현재 버전의 인벤토리 유형에 대해 수행합니다.
aws ssm delete-inventory --type-name "Custom:
custom_type_name
" --schema-delete-option "DisableSchema"시스템은 다음과 같은 정보를 반환합니다.
{ "DeletionId":"
system_generated_deletion_ID
", "DeletionSummary":{ "RemainingCount":3, "SummaryItems":[ { "Count":2, "RemainingCount":2, "Version":"1.0" }, { "Count":1, "RemainingCount":1, "Version":"2.0" } ], "TotalCount":3 }, "TypeName":"Custom:custom_type_name
" }다음 명령으로 해제된 인벤토리 유형을 볼 수 있습니다.
aws ssm get-inventory-schema --type-name Custom:
custom_type_name
-
다음 명령을 실행하여 인벤토리 유형을 삭제합니다.
aws ssm delete-inventory --type-name "Custom:
custom_type_name
" --schema-delete-option "DeleteSchema"지정된 사용자 지정 유형의 스키마와 인벤토리 데이터가 모두 삭제됩니다.
시스템은 다음과 같은 정보를 반환합니다.
{ "DeletionId":"
system_generated_deletion_ID
", "DeletionSummary":{ "RemainingCount":3, "SummaryItems":[ { "Count":2, "RemainingCount":2, "Version":"1.0" }, { "Count":1, "RemainingCount":1, "Version":"2.0" } ], "TotalCount":3 }, "TypeName":"Custom:custom_type_name
" }
삭제 상태 보기
describe-inventory-deletions
AWS CLI 명령으로 삭제 작업의 상태를 확인할 수 있습니다. 특정한 삭제 작업의 상태를 보려면 삭제 ID를 지정하십시오. 아니면 삭제 ID를 생략하고 최근 30일간 실행된 전체 삭제 작업 목록을 볼 수도 있습니다.
-
다음 명령을 실행하여 삭제 작업의 상태를 확인합니다. 시스템에서는 delete-inventory 요약을 통해 삭제 ID를 반환했습니다.
aws ssm describe-inventory-deletions --deletion-id
system_generated_deletion_ID
시스템에서 최신 상태를 반환합니다. 삭제 작업이 아직 종료되지 않았을 수 있습니다. 시스템은 다음과 같은 정보를 반환합니다.
{"InventoryDeletions": [ {"DeletionId": "
system_generated_deletion_ID
", "DeletionStartTime": 1521744844, "DeletionSummary": {"RemainingCount": 1, "SummaryItems": [ {"Count": 1, "RemainingCount": 1, "Version": "1.0"} ], "TotalCount": 1}, "LastStatus": "InProgress", "LastStatusMessage": "The Delete is in progress", "LastStatusUpdateTime": 1521744844, "TypeName": "Custom:custom_type_name
"} ] }삭제 작업이 성공하면
LastStatusMessage
상태: 삭제 성공이 반환됩니다.{"InventoryDeletions": [ {"DeletionId": "
system_generated_deletion_ID
", "DeletionStartTime": 1521744844, "DeletionSummary": {"RemainingCount": 0, "SummaryItems": [ {"Count": 1, "RemainingCount": 0, "Version": "1.0"} ], "TotalCount": 1}, "LastStatus": "Complete", "LastStatusMessage": "Deletion is successful", "LastStatusUpdateTime": 1521745253, "TypeName": "Custom:custom_type_name
"} ] } -
다음 명령을 실행하여 최근 30일간 실행된 전체 삭제 작업 목록을 볼 수도 있습니다.
aws ssm describe-inventory-deletions --max-results
a number
{"InventoryDeletions": [ {"DeletionId": "
system_generated_deletion_ID
", "DeletionStartTime": 1521682552, "DeletionSummary": {"RemainingCount": 0, "SummaryItems": [ {"Count": 1, "RemainingCount": 0, "Version": "1.0"} ], "TotalCount": 1}, "LastStatus": "Complete", "LastStatusMessage": "Deletion is successful", "LastStatusUpdateTime": 1521682852, "TypeName": "Custom:custom_type_name
"}, {"DeletionId": "system_generated_deletion_ID
", "DeletionStartTime": 1521744844, "DeletionSummary": {"RemainingCount": 0, "SummaryItems": [ {"Count": 1, "RemainingCount": 0, "Version": "1.0"} ], "TotalCount": 1}, "LastStatus": "Complete", "LastStatusMessage": "Deletion is successful", "LastStatusUpdateTime": 1521745253, "TypeName": "Custom:custom_type_name
"}, {"DeletionId": "system_generated_deletion_ID
", "DeletionStartTime": 1521680145, "DeletionSummary": {"RemainingCount": 0, "SummaryItems": [ {"Count": 1, "RemainingCount": 0, "Version": "1.0"} ], "TotalCount": 1}, "LastStatus": "Complete", "LastStatusMessage": "Deletion is successful", "LastStatusUpdateTime": 1521680471, "TypeName": "Custom:custom_type_name
"} ], "NextToken": "next-token"
인벤토리 삭제 요약 이해하기
인벤토리 삭제 요약을 이해하려면 다음 예제를 생각해 보십시오. 사용자가 노드 세 개에 Custom:RackSpace 인벤토리를 할당했습니다. 인벤토리 항목 1과 2는 사용자 지정 유형 버전 1.0을 사용합니다("SchemaVersion":"1.0"). 인벤토리 항목 3은 사용자 지정 유형 버전 2.0을 사용합니다("SchemaVersion":"2.0").
RackSpace 사용자 지정 인벤토리 1
{ "CaptureTime":"2018-02-19T10:48:55Z", "TypeName":"CustomType:RackSpace", "InstanceId":"i-1234567890", "SchemaVersion":"1.0" "Content":[ {
content of custom type omitted
} ] }
RackSpace 사용자 지정 인벤토리 2
{ "CaptureTime":"2018-02-19T10:48:55Z", "TypeName":"CustomType:RackSpace", "InstanceId":"i-1234567891", "SchemaVersion":"1.0" "Content":[ {
content of custom type omitted
} ] }
RackSpace 사용자 지정 인벤토리 3
{ "CaptureTime":"2018-02-19T10:48:55Z", "TypeName":"CustomType:RackSpace", "InstanceId":"i-1234567892", "SchemaVersion":"2.0" "Content":[ {
content of custom type omitted
} ] }
사용자는 다음 명령을 실행하여 삭제할 데이터를 미리 봅니다.
aws ssm delete-inventory --type-name "Custom:RackSpace" --dry-run
시스템은 다음과 같은 정보를 반환합니다.
{ "DeletionId":"1111-2222-333-444-66666", "DeletionSummary":{ "RemainingCount":3, "TotalCount":3, TotalCount and RemainingCount are the number of items that would be deleted if this was not a dry run. These numbers are the same because the system didn't delete anything. "SummaryItems":[ { "Count":2, The system found two items that use SchemaVersion 1.0. Neither item was deleted. "RemainingCount":2, "Version":"1.0" }, { "Count":1, The system found one item that uses SchemaVersion 1.0. This item was not deleted. "RemainingCount":1, "Version":"2.0" } ], }, "TypeName":"Custom:RackSpace" }
사용자는 다음 명령을 실행하여 Custom:RackSpace 인벤토리를 삭제합니다.
참고
이 명령의 출력에는 삭제 진행 상황이 표시되지 않습니다. 그러므로 TotalCount
와 RemainingCount
는 항상 동일합니다. 아직 아무것도 삭제되지 않았기 때문입니다. describe-inventory-deletions
명령을 사용하여 삭제 진행 상황을 표시합니다.
aws ssm delete-inventory --type-name "Custom:RackSpace"
시스템은 다음과 같은 정보를 반환합니다.
{ "DeletionId":"1111-2222-333-444-7777777", "DeletionSummary":{ "RemainingCount":3, There are three items to delete "SummaryItems":[ { "Count":2, The system found two items that use SchemaVersion 1.0. "RemainingCount":2, "Version":"1.0" }, { "Count":1, The system found one item that uses SchemaVersion 2.0. "RemainingCount":1, "Version":"2.0" } ], "TotalCount":3 }, "TypeName":"RackSpace" }
EventBridge에서 인벤토리 삭제 작업 보기
사용자가 사용자 정의 인벤토리를 삭제할 때마다 이벤트를 생성하도록 Amazon EventBridge를 구성할 수 있습니다. EventBridge는 사용자 정의 인벤토리 삭제 작업에 대해 다음과 같은 3가지 유형의 이벤트를 제공합니다.
-
Delete action for an instance(인스턴스에 대한 삭제 작업): 지정된 관리형 노드에 대한 사용자 지정 인벤토리가 무사히 삭제되었는지 여부.
-
Delete action summary(삭제 작업 요약): 삭제 작업의 요약.
-
[해제된 사용자 정의 Inventory 유형 경고(Warning for turned off custom inventory type)]: 이전에 해제한 사용자 정의 Inventory 유형 버전에 PutInventory API 작업을 호출할 경우 등장하는 경고 이벤트.
다음은 각 이벤트의 예입니다.
Delete action for an instance(인스턴스에 대한 삭제 작업)
{ "version":"0", "id":"998c9cde-56c0-b38b-707f-0411b3ff9d11", "detail-type":"Inventory Resource State Change", "source":"aws.ssm", "account":"478678815555", "time":"2018-05-24T22:24:34Z", "region":"us-east-1", "resources":[ "arn:aws:ssm:us-east-1:478678815555:managed-instance/i-0a5feb270fc3f0b97" ], "detail":{ "action-status":"succeeded", "action":"delete", "resource-type":"managed-instance", "resource-id":"i-0a5feb270fc3f0b97", "action-reason":"", "type-name":"Custom:MyInfo" } }
Delete action summary(삭제 작업 요약)
{ "version":"0", "id":"83898300-f576-5181-7a67-fb3e45e4fad4", "detail-type":"Inventory Resource State Change", "source":"aws.ssm", "account":"478678815555", "time":"2018-05-24T22:28:25Z", "region":"us-east-1", "resources":[ ], "detail":{ "action-status":"succeeded", "action":"delete-summary", "resource-type":"managed-instance", "resource-id":"", "action-reason":"The delete for type name Custom:MyInfo was completed. The deletion summary is: {\"totalCount\":2,\"remainingCount\":0,\"summaryItems\":[{\"version\":\"1.0\",\"count\":2,\"remainingCount\":0}]}", "type-name":"Custom:MyInfo" } }
해제된 사용자 정의 인벤토리 유형 경고
{ "version":"0", "id":"49c1855c-9c57-b5d7-8518-b64aeeef5e4a", "detail-type":"Inventory Resource State Change", "source":"aws.ssm", "account":"478678815555", "time":"2018-05-24T22:46:58Z", "region":"us-east-1", "resources":[ "arn:aws:ssm:us-east-1:478678815555:managed-instance/i-0ee2d86a2cfc371f6" ], "detail":{ "action-status":"failed", "action":"put", "resource-type":"managed-instance", "resource-id":"i-0ee2d86a2cfc371f6", "action-reason":"The inventory item with type name Custom:MyInfo was sent with a disabled schema version 1.0. You must send a version greater than 1.0", "type-name":"Custom:MyInfo" } }
사용자 정의 인벤토리 삭제 작업에 EventBridge 규칙을 생성하려면 다음 절차를 따릅니다. 이 절차는 사용자 정의 인벤토리 삭제 작업에 대한 알림을 Amazon SNS 주제에 전송하도록 규칙을 생성하는 방법입니다. 시작하기 전에 Amazon SNS 주제가 있는지 확인하고 없으면 새로 생성합니다. 자세한 내용은 Amazon Simple Notification Service Developer Guide의 Getting Started를 참조하세요.
인벤토리 삭제 작업에 EventBridge를 구성하려면
https://console.aws.amazon.com/events/
에서 Amazon EventBridge 콘솔을 엽니다. -
탐색 창에서 규칙을 선택합니다.
-
규칙 생성을 선택합니다.
-
규칙에 대해 이름과 설명을 입력합니다.
규칙은 동일한 지역과 동일한 이벤트 버스의 다른 규칙과 동일한 이름을 가질 수 없습니다.
-
이벤트 버스에서 이 규칙과 연결할 이벤트 버스를 선택합니다. 이 규칙이 자신의 AWS 계정에서 오는 일치하는 이벤트에 응답하도록 하려면 default(기본)를 선택합니다. 계정의 AWS 서비스이(가) 이벤트를 출력하면 항상 계정의 기본 이벤트 버스로 이동합니다.
-
규칙 유형에서 이벤트 패턴이 있는 규칙을 선택합니다.
-
Next(다음)를 선택합니다.
-
이벤트 소스(Event source)에서 AWS 이벤트 또는 EventBridge 파트너 이벤트(Events or EventBridge partner events)를 선택합니다.
-
이벤트 패턴(Event pattern)섹션에서 이벤트 패턴 양식(Event pattern form)을 선택합니다.
-
이벤트 소스에서 AWS 서비스를 선택합니다.
-
AWS service(서비스)에서 Systems Manager를 선택합니다.
-
[이벤트 유형(Event type)]으로 [인벤토리]를 선택합니다.
-
Specific detail type(s)(특정 상세 유형)에서 Inventory Resource State Change(인벤토리 리소스 상태 변경)을 선택합니다.
-
Next(다음)를 선택합니다.
-
대상 유형에서 AWS서비스를 선택합니다.
-
Select a target(대상 선택)에서 SNS topic(SNS 주제)을 선택한 후 Topic(주제)에서 주제를 선택합니다.
-
Additional settings(추가 설정) 섹션의 Configure target input(대상 입력 구성)에서 Matched event(일치하는 이벤트)가 선택되었는지 확인합니다.
-
Next(다음)를 선택합니다.
-
(선택 사항)규칙에 대해 하나 이상의 태그를 입력하세요. 자세한 내용은 Amazon EventBridge User Guide의 Tagging Your Amazon EventBridge Resources를 참조하세요.
-
Next(다음)를 선택합니다.
-
규칙의 세부 정보를 검토하고 규칙 생성을 선택합니다.