CloudFormation에서 AWS።StepFunctions።Activity 리소스의 단일 스택 소유권을 설정하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 9월 15일

AWS::StepFunctions::Activity 리소스를 AWS CloudFormation의 단일 스택으로만 유지 관리하고 싶습니다.

간략한 설명

다중 스택에서 AWS::StepFunctions::Activity 리소스의 소유권을 유지 관리할 수 있습니다. 예를 들어 첫 번째 CloudFormation 템플릿을 사용하여 StackA를 생성하고 두 번째 템플릿을 사용하여 StackB를 생성할 수 있습니다.

StackA 템플릿:

AWSTemplateFormatVersion: "2010-09-09"
Description: Template for StackA
Resources:
  MyActivity:
    Type: AWS::StepFunctions::Activity
    Properties:
      Name: myActivity

StackB 템플릿:

AWSTemplateFormatVersion: "2010-09-09"
Description: Template for StackB
Resources:
 MyActivityDuplicate:
 Type: AWS::StepFunctions::Activity
 Properties:
 Name: myActivity
 Tags:
 - Key: Key1
   Value: Val1
....

StackA와 StackB는 둘 다 리소스를 CREATE_COMPLETE로 표시합니다. 그러나 StackA 및 StackB에서 참조되는 Activity 리소스에는 StackA에 대한 템플릿에 정의된 속성이 있습니다. 작업은 성공한 것으로 보이지만 리소스의 속성이 StackA가 사용하는 템플릿과 일치하지 않습니다. 스택 중 하나가 삭제되면 활동도 삭제됩니다. 다른 스택에는 리소스가 더 이상 존재하지 않는다는 표시가 없습니다.

CloudFormation을 사용하는 경우 공유 리소스의 구성을 단일 CloudFormation 스택에서 유지 관리하도록 하는 것이 가장 좋습니다. 이렇게 하면 리소스 구성에 대한 단일 정보 소스(single source of truth)가 제공됩니다. 공유 리소스를 유지 관리하는 CloudFormation 스택은 리소스의 Amazon 리소스 이름(ARN)을 스택 출력으로 제공할 수 있습니다. 그런 다음 공유 리소스에 종속된 다른 스택은 Step Functions 활동과 같은 공유 리소스를 참조할 수 있습니다. 교차 스택 참조에 대한 자세한 내용은 시연: 다른 AWS CloudFormation 스택의 리소스 출력 참조를 참조하세요.

해결 방법

이 문제를 해결하려면 다중 스택에서 유지 관리되는 각 AWS::StepFunctions::Activity 리소스에 대해 다음 단계를 완료하세요.

1.    AWS::StepFunctions::Activity 리소스를 유지 관리하는 CloudFormation 스택의 AWS Personal Health Dashboard에서 공유되는 ARN을 식별합니다.

2.    스택 중 하나를, 향후 활동을 유지 관리할 단일 스택으로 지정합니다.

식별된 스택 내에서 다음 단계를 완료합니다.

1.    CloudFormation 템플릿에 출력(Outputs) 섹션이 없는 경우 템플릿에 출력(Outputs) 섹션을 추가합니다.

2.    출력(Outputs) 섹션에 새 출력을 추가합니다. 새 출력에는 다음이 포함되어야 합니다.

  • 출력에 대한 고유 논리 ID. 예: MyActivityArn. 고유 논리 ID를 템플릿의 출력(Outputs) 섹션에 있는 출력의 키로 사용합니다.
  • 스택 출력 내의 Value 속성입니다. Value 속성은 활동의 논리 ID를 인수로 사용하는 Ref를 사용하여 활동의 ARN을 검색합니다.
  • 스택 출력에 대한 Export 속성으로, 값이 단일 Name 속성을 가진 객체로 지정됩니다. Name 속성의 값은 다른 CloudFormation 스택에서 이 활동의 ARN을 참조하는 데 사용되는 문자열입니다. 예를 들면 다음과 같습니다.
AWSTemplateFormatVersion: "2010-09-09"
Description: Template for StackA
Resources:
  MyActivity:
    Type: AWS::StepFunctions::Activity
    Properties:
      Name: myActivity
Outputs:
  MyActivityArn:
    Value: 
      Ref: MyActivity
    Export:
      Name: MyActivityArn

3.    이전 변경 사항으로 스택을 업데이트합니다.

4.    활동을 참조하는 리소스가 여전히 올바른 ARN을 사용하고 있는지 검증합니다.

활동 리소스를 참조하는 각 스택에 대해 다음 단계를 완료합니다.

1.    CloudFormation 콘솔에서, 스택의 리소스(Resource) 탭에서 활동 리소스의 논리 ID를 식별합니다.

2.    속성이 아직 없는 경우 활동의 리소스 선언에 DeletionPolicy 속성을 추가합니다. 값을 유지(Retain)로 설정합니다. 예를 들면 다음과 같습니다.

AWSTemplateFormatVersion: "2010-09-09"
Description: Template for StackB
Resources:
  MyActivityDuplicate:
    Type: AWS::StepFunctions::Activity
    DeletionPolicy: Retain
    Properties:
      Name: myActivity
      Tags:
        - Key: Key1
          Value: Val1
...

3.    이전 변경 사항으로 스택을 업데이트합니다.

4.    템플릿에서 이 활동의 ARN을 참조하는 다른 리소스를 확인합니다.

5.    4단계에서 식별한 각 리소스에 대해 활동의 ARN에 대한 참조를 Fn::ImportValue 내장 함수로 교체합니다. 앞에서 새 출력을 생성할 때 지정한 내보내기 이름을 내장 함수의 인수로 전달합니다. 예를 들면 다음과 같습니다.

AWSTemplateFormatVersion: "2010-09-09"
Description: Template for StackB
Resources:
  # MyActivityDuplicate:
  #   DeletionPolicy: Retain
  #   Type: AWS::StepFunctions::Activity
  #   Properties:
  #     Name: myActivity
  #     Tags:
  #       - Key: Key1
  #         Value: Val1
  MyStateMachine:
    Type: AWS::StepFunctions::StateMachine
    Properties:
      StateMachineName: MyStateMachine
      RoleArn: arn:aws:iam::111122223333:role/service-role/StatesExecutionRole-us-east-1
      DefinitionString: 
        Fn::Sub:
          - |
              {
                "Comment": "An example using a Task state.",
                "StartAt": "getGreeting",
                "Version": "1.0",
                "TimeoutSeconds": 300,
                "States":
                {
                  "getGreeting": {
                    "Type": "Task",
                    "Resource": "${ActivityArn}",
                    "End": true
                  }
                }
              }
          - ActivityArn:
              Fn::ImportValue: MyActivityArn

6.    리소스(Resources) 섹션에서 활동에 대한 항목을 제거합니다.

7.    이전 변경 사항으로 스택을 업데이트합니다.

8.    활동을 참조하는 리소스가 여전히 올바른 ARN을 사용하고 있는지 검증합니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?