

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Enterprise Blueprint Factory 사용
<a name="using-factory"></a>

이 섹션에서는 환경에서 블루프린트를 생성, 업데이트 또는 삭제하는 데 도움이 됩니다. 수명 [주기](architecture-blueprint-lifecycle.md) 동안 블루프린트를 관리하기 위한 자세한 지침을 제공합니다.

사용자 지정 블루프린트를 생성하거나 업데이트하려면 AWS CloudFormation [템플릿](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html) 또는 AWS Cloud Development Kit (AWS CDK) [구문](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html)과 같은 IaC 템플릿을 생성하는 방법을 이해해야 합니다. 이 가이드에는 Enterprise Blueprint Factory를 통해 릴리스하는 블루프린트를 정의하는 방법에 대한 정보나 지침은 포함되어 있지 않습니다.

## 사전 조건
<a name="using-factory-prereqs"></a>

다음은 AWS 환경에서 Enterprise Blueprint Factory를 사용하기 위한 사전 조건입니다.
+ AWS Command Line Interface (AWS CLI), [설치](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) 및 [구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)됨
+ `ServiceCatalogEndUserRole` AWS Identity and Access Management (IAM) 역할을 수임할 수 있는 권한
+ CloudFormation 템플릿 또는 AWS CDK 구문

## 블루프린트 생성
<a name="using-factory-create"></a>

