AWS Systems Manager Parameter Store의 파라미터를 사용하여 CloudFormation 스택 간에 값을 공유하려면 어떻게 해야 하나요?

2분 분량
0

다른 AWS CloudFormation 스택에서 사용되는 내보내기 변수를 업데이트하려고 하면 오류 메시지가 표시됩니다. 오류는 다음과 같습니다. “다른 스택에서 내보내기 변수를 사용 중이므로 업데이트할 수 없습니다.”

간략한 설명

이 오류를 해결하려면 AWS Systems Manager Parameter StoreSSM 파라미터를 사용하여 CloudFormation 스택 간에 값을 공유하세요. SSM 파라미터는 한 스택(stackA)에 다른 스택(stackB)에서 사용할 수 있는 값을 저장합니다.

SSM 파라미터를 사용하면 두 CloudFormation 스택 간에는 종속성이 없습니다. AWS Systems Manager Parameter Store가 변수를 저장하기 때문입니다.

참고: CloudFormation은 여러 SSM 파라미터 유형을 지원합니다.

해결 방법

1.    다음 템플릿을 기반으로 하는 CloudFormation 스택(stackA)을 생성합니다.

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "AvailabilityZone": {
      "Description": "Amazon EC2 instance Availability Zone",
      "Type": "String"
    },
    "AMIId": {
      "Description": "The Amazon Machine Image id",
      "Type": "String"
    },
    "InstanceType": {
      "Description": "The Type of instance",
      "Type": "String"
    }
  },
  "Resources": {
    "myinstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "AvailabilityZone": {
          "Fn::GetAtt": ["BasicParameter", "Value"]
        },
        "ImageId": {
          "Ref": "AMIId"
        },
        "InstanceType": {
          "Ref": "InstanceType"
        }
      }
    },
    "BasicParameter": {
      "Type": "AWS::SSM::Parameter",
      "Properties": {
        "Name": "AvailabilityZone",
        "Type": "String",
        "Value": {
          "Ref": "AvailabilityZone"
        }
      }
    }
  }
}

위 템플릿은 인스턴스와 SSM 파라미터를 생성합니다. SSM 파라미터의 값은 생성된 인스턴스의 가용 영역으로 설정됩니다. stackANameAvailabilityZone으로 설정되고 Valueus-east-2a로 설정된 SSM Parameter Store를 생성합니다.

참고: SSM 파라미터에는 고유한 이름을 사용해야 합니다.

2.    다음 템플릿을 기반으로 하는 또 다른 CloudFormation 스택(stackB)을 생성합니다.

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "AMIId": {
      "Description": "The Amazon Machine Image id",
      "Type": "String"
    },
    "InstanceType": {
      "Description": "The Type of instance",
      "Type": "String"
    },
    "AvailabilityZone": {
      "Description": "Amazon EC2 instance Availablity Zone",
      "Type": "AWS::SSM::Parameter::Value<String>",
      "Default": "AvailabilityZone"
    }
  },
  "Mappings": {},
  "Conditions": {},
  "Resources": {
    "myinstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "AvailabilityZone": {
          "Ref": "AvailabilityZone"
        },
        "ImageId": {
          "Ref": "AMIId"
        },
        "InstanceType": {
          "Ref": "InstanceType"
        }
      }
    }
  }
}

이 템플릿은 1단계에서 stackA가 생성한 SSM 파라미터를 사용합니다.

참고: 이 파라미터를 사용하려면 stackB에서 파라미터를 선언해야 합니다. Type을 **AWS::SSM::Parameter::Value<String>**로 설정합니다. 그러면 stackB에서 생성된 인스턴스가 us-east-2a 가용 영역에서 시작됩니다.

3.    stackA를 업데이트하려면 AvailabilityZone 파라미터를 us-east-2a에서 us-east-2b로 변경합니다.

4.    stackB와 동일하게 업데이트된 가용 영역에 있는 stackA에서 인스턴스를 시작합니다. 인스턴스가 교체된 후 us-east-2b 가용 영역에서 시작됩니다.

AWS 공식
AWS 공식업데이트됨 7달 전