

지원 종료 알림: 2026년 10월 7일에 AWS 에 대한 지원이 종료됩니다 AWS Proton. 2026년 10월 7일 이후에는 AWS Proton 콘솔 또는 AWS Proton 리소스에 더 이상 액세스할 수 없습니다. 배포된 인프라는 그대로 유지됩니다. 자세한 내용은 [AWS Proton 서비스 사용 중단 및 마이그레이션 안내서](https://docs.aws.amazon.com/proton/latest/userguide/proton-end-of-support.html)를 참조하세요.

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

# 구성 요소 CloudFormation 예제
<a name="ag-components-example-cfn"></a>

다음은 AWS Proton 직접 정의된 구성 요소의 전체 예제와 AWS Proton 서비스에서 구성 요소를 사용하는 방법입니다. 이 구성 요소는 Amazon Simple Storage Service(S3) 버킷 및 관련 액세스 정책을 프로비저닝합니다. 서비스 인스턴스는 이 버킷을 참조하여 사용할 수 있습니다. 버킷 이름은 환경, 서비스, 서비스 인스턴스 및 구성 요소의 이름을 기반으로 합니다. 즉, 버킷은 특정 서비스 인스턴스를 확장하는 구성 요소 템플릿의 특정 인스턴스와 결합됩니다. 개발자는 이 구성 요소 템플릿을 기반으로 여러 구성 요소를 생성하여 다양한 서비스 인스턴스 및 기능 요구 사항에 맞게 Amazon S3 버킷을 프로비저닝할 수 있습니다.

이 예제에서는 다양한 필수 코드형 CloudFormation 인프라(IaC) 파일을 작성하고 필수 AWS Identity and Access Management (IAM) 역할을 생성하는 방법을 다룹니다. 이 예제에서는 소유자 역할별로 단계를 그룹화합니다.

## 관리자 단계
<a name="ag-components-example-cfn.admin"></a>

**개발자가 서비스와 함께 구성 요소를 사용할 수 있도록 하려면**

1. 환경에서 실행되는 직접 정의된 구성 요소가 프로비저닝할 수 있는 리소스의 범위를 좁히는 AWS Identity and Access Management (IAM) 역할을 생성합니다.는 나중에이 역할을 AWS Proton 수임하여 환경에서 직접 정의된 구성 요소를 프로비저닝합니다.

   이 예시에서는 다음 정책을 사용합니다.  
**Example 직접 정의된 구성 요소 역할**  

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "cloudformation:CancelUpdateStack",
           "cloudformation:CreateChangeSet",
           "cloudformation:DeleteChangeSet",
           "cloudformation:DescribeStacks",
           "cloudformation:ContinueUpdateRollback",
           "cloudformation:DetectStackResourceDrift",
           "cloudformation:DescribeStackResourceDrifts",
           "cloudformation:DescribeStackEvents",
           "cloudformation:CreateStack",
           "cloudformation:DeleteStack",
           "cloudformation:UpdateStack",
           "cloudformation:DescribeChangeSet",
           "cloudformation:ExecuteChangeSet",
           "cloudformation:ListChangeSets",
           "cloudformation:ListStackResources"
         ],
         "Resource": "arn:aws:cloudformation:*:{{123456789012}}:stack/AWSProton-*"
       },
       {
         "Effect": "Allow",
         "Action": [
           "s3:CreateBucket",
           "s3:DeleteBucket",
           "s3:GetBucket*",
           "iam:CreatePolicy",
           "iam:DeletePolicy",
           "iam:GetPolicy",
           "iam:ListPolicyVersions",
           "iam:DeletePolicyVersion"
         ],
         "Resource": "*",
         "Condition": {
           "ForAnyValue:StringEquals": {
             "aws:CalledVia": "cloudformation.amazonaws.com"
           }
         }
       }
     ]
   }
   ```

------

1. 환경을 만들거나 업데이트할 때 이전 단계에서 만든 역할을 입력합니다. AWS Proton 콘솔의 **환경 구성** 페이지에서 **구성 요소 역할을** 지정합니다. AWS Proton API 또는를 사용하는 경우 [CreateEnvironment](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateEnvironment.html) 또는 [UpdateEnvironment](https://docs.aws.amazon.com/proton/latest/APIReference/API_UpdateEnvironment.html) API 작업`componentRoleArn`의를 AWS CLI지정합니다.

1. 서비스 인스턴스에 연결된 직접 정의된 구성 요소를 참조하는 서비스 템플릿을 생성합니다.

   이 예제는 구성 요소가 서비스 인스턴스에 연결되어 있지 않아도 손상되지 않는 강력한 서비스 템플릿을 작성하는 방법을 보여줍니다.  
**Example 컴포넌트를 사용한 서비스 클라우드포메이션 IaC 파일**  

   ```
   # service/instance_infrastructure/cloudformation.yaml
   
   Resources: 
     TaskDefinition:
       Type: AWS::ECS::TaskDefinition
       Properties:
         TaskRoleArn: !Ref TaskRole
         ContainerDefinitions:
           - Name: '{{service_instance.name}}'
             # ...
             {% if service_instance.components.default.outputs | length > 0 %}
             Environment:
               {{ service_instance.components.default.outputs |
                   proton_cfn_ecs_task_definition_formatted_env_vars }}
             {% endif %}
   
     # ...
   
     TaskRole:
       Type: AWS::IAM::Role
       Properties:
         # ...
         ManagedPolicyArns:
           - !Ref BaseTaskRoleManagedPolicy
           {{ service_instance.components.default.outputs
               | proton_cfn_iam_policy_arns }}
   
     # Basic permissions for the task
     BaseTaskRoleManagedPolicy:
       Type: AWS::IAM::ManagedPolicy
       Properties:
         # ...
   ```

1. 직접 정의된 구성 요소를 지원되는 것으로 선언하는 새 서비스 템플릿 마이너 버전을 생성합니다.
   + **Amazon S3의 템플릿 번들** - AWS Proton 콘솔에서 서비스 템플릿 버전을 생성할 때 **지원되는 구성 요소 소스**에서 **직접 정의를** 선택합니다. AWS Proton API 또는를 사용하는 경우 [CreateServiceTemplateVersion](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateServiceTemplateVersion.html) 또는 [UpdateServiceTemplateVersion](https://docs.aws.amazon.com/proton/latest/APIReference/API_UpdateServiceTemplateVersion.html) API 작업의 `supportedComponentSources` 파라미터`DIRECTLY_DEFINED`에를 AWS CLI지정합니다.
   + **템플릿 동기화** - 메이저 버전 디렉터리의 `.template-registration.yaml` 파일에 `supported_component_sources:` 항목으로 `DIRECTLY_DEFINED`를 지정한 서비스 템플릿 번들 리포지토리에 변경 내용을 커밋합니다. 이 파일에 대한 자세한 내용은 [서비스 템플릿 동기화](create-template-sync.md#create-template-sync-service-templates)을 참조합니다.

1. 서비스 템플릿 마이너 버전을 가져올 수 있는 권한을 부여합니다. 자세한 내용은 [템플릿 등록 및 게시](template-create.md)을 참조합니다.

1. 이 서비스 템플릿을 사용하는 개발자의 IAM 역할에서 `proton:CreateComponent`를 허용해야 합니다. 

## 개발자 단계
<a name="ag-components-example-cfn.dev"></a>

**서비스 인스턴스와 함께 직접 정의된 구성 요소를 사용하려면**

1. 관리자가 구성 요소 지원을 받아 만든 서비스 템플릿 버전을 사용하는 서비스를 생성합니다. 또는 기존 서비스 인스턴스 중 하나를 업데이트하여 최신 템플릿 버전을 사용할 수도 있습니다.

1. Amazon S3 버킷 및 관련 액세스 정책을 프로비저닝하고 이러한 리소스를 출력으로 노출하는 구성 요소 IaC 템플릿 파일을 작성하십시오.  
**Example 컴포넌트 CloudFormation IAC 파일**  

   ```
   # cloudformation.yaml
   
   # A component that defines an S3 bucket and a policy for accessing the bucket.
   Resources:
     S3Bucket:
       Type: AWS::S3::Bucket
       Properties:
         BucketName: '{{environment.name}}-{{service.name}}-{{service_instance.name}}-{{component.name}}'
     S3BucketAccessPolicy:
       Type: AWS::IAM::ManagedPolicy
       Properties:
         PolicyDocument:
           Version: "2012-10-17"		 	 	 
           Statement:
             - Effect: Allow
               Action:
                 - 's3:Get*'
                 - 's3:List*'
                 - 's3:PutObject'
               Resource: !GetAtt S3Bucket.Arn
   Outputs:
     BucketName:
       Description: "Bucket to access"
       Value: !GetAtt S3Bucket.Arn
     BucketAccessPolicyArn:
       Value: !Ref S3BucketAccessPolicy
   ```

1.  AWS Proton API 또는를 사용하는 경우 구성 요소에 대한 매니페스트 파일을 AWS CLI작성합니다.  
**Example 직접 정의된 구성 요소 매니페스트**  

   ```
   infrastructure:
     templates:
       - file: "cloudformation.yaml"
         rendering_engine: jinja
         template_language: cloudformation
   ```

1. 직접 정의된 구성 요소를 생성합니다. 관리자가 구성 요소를 프로비저닝하기 위해 정의한 구성 요소 역할을 AWS Proton 가정합니다.

    AWS Proton 콘솔의 [구성 요소](https://console.aws.amazon.com//proton/#/components) 페이지에서 **구성 요소 생성을** 선택합니다. **구성 요소 설정**의 경우 **구성 요소 이름**과 선택적 **구성 요소 설명**을 입력합니다. **구성 요소 연결**의 경우 **서비스 인스턴스에 구성 요소 연결**을 선택합니다. 환경, 서비스, 서비스 인스턴스를 선택합니다. **구성 요소 소스**에서 원하는 **CloudFormation**항목을 선택한 다음 구성 요소 IaC 파일을 선택합니다.
**참고**  
코드에서 직접 SDK의 매니페스트를 제공할 필요가 없습니다.

    AWS Proton API 또는를 사용하는 경우 [CreateComponent](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateComponent.html) API 작업을 AWS CLI사용합니다. 구성 요소를 `name` 설정하고 선택 항목 `description`을 설정합니다. `environmentName`, `serviceName` 및 `serviceInstanceName`를 설정합니다. `templateSource` 및 `manifest`를 생성한 파일의 경로로 설정합니다.
**참고**  
서비스 및 서비스 인스턴스 이름을 지정할 때 환경 이름을 지정하는 것은 선택 사항입니다. 이 두 가지의 조합은 AWS 계정에서 고유하며 서비스 인스턴스에서 환경을 확인할 AWS Proton 수 있습니다.

1. 서비스 인스턴스를 업데이트하여 재배포합니다.는 렌더링된 서비스 인스턴스 템플릿에서 구성 요소의 출력을 AWS Proton 사용하여 애플리케이션이 구성 요소가 프로비저닝한 Amazon S3 버킷을 사용할 수 있도록 합니다.