

Pemberitahuan akhir dukungan: Pada 7 Oktober 2026, AWS akan mengakhiri dukungan untuk AWS Proton. Setelah 7 Oktober 2026, Anda tidak akan lagi dapat mengakses AWS Proton konsol atau AWS Proton sumber daya. Infrastruktur yang Anda gunakan akan tetap utuh. Untuk informasi selengkapnya, lihat Panduan [AWS Proton Pengakhiran Layanan dan Migrasi](https://docs.aws.amazon.com/proton/latest/userguide/proton-end-of-support.html).

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# CloudFormation Contoh komponen
<a name="ag-components-example-cfn"></a>

Berikut adalah contoh lengkap dari komponen yang didefinisikan AWS Proton secara langsung dan bagaimana Anda dapat menggunakannya dalam suatu AWS Proton layanan. Komponen ini menyediakan bucket Amazon Simple Storage Service (Amazon S3) dan kebijakan akses terkait. Instance layanan dapat merujuk ke bucket ini dan menggunakannya. Nama bucket didasarkan pada nama lingkungan, layanan, instance layanan, dan komponen, yang berarti bahwa bucket digabungkan dengan instance spesifik dari template komponen yang memperluas instance layanan tertentu. Pengembang dapat membuat beberapa komponen berdasarkan templat komponen ini, untuk menyediakan bucket Amazon S3 untuk berbagai instans layanan dan kebutuhan fungsional.

Contoh ini mencakup penulisan berbagai CloudFormation infrastruktur yang diperlukan sebagai file kode (IAc) dan membuat peran yang diperlukan AWS Identity and Access Management (IAM). Contoh mengelompokkan langkah-langkah dengan peran orang yang memiliki.

## Langkah-langkah administrator
<a name="ag-components-example-cfn.admin"></a>

**Untuk memungkinkan pengembang menggunakan komponen dengan layanan**

1. Buat peran AWS Identity and Access Management (IAM) yang mencakup sumber daya yang secara langsung mendefinisikan komponen yang berjalan di lingkungan Anda dapat menyediakan. AWS Proton mengasumsikan peran ini nanti untuk menyediakan komponen yang didefinisikan secara langsung di lingkungan.

   Untuk contoh ini, gunakan kebijakan berikut:  
**Example peran komponen yang didefinisikan secara langsung**  

------
#### [ 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. Berikan peran yang Anda buat pada langkah sebelumnya saat Anda membuat atau memperbarui lingkungan. Di AWS Proton konsol, tentukan **peran Komponen** pada halaman **Konfigurasi lingkungan**. Jika Anda menggunakan AWS Proton API atau AWS CLI, tentukan `componentRoleArn` tindakan [CreateEnvironment](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateEnvironment.html)atau [UpdateEnvironment](https://docs.aws.amazon.com/proton/latest/APIReference/API_UpdateEnvironment.html)API.

1. Buat template layanan yang mengacu pada komponen yang didefinisikan secara langsung yang dilampirkan ke instance layanan.

   Contoh menunjukkan cara menulis template layanan yang kuat yang tidak rusak jika komponen tidak dilampirkan ke instance layanan.  
**Example layanan file CloudFormation iAc menggunakan komponen**  

   ```
   # 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. Buat versi minor template layanan baru yang mendeklarasikan komponen yang didefinisikan secara langsung sebagai didukung.
   + **Bundel templat di Amazon S3** — Di AWS Proton konsol, saat Anda membuat versi templat layanan, untuk **sumber komponen yang didukung**, pilih Ditentukan **secara langsung**. Jika Anda menggunakan AWS Proton API atau AWS CLI, tentukan `DIRECTLY_DEFINED` dalam `supportedComponentSources` parameter tindakan [CreateServiceTemplateVersion](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateServiceTemplateVersion.html)atau [UpdateServiceTemplateVersion](https://docs.aws.amazon.com/proton/latest/APIReference/API_UpdateServiceTemplateVersion.html)API.
   + **Sinkronisasi templat** — Komit perubahan ke repositori bundel templat layanan Anda, tempat Anda menentukan `DIRECTLY_DEFINED` sebagai item `supported_component_sources:` dalam `.template-registration.yaml` file di direktori versi utama. Untuk informasi selengkapnya tentang file ini, lihat[Menyinkronkan templat layanan](create-template-sync.md#create-template-sync-service-templates).

1. Publikasikan template layanan baru versi minor. Untuk informasi selengkapnya, lihat [Daftarkan dan terbitkan templat](template-create.md).

1. Pastikan untuk mengizinkan peran IAM pengembang yang menggunakan template layanan ini. `proton:CreateComponent`

## Langkah-langkah pengembang
<a name="ag-components-example-cfn.dev"></a>

**Untuk menggunakan komponen yang didefinisikan secara langsung dengan instance layanan**

1. Buat layanan yang menggunakan versi template layanan yang dibuat administrator dengan dukungan komponen. Atau, perbarui salah satu instance layanan Anda yang ada untuk menggunakan versi template terbaru.

1. Tulis file template komponen iAc yang menyediakan bucket Amazon S3 dan kebijakan akses terkait dan mengekspos sumber daya ini sebagai output.  
**Example file komponen 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. Jika Anda menggunakan AWS Proton API atau AWS CLI, tulis file manifes untuk komponen tersebut.  
**Example manifes komponen yang didefinisikan secara langsung**  

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

1. Buat komponen yang didefinisikan secara langsung. AWS Proton mengasumsikan peran komponen yang didefinisikan administrator untuk menyediakan komponen.

   Di AWS Proton konsol, pada halaman [Components](https://console.aws.amazon.com//proton/#/components), pilih **Create component**. Untuk **pengaturan Komponen**, masukkan **nama Komponen** dan **deskripsi Komponen** opsional. Untuk **lampiran Komponen**, pilih **Lampirkan komponen ke instance layanan.** Pilih contoh lingkungan, layanan, dan layanan Anda. Untuk **sumber Komponen**, pilih **CloudFormation**, lalu pilih file komponen IAc.
**catatan**  
Anda tidak perlu menyediakan manifes—konsol membuatnya untuk Anda.

   Jika Anda menggunakan AWS Proton API atau AWS CLI, gunakan tindakan [CreateComponent](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateComponent.html)API. Tetapkan komponen `name` dan opsional`description`. Set`environmentName`,`serviceName`, dan`serviceInstanceName`. Atur `templateSource` dan `manifest` ke jalur file yang Anda buat.
**catatan**  
Menentukan nama lingkungan adalah opsional saat Anda menentukan nama instance layanan dan layanan. Kombinasi keduanya unik di AWS akun Anda, dan AWS Proton dapat menentukan lingkungan dari instance layanan.

1. Perbarui instance layanan Anda untuk menerapkannya kembali. AWS Proton menggunakan output dari komponen Anda dalam template instance layanan yang dirender, untuk memungkinkan aplikasi Anda menggunakan bucket Amazon S3 yang disediakan komponen tersebut.