기존 리소스를 스택으로 가져오기
이 주제에서는 템플릿에서 기존 AWS 리소스를 설명하여 기존 스택으로 해당 리소스를 가져오는 방법을 보여줍니다. 이렇게 하는 대신, 기존 리소스를 스캔하고 해당 리소스를 CloudFormation으로 가져오거나 새 계정에 해당 리소스를 복제하는 데 사용할 수 있는 템플릿을 자동으로 생성하려면 IaC 생성기를 사용하여 기존 리소스에서 템플릿 생성 섹션을 참조하세요.
사전 조건
시작하기 전에 다음을 완비해야 합니다.
-
스택에 이미 포함되어 있는 리소스와 가져올 리소스를 모두 포함한 전체 스택을 설명하는 템플릿. 템플릿을 로컬 또는 Amazon S3 버킷에 저장합니다.
실행 중인 스택의 템플릿 사본을 가져오려면
-
https://console.aws.amazon.com/cloudformation/
에서 CloudFormation 콘솔을 엽니다. -
스택 목록에서 템플릿을 검색할 스택을 선택합니다.
-
스택 세부 정보 창에서 템플릿 탭을 선택한 다음 클립보드에 복사를 선택합니다.
-
코드를 텍스트 편집기에 붙여넣어 템플릿에 다른 리소스를 추가하기 시작합니다.
-
-
가져오려는 각 리소스에 대해 다음을 포함하세요.
-
리소스의 현재 구성을 정의하는 속성 및 속성값
-
리소스의 고유 식별자(예: 리소스 이름) 자세한 내용은 리소스 식별자 단원을 참조하십시오.
-
예제 템플릿
이 연습에서는 다음과 같이 두 개의 DynamoDB 테이블을 지정하는 TemplateToImport.json
이라는 예제 템플릿을 사용한다고 가정합니다. ServiceTable
은 현재 스택의 일부이며 GamesTable
은 가져오려는 테이블입니다.
참고
이 템플릿은 예로만 사용됩니다. 이 템플릿을 자체 테스트 목적으로 사용하려면 샘플 리소스를 계정의 리소스로 대체하세요.
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "Import test",
"Resources": {
"ServiceTable": {
"Type": "AWS::DynamoDB::Table",
"Properties": {
"TableName": "Service",
"AttributeDefinitions": [
{
"AttributeName": "key",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "key",
"KeyType": "HASH"
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 1
}
}
},
"GamesTable": {
"Type": "AWS::DynamoDB::Table",
"DeletionPolicy": "Retain",
"Properties": {
"TableName": "Games",
"AttributeDefinitions": [
{
"AttributeName": "key",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "key",
"KeyType": "HASH"
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 1
}
}
}
}
}
AWS Management Console를 사용하여 기존 리소스를 스택으로 가져오기
참고
AWS CloudFormation 콘솔에서는 리소스를 가져올 때 Fn::Transform 내장 함수 사용을 지원하지 않습니다. AWS Command Line Interface를 사용하여 Fn::Transform 내장 함수를 사용하는 리소스를 가져올 수 있습니다.
AWS Management Console에 로그인하여 https://console.aws.amazon.com/cloudformation
에서 AWS CloudFormation 콘솔을 엽니다. -
스택 페이지에서 리소스를 가져올 스택을 선택합니다.
-
Stack actions(스택 작업)를 선택한 다음 Import resources into stack(스택으로 리소스 가져오기)을 선택합니다.
-
Import overview(가져오기 개요) 페이지를 검토한 후 다음을 선택합니다.
-
Specify template(템플릿 지정) 페이지에서 다음 방법 중 하나를 사용하여 업데이트된 템플릿을 제공하고 다음을 선택합니다.
-
Amazon S3 URL을 선택한 다음, 텍스트 상자에 템플릿의 URL을 지정합니다.
-
템플릿 파일 업로드를 선택한 다음 템플릿을 찾습니다.
-
-
Identify resources(리소스 식별) 페이지에서 각 대상 리소스를 식별합니다. 자세한 내용은 리소스 식별자 단원을 참조하십시오.
-
Identifier property(식별자 속성)에서 리소스 식별자의 유형을 선택합니다. 예를 들어
TableName
속성을 사용하여AWS::DynamoDB::Table
리소스를 식별할 수 있습니다. -
Identifier value(식별자 값)에서 실제 속성값을 입력합니다. 예를 들어 예제 템플릿의
GamesTable
리소스에 대한TableName
는
입니다.Games
-
Next(다음)를 선택합니다.
-
-
Specify stack details(스택 세부 정보 지정) 페이지에서 어떤 파라미터든 업데이트하고 다음을 선택합니다. 이렇게 하면 변경 세트가 자동으로 생성됩니다.
참고
생성, 업데이트 또는 삭제 작업을 시작하는 기존 파라미터를 수정하면 가져오기 작업이 실패합니다.
-
stack-name
검토 페이지에서 가져올 리소스를 검토한 다음, Import resources(리소스 가져오기)를 선택합니다. 이렇게 하면 마지막 단계에서 생성된 변경 세트가 자동으로 실행됩니다. 이때 어떤 스택 레벨 태그든 가져온 리소스에 적용됩니다. 자세한 내용은 스택 옵션 구성 단원을 참조하십시오.스택에 대한 이벤트 페이지가 표시됩니다.
-
(선택 사항) 스택에서 드리프트 감지를 실행하여 가져온 리소스의 템플릿과 실제 구성이 일치하는지 확인합니다. 드리프트 감지에 대한 자세한 내용은 전체 CloudFormation 스택의 드리프트 감지 섹션을 참조하세요.
-
(선택 사항) 가져온 리소스가 예상 템플릿 구성과 일치하지 않으면 템플릿 구성을 수정하거나 리소스를 직접 업데이트합니다. 드리프트된 리소스 가져오기에 대한 자세한 내용은 가져오기 작업을 통한 드리프트 해결 섹션을 참조하세요.
AWS CLI를 사용하여 기존 리소스를 스택으로 가져오기
-
템플릿의 각 리소스 유형을 식별하는 속성을 알아보고, 템플릿의 S3 URL을 지정하여 get-template-summary 명령을 실행합니다. 예를 들어
TableName
속성을 사용하여AWS::DynamoDB::Table
리소스를 식별할 수 있습니다. 예제 템플릿의GamesTable
리소스의에서TableName
의 값은Games
입니다. 다음 단계에는 이 정보가 필요합니다.aws cloudformation get-template-summary \ --template-url
https://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json
자세한 내용은 리소스 식별자 단원을 참조하십시오.
-
가져올 실제 리소스 목록과 고유 식별자를 다음 JSON 문자열 형식으로 작성합니다.
[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]
또는 구성 파일에서 JSON 형식 파라미터를 지정할 수 있습니다.
예를 들어
GamesTable
을 가져오려면 다음 구성이 포함된ResourcesToImport.txt
파일을 만들 수 있습니다.[ { "ResourceType":"AWS::DynamoDB::Table", "LogicalResourceId":"GamesTable", "ResourceIdentifier": { "TableName":"Games" } } ]
-
변경 세트를 생성하려면 다음 create-change-set 명령을 사용하고 자리 표시자 텍스트를 변경합니다.
--change-set-type
옵션의 경우,IMPORT
의 값을 지정합니다.--resources-to-import
옵션의 경우 샘플 JSON 문자열을 방금 생성한 실제 JSON 문자열로 바꿉니다.aws cloudformation create-change-set \ --stack-name
TargetStack
--change-set-nameImportChangeSet
\ --change-set-typeIMPORT
\ --template-urlhttps://amzn-s3-demo-bucket.s3.us-west-2.amazonaws.com/TemplateToImport.json
\ --resources-to-import'[{"ResourceType":"AWS::DynamoDB::Table","LogicalResourceId":"GamesTable","ResourceIdentifier":{"TableName":"Games"}}]'
참고
--resources-to-import
에서는 인라인 YAML을 지원하지 않습니다. JSON 문자열의 인용 부호 요구 사항은 터미널에 따라 다릅니다. 자세한 내용은 AWS Command Line Interface 사용 설명서의 문자열 안에 따옴표 사용을 참조하세요.또는 다음 예제와 같이
--resources-to-import
옵션에 대한 입력으로 파일 URL을 사용할 수 있습니다.--resources-to-import
file://ResourcesToImport.txt
-
변경 세트를 검토하여 올바른 리소스를 가져올 것인지 확인합니다.
aws cloudformation describe-change-set \ --change-set-name
ImportChangeSet
--stack-nameTargetStack
-
변경 세트를 시작하고 리소스를 가져오려면 다음 execute-change-set 명령을 사용하고 자리 표시자 텍스트를 변경합니다. 이때 어떤 스택 레벨 태그든 가져온 리소스에 적용됩니다. 자세한 내용은 스택 옵션 구성 단원을 참조하십시오. 작업
(IMPORT_COMPLETE)
이 성공적으로 완료되면 리소스가 성공적으로 가져오기 됩니다.aws cloudformation execute-change-set \ --change-set-name
ImportChangeSet
--stack-nameTargetStack
-
(선택 사항)
IMPORT_COMPLETE
스택에서 드리프트 감지를 실행하여 가져온 리소스의 템플릿과 실제 구성이 일치하는지 확인합니다. 드리프트 감지에 대한 자세한 내용은 전체 CloudFormation 스택의 드리프트 감지 섹션을 참조하세요.-
지정된 스택에서 드리프트 감지를 실행합니다.
aws cloudformation detect-stack-drift --stack-name
TargetStack
성공하면 이 명령에서 다음 샘플 출력이 반환됩니다.
{ "Stack-Drift-Detection-Id" : "624af370-311a-11e8-b6b7-500cexample" }
-
지정된 스택 드리프트 감지 ID에 대한 드리프트 감지 작업의 진행 상황을 확인합니다.
aws cloudformation describe-stack-drift-detection-status \ --stack-drift-detection-id
624af370-311a-11e8-b6b7-500cexample
-
지정된 스택에서 드리프트 여부가 확인된 리소스에 대한 드리프트 정보를 확인합니다.
aws cloudformation describe-stack-resource-drifts --stack-name
TargetStack
-
-
(선택 사항) 가져온 리소스가 예상 템플릿 구성과 일치하지 않으면 템플릿 구성을 수정하거나 리소스를 직접 업데이트합니다. 드리프트된 리소스 가져오기에 대한 자세한 내용은 가져오기 작업을 통한 드리프트 해결 섹션을 참조하세요.