

サポート終了通知: 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 (Amazon S3) バケットと関連アクセス ポリシーのプロビジョンが行われます。サービスインスタンスはこのバケットを参照して使用できます。バケット名は環境、サービス、サービスインスタンス、およびコンポーネントの名前に基づいています。言い換えると、バケットはコンポーネントテンプレートの特定のインスタンスと結合して、特定のサービスインスタンスを拡張します。開発者は、このコンポーネントテンプレートに基づいて複数のコンポーネントを作成し、さまざまなサービスインスタンスや機能上のニーズに合わせて Amazon S3 バケットをプロビジョニングできます。

この例では、さまざまな必要な CloudFormation Infrastructure as Code (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 または を使用している場合は AWS CLI、[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`の を指定します。

1. サービスインスタンスにアタッチされた、直接定義のコンポーネントを参照するサービステンプレートを作成します。

   この例では、コンポーネントがサービスインスタンスにアタッチされていなくても壊れない堅牢なサービステンプレートを作成する方法を示しています。  
**Example コンポーネントで CloudFormation 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 または を使用している場合は AWS CLI、[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`で を指定します。
   + **テンプレート同期** — メジャーバージョンディレクトリの `.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 つを更新して、最新のテンプレートバージョンを使用します。

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 ファイルを選択します。
**注記**  
マニフェストを作成する必要はありません。コンソールが作成します。

    AWS Proton API または を使用している場合は AWS CLI、[CreateComponent](https://docs.aws.amazon.com/proton/latest/APIReference/API_CreateComponent.html) API アクションを使用します。`name` コンポーネントとオプションの `description` を設定します。`environmentName`、`serviceName`、`serviceInstanceName` を設定します。作成したファイルまでのパスに `templateSource` と `manifest` を設定します。
**注記**  
サービスとサービスインスタンス名を指定するとき、環境名の指定は任意です。これら 2 つの組み合わせは AWS アカウント内で一意であり、サービスインスタンスから環境を判断 AWS Proton できます。

1. サービスインスタンスを更新して再デプロイします。 は、レンダリングされたサービスインスタンステンプレートのコンポーネントからの出力 AWS Proton を使用して、コンポーネントがプロビジョニングした Amazon S3 バケットをアプリケーションが使用できるようにします。