Enterprise Blueprint Factory 파이프라인은 구성 파일에서 정의한 블루프린트를 배포합니다. 개발자는 구성 파일을 구성 리포지토리에 병합하여 구성 파이프라인을 시작합니다. 그런 다음 Enterprise Blueprint Factory는 `ServiceCatalogLaunchConstraintRole`를 사용하여 블루프린트를 Service Catalog의 제품으로 배포합니다. 블루프린트를 생성할 때 구성 파이프라인 및 릴리스 파이프라인이 수행하는 작업에 대한 자세한 내용은이 가이드의 [블루프린트 생성을](architecture-blueprint-lifecycle.md#architecture-blueprint-lifecycle-create) 참조하세요.

**블루프린트를 제품 리포지토리에 추가하려면**

1. 이 설명서의 Enterprise Blueprint Factory 설정의 지침에 따라 [Enterprise Blueprint Factory를 설정](setup.md)했는지 확인합니다.

1. `ServiceCataloglogLaunchConstraintRole` 역할에 대한 정책이 블루프린트에 정의된 리소스를 프로비저닝할 수 있도록 허용하는지 확인합니다.

1. 제품 리포지토리(`ServiceCatalog-BlueprintProductRepo`)에서 새 블루프린트에 대한 폴더를 생성합니다.

1. IaC 템플릿(CloudFormation 템플릿 또는 AWS CDK 구문)을 생성한 폴더에 붙여 넣습니다.

1. 생성한 폴더에 **product\_config.json**이라는 파일을 생성합니다.

1. ** product\_config.json** 파일을 열고 다음 파일을 파일에 붙여 넣습니다.

   ```
   {
       "SchemaVersion": "1.0",
       "ProductVersionName": "1.0.1",
       "Deprecated_Versions" : [],
       "ProductVersionDescription": "<description>",
       "ProductType": "CLOUD_FORMATION_TEMPLATE",
       "Properties": {
           "TemplateFilePath": "./<folder name>/<file name>"
       }
   }
   ```

   위치:
   + `<description>`는 블루프린트 버전에 대한 간략한 설명입니다.
   + `<folder name>`는 제품 리포지토리에서 생성한 폴더의 이름입니다.
   + `<file name>`는 IaC 템플릿의 이름입니다.
**참고**  
조직의 정책에 맞게 스키마 버전 또는 제품 버전 이름을 업데이트할 수 있습니다.

1. **product\_config.json** 파일을 저장하고 닫습니다.

1. 다음 명령을 입력하여 변경 사항을 제품 리포지토리에 병합합니다.

   ```
   cd ServiceCatalog-BlueprintProductRepo
   git add <folder name>/<file name> <folder name>\product_config.json
   git commit -m "The first version of <file name> blueprint"
   git push origin main
   ```

**구성 파일을 업데이트하려면**

1. 구성 리포지토리(`ServiceCatalog-ConfigRepo`)에서 **config.yml** 파일을 엽니다.

1. 새 블루프린트에 필요한 대로 `portfolios` 섹션 및 `products` 섹션을 편집합니다. 자세한 내용은이 가이드의 [구성 파일을](architecture-components.md#architecture-config-file) 참조하세요.

1. **config.yml** 파일을 저장하고 닫습니다.

1. 다음 명령을 입력하여 변경 사항을 구성 리포지토리에 병합합니다.

   ```
   cd ServiceCatalog-ConfigRepo
   git add config.yml
   git commit -m "<description of change>"
   git push origin main
   ```

   이 풀 요청을 승인하면 구성 파이프라인이 시작됩니다. 구성 파이프라인은 제품에 대한 릴리스 파이프라인을 생성합니다.

**배포 로그를 검토하려면**

1. Enterprise Blueprint Factory 관리 계정에 로그인합니다.

1. [AWS CodePipeline 콘솔](https://console.aws.amazon.com/codesuite/codepipeline/home)을 엽니다.

1. **이름**에서 제품의 릴리스 파이프라인을 선택합니다. 기본적으로 파이프라인 이름은 입니다`BluePrint_<Product-Name>-<CloudFormation-Stack-Name>`.

1. **내역 보기**를 선택합니다.

1. 파이프라인 및 단계 실행의 상태를 봅니다. 상태에 대한 자세한 내용은 CodePipeline 설명서의 [실행 상태 보기를](https://docs.aws.amazon.com/codepipeline/latest/userguide/executions-view.html#pipelines-executions-status-console) 참조하세요.

1. 파이프라인이 실패하면 실패 원인을 검토합니다. 파이프라인에 대한 모니터링을 구성하는 방법에 대한 지침은 CodePipeline 설명서의 [파이프라인 모니터링을](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring.html) 참조하세요. cfn-lint 또는 cfn\_nag 검사로 인해 릴리스 파이프라인이 실패한 경우 템플릿의 오류를 수정합니다. 제품 리포지토리에 또 다른 풀 요청을 제출합니다. 이렇게 하면 릴리스 파이프라인이 다시 시작됩니다. 템플릿 오류 수정에 대한 자세한 내용은이 가이드의 [문제 해결](#using-factory-troubleshooting) 섹션을 참조하세요.

1. 릴리스 파이프라인 상태가가 될 때까지 기다립니다`Succeeded`.

**배포를 검증하려면**

1. 조직의 소비자 계정에 로그인합니다.

1. `ServiceCatalogEndUserRole` IAM 역할을 수임합니다.

1. [Service Catalog 콘솔](https://console.aws.amazon.com/servicecatalog/)을 엽니다.

1. 탐색 창에서 **제품**을 선택합니다.

1. 제품 목록에서 새 제품을 사용할 수 있는지 확인합니다.

## 블루프린트 업데이트
<a name="using-factory-update"></a>

블루프린트를 생성할 때 구성 파이프라인 및 릴리스 파이프라인이 수행하는 작업에 대한 자세한 내용은이 가이드의 [블루프린트 업데이트를](architecture-blueprint-lifecycle.md#architecture-blueprint-lifecycle-update) 참조하세요.

**블루프린트를 업데이트하려면**

1. 제품 리포지토리에서 제품의 폴더로 이동합니다.

1. 업데이트된 IaC 템플릿을 붙여넣습니다. 파일 이름이 이전 버전과 동일한지 확인합니다.

1. **product\_config.json** 파일을 엽니다.

1. 의 경우 버전 번호를 `ProductVersionName`업데이트합니다.

1. 향후 이전 제품 버전이 배포되지 않도록 하려면에 대해 쉼표로 구분된 목록에 이전 버전 번호를 `Deprecated_Versions`입력합니다.

1. 다음 명령을 입력하여 변경 사항을 제품 리포지토리에 병합합니다.

   ```
   cd ServiceCatalog-BlueprintProductRepo
   git add <folder name>/<file name> <folder name>\product_config.json
   git commit -m "Version <number> of <file name> blueprint"
   git push origin main
   ```

   이 풀 요청을 승인하면 제품의 릴리스 파이프라인이 시작됩니다.

**배포 로그를 검토하려면**

1. Enterprise Blueprint Factory 관리 계정에 로그인합니다.

1. [AWS CodePipeline 콘솔](https://console.aws.amazon.com/codesuite/codepipeline/home)을 엽니다.

1. **이름**에서 릴리스 파이프라인을 선택합니다. 기본적으로 파이프라인 이름은 입니다`BluePrint_<Product-Name>-<CloudFormation-Stack-Name>`.

1. **내역 보기**를 선택합니다.

1. 파이프라인 및 단계 실행의 상태를 봅니다. 상태에 대한 자세한 내용은 CodePipeline 설명서의 [실행 상태 보기를](https://docs.aws.amazon.com/codepipeline/latest/userguide/executions-view.html#pipelines-executions-status-console) 참조하세요.

1. 파이프라인이 실패하면 실패 원인을 검토합니다. 파이프라인에 대한 모니터링을 구성하는 방법에 대한 지침은 CodePipeline 설명서의 [파이프라인 모니터링을](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring.html) 참조하세요. cfn-lint 또는 cfn\_nag 검사로 인해 릴리스 파이프라인이 실패한 경우 템플릿의 오류를 수정합니다. 제품 리포지토리에 또 다른 풀 요청을 제출합니다. 이렇게 하면 릴리스 파이프라인이 다시 시작됩니다. 템플릿 오류 수정에 대한 자세한 내용은이 가이드의 [문제 해결](#using-factory-troubleshooting) 섹션을 참조하세요.

1. 릴리스 파이프라인 상태가가 될 때까지 기다립니다`Succeeded`.

**업데이트를 검증하려면**

1. 조직의 소비자 계정에 로그인합니다.

1. `ServiceCatalogEndUserRole` IAM 역할을 수임합니다.

1. [Service Catalog 콘솔](https://console.aws.amazon.com/servicecatalog/)을 엽니다.

1. 탐색 창에서 **제품**을 선택합니다.

1. 제품 목록에서 새 제품 버전을 사용할 수 있는지 확인합니다.

## 블루프린트 삭제
<a name="using-factory-delete"></a>

제품을 삭제하면 Service Catalog는 제품이 포함된 모든 포트폴리오에서 모든 제품 버전을 제거합니다. 자세한 내용은 Service Catalog 설명서의 [제품 삭제](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/productmgmt-delete.html)를 참조하세요. 블루프린트를 생성할 때 구성 파이프라인 및 릴리스 파이프라인이 수행하는 작업에 대한 자세한 내용은이 가이드의 [블루프린트 삭제](architecture-blueprint-lifecycle.md#architecture-blueprint-lifecycle-delete)를 참조하세요.

**블루프린트를 삭제하려면**

1. 구성 리포지토리에서 **config.yml** 파일을 엽니다.

1. 제품 섹션을 편집하고 삭제하려는 제품을 제거하거나 주석 처리합니다.

1. **config.yml** 파일을 저장하고 닫습니다.

1. 다음 명령을 입력하여 변경 사항을 구성 리포지토리에 병합합니다.

   ```
   cd ServiceCatalog-ConfigRepo
   git add config.yml
   git commit -m "<description of change>"
   git push origin main
   ```

   이 풀 요청을 승인하면 구성 파이프라인이 시작됩니다. 구성 파이프라인은 제품 및 릴리스 파이프라인을 삭제합니다.

1. 제품 리포지토리에서 콘텐츠를 포함하여 제품의 폴더를 삭제합니다.

1. 다음 명령을 입력하여 변경 사항을 제품 리포지토리에 병합합니다.

   ```
   cd ServiceCatalog-BlueprintProductRepo
   git add .
   git commit -m "Delete <file name> blueprint"
   git push origin main
   ```

**삭제를 검증하려면**

1. 조직의 소비자 계정에 로그인합니다.

1. `ServiceCatalogEndUserRole` IAM 역할을 수임합니다.

1. [Service Catalog 콘솔](https://console.aws.amazon.com/servicecatalog/)을 엽니다.

1. 탐색 창에서 **제품**을 선택합니다.

1. 삭제된 제품을 더 이상 사용할 수 없는지 확인합니다.

## 문제 해결
<a name="using-factory-troubleshooting"></a>

블루프린트를 생성하거나 업데이트하면 cfn-lint 및 cfn-nag 도구가 블루프린트를 검증합니다. 릴리스 파이프라인의 검증에 대한 자세한 내용은이 가이드의 [릴리스 파이프라인](architecture-components.md#architecture-release-pipeline)을 참조하세요. 보고된 구문 또는 보안 오류로 인해 파이프라인이 실패합니다. 릴리스 파이프라인을 통해 블루프린트를 성공적으로 배포하려면 블루프린트의 오류를 수정해야 합니다.

다음은 실패와 경고라는 두 가지 보안 관련 오류를 보여주는 출력의 예입니다.

```
BP-SNS.yml
---------------------------------------------------
BP-SNS.yml
---------------------------------------------------
| WARN W47
|
| Resource: ["ExampleTopic"]
| Line numbers: [5]
|
| SNS Topic should specify KmsMasterKeyId property
---------------------------------------------------
| FAIL F18
|
| Resource: ["ExampleTopicPolicy"]
| Line numbers: [10]
|
| SNS topic policy should not allow * principal

Failures count: 1
Warnings count: 1
```

이러한 오류를 수정하려면 블루프린트 파일에서 Amazon Simple Notification Service(Amazon SNS) 주제 정책의 `*` 보안 주체를 바꾸고 AWS Key Management Service (AWS KMS) 키를 주제와 연결합니다. 다음 코드 예제에서는 이러한 업데이트를 보여줍니다.

```
ExampleTopic:
    Type: AWS::SNS::Topic  
    Properties:
      TopicName: ExampleTopic
  ExampleTopicPolicy:
    Type: AWS::SNS::TopicPolicy
    Properties: 
      KmsMasterKeyId: alias/aws/sns  # Added KMS key
      PolicyDocument:
        Id: Id1
        Version: '2012-10-17'
        Statement:
        - Sid: Sid2
          Effect: Allow
          Principal:            
            "Service" : "s3.amazonaws.com"  # Replaced "AWS": '*'
          Action: 'sns:Publish'
          Resource: !Ref ExampleTopic
      Topics: 
        - !Ref ExampleTopic
```