

サポート終了通知: 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)」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Proton パラメータ
<a name="parameters"></a>

あなたの infrastructure as Code (IaC) ファイルにパラメータを定義して使用すると、ファイルの柔軟性が高まり、再利用可能になります。IaC ファイルでパラメータ値を読み取るには、パラメータ AWS Proton *namespace* のパラメータ名を参照します。 は、リソースのプロビジョニング中に生成されるレンダリングされた IaC ファイルにパラメータ値 AWS Proton を挿入します。 AWS CloudFormation IaC パラメータを処理するために、 は [Jinja](https://jinja.palletsprojects.com/en/2.11.x/) AWS Proton を使用します。Terraform IaC パラメータを処理するために、 は Terraform パラメータ値ファイル AWS Proton を生成し、HCL に組み込まれているパラメータ化機能に依存します。

では[CodeBuild プロビジョニング](ag-works-prov-methods.md#ag-works-prov-methods-codebuild)、コードがインポートできる入力ファイル AWS Proton を生成します。このファイルは、あなたのテンプレートのマニフェスト内のプロパティに応じて、JSON ファイルか HCL ファイルになります。詳細については、「[CodeBuild プロビジョニングパラメータの詳細と例](parameters-codebuild.md)」を参照してください。

あなたの環境、サービス、コンポーネントの IaC ファイルまたはプロビジョニングコードのパラメータは、以下の要件で参照できます。
+ 各パラメータ名の長さが 100 文字を超えてはなりません。
+ パラメータの名前空間とリソース名の組み合わせの長さが、リソース名の文字制限を超えてはなりません。

AWS Proton これらのクォータを超えると、プロビジョニングは失敗します。

## パラメータタイプ
<a name="param-name-types"></a>

以下のパラメータタイプは、 AWS Proton IaC ファイルで参照できます。

**入力パラメータ**  
環境とサービスインスタンスでは、環境やサービステンプレートに関連付けた[スキーマファイル](ag-schema.md)内で定義した入力パラメータを受け取ることができます。リソースの IaC ファイルにあるリソースの入力パラメータを参照できます。コンポーネント IaC ファイルは、コンポーネントがアタッチされているサービスインスタンスの入力パラメータを参照できます。  
AWS Proton は入力パラメータ名をスキーマファイルと照合し、IaC ファイルで参照されているパラメータと照合して、リソースのプロビジョニング中に仕様ファイルで指定した入力値を挿入します。

**出力パラメータ**  
出力は、あなたのどの IaC ファイルでも定義できます。出力には、テンプレートがプロビジョニングするリソースの名前、ID、ARN の場合もあれば、テンプレートの入力の 1 つを渡す方法である場合もあります。これらの出力は、他のリソースの IaC ファイルで参照できます。  
CloudFormation IaC ファイルでは、`Outputs:` ブロック内の出力パラメータを定義します。Terraform IaC ファイルでは、`output` ステートメントを使用して各出力パラメータを定義します。

**リソースパラメータ**  
AWS Proton は自動的に AWS Proton リソースパラメータを作成します。これらのパラメータは、 AWS Proton リソースオブジェクトのプロパティを公開します。リソースパラメータの例は `environment.name` です。

## IaC ファイルでの AWS Proton パラメータの使用
<a name="param-name-spaces"></a>

IaC ファイルでパラメータ値を読み取るには、パラメータ名前空間で AWS Proton パラメータの名前を参照します。 AWS CloudFormation IaC ファイルの場合、*Jinja* 構文を使用し、パラメータを中括弧と引用符のペアで囲みます。

以下の表は、サポートされている各テンプレート言語のリファレンス構文と例です。


| テンプレート言語 | 構文 | 例:「VPC」という名前の環境入力 | 
| --- | --- | --- | 
|  CloudFormation  |  `"{{ parameter-name }}"`  |  `"{{ environment.inputs.VPC }}"`  | 
|  Terraform  |  `var.parameter-name`  |  `var.environment.inputs.VPC` [生成された Terraform 変数定義](ag-infrastructure-tmp-files-terraform.md#compiled-tform)  | 

**注記**  
あなたの IaC ファイル内で [CloudFormation 動的パラメータ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html)を使用する場合、誤解による Jinja エラーを防ぐため、それらを[エスケープ](https://jinja.palletsprojects.com/en/2.11.x/templates/#escaping)する必要があります。詳細については、[トラブルシューティング AWS Proton](ag-troubleshooting.md)を参照してください。

次の表に、すべての AWS Proton リソースパラメータの名前空間名を示します。各テンプレートファイルタイプでは、パラメータ名前空間の異なるサブセットを使用できます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/proton/latest/userguide/parameters.html)

詳細と例については、さまざまなリソースタイプとテンプレート言語の IaC テンプレートファイル内のパラメータに関するサブトピックを参照してください。

**Topics**
+ [パラメータタイプ](#param-name-types)
+ [IaC ファイルでの AWS Proton パラメータの使用](#param-name-spaces)
+ [環境 CloudFormation IaC ファイルパラメータの詳細と例](env-parameters.md)
+ [サービス CloudFormation IaC ファイルパラメータの詳細と例](svc-parameters.md)
+ [コンポーネント CloudFormation IaC ファイルパラメータの詳細と例](comp-parameters.md)
+ [CloudFormation IaC ファイルのパラメータフィルター](parameter-filters.md)
+ [CodeBuild プロビジョニングパラメータの詳細と例](parameters-codebuild.md)
+ [Terraform Infrastructure as Code (IaC) ファイルパラメータの詳細と例](env-parameters-tform.md)

# 環境 CloudFormation IaC ファイルパラメータの詳細と例
<a name="env-parameters"></a>

あなたの環境 infrastructure as code (IaC) ファイルでパラメータを定義し、参照することができます。 AWS Proton パラメータ、パラメータタイプ、パラメータ名前空間、および IaC ファイルでパラメータを使用する方法の詳細については、「」を参照してください[AWS Proton パラメータ](parameters.md)。

## 環境パラメータを定義する
<a name="env-parameters.define"></a>

環境 IaC ファイルの入力パラメータと出力パラメータの両方を定義できます。
+ **入力パラメータ** — あなたの [スキーマファイル](ag-schema.md)に環境入力パラメータを定義します。

  以下に挙げるのは、一般的なユースケースの入力パラメータの例です。
  + VPC CIDR 値
  + ロードバランサーの設定
  + データベース設定
  + ヘルスチェックのタイムアウト

  管理者は[環境を作成する](ag-create-env.md)ときに、入力パラメータの値を指定できます。
  + コンソールを使用して、 AWS Proton が提供するスキーマベースのフォームに入力します。
  + 値が含まれる仕様は CLI で指定します。
+ **出力パラメータ** — あなたの環境 IaC ファイルで環境出力を定義します。その後、他のリソースの IaC ファイルでこれらの出力を参照できます。

## 環境 IaC ファイルのパラメータ値を読み取ります。
<a name="env-parameters.refer"></a>

環境 IaC ファイル内の環境に関連するパラメータは読み取ることができます。パラメータ値を読み取るには、 AWS Proton パラメータ名前空間でパラメータの名前を参照します。
+ **入力パラメータ** — `environment.inputs.input-name` を参照して環境入力値を読み取ります。
+ **リソースパラメータ** – などの名前を参照して AWS Proton リソースパラメータを読み取ります`environment.name`。

**注記**  
他のリソースの出力パラメータは、環境 IaC ファイルでは利用できません。

## 環境とパラメータのあるサービス IaC ファイルの例
<a name="env-parameters.example"></a>

以下の例は、環境 IaC ファイルにおけるパラメータ定義と参照です。以下の例では、次に、環境 IaC ファイルで定義されている環境出力パラメータをサービス IaC ファイルで参照する方法を示します。

**Example 環境 CloudFormation IaC ファイル**  
この例では、以下の点に注意してください。  
+ `environment.inputs.` 名前空間は環境入力パラメータを参照します。
+ Amazon EC2 Systems Manager (SSM) パラメータ `StoreInputValue` は、環境入力を連結します。
+ `MyEnvParameterValue` 出力には、出力パラメータと同じ入力パラメータ連結が表示されます。さらに 3 つの出力パラメータによって、入力パラメータが個別に公開されます。
+ さらに 6 つの出力パラメータで、環境がプロビジョニングするリソースが公開されます。

```
Resources:
  StoreInputValue:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value: "{{ environment.inputs.my_sample_input }} {{ environment.inputs.my_other_sample_input}} {{ environment.inputs.another_optional_input }}"
              # input parameter references

# These output values are available to service infrastructure as code files as outputs, when given the 
# the 'environment.outputs' namespace, for example, service_instance.environment.outputs.ClusterName.
Outputs:
  MyEnvParameterValue:                                        # output definition
    Value: !GetAtt StoreInputValue.Value
  MySampleInputValue:                                         # output definition
    Value: "{{ environment.inputs.my_sample_input }}"         #   input parameter reference
  MyOtherSampleInputValue:                                    # output definition
    Value: "{{ environment.inputs.my_other_sample_input }}"   #   input parameter reference
  AnotherOptionalInputValue:                                  # output definition
    Value: "{{ environment.inputs.another_optional_input }}"  #   input parameter reference
  ClusterName:                                                # output definition
    Description: The name of the ECS cluster
    Value: !Ref 'ECSCluster'                                  #   provisioned resource
  ECSTaskExecutionRole:                                       # output definition
    Description: The ARN of the ECS role
    Value: !GetAtt 'ECSTaskExecutionRole.Arn'                 #   provisioned resource
  VpcId:                                                      # output definition
    Description: The ID of the VPC that this stack is deployed in
    Value: !Ref 'VPC'                                         #   provisioned resource
  PublicSubnetOne:                                            # output definition
    Description: Public subnet one
    Value: !Ref 'PublicSubnetOne'                             #   provisioned resource
  PublicSubnetTwo:                                            # output definition
    Description: Public subnet two
    Value: !Ref 'PublicSubnetTwo'                             #   provisioned resource
  ContainerSecurityGroup:                                     # output definition
    Description: A security group used to allow Fargate containers to receive traffic
    Value: !Ref 'ContainerSecurityGroup'                      #   provisioned resource
```

**Example サービス CloudFormation IaC ファイル**  
`environment.outputs.` 名前空間は、環境 IaC ファイルからの環境出力を参照します。たとえば、名前 `environment.outputs.ClusterName` は `ClusterName` 環境出力パラメータの値を読み取ります。  

```
AWSTemplateFormatVersion: '2010-09-09'
Description: Deploy a service on AWS Fargate, hosted in a public subnet, and accessible via a public load balancer.
Mappings:
  TaskSize:
    x-small:
      cpu: 256
      memory: 512
    small:
      cpu: 512
      memory: 1024
    medium:
      cpu: 1024
      memory: 2048
    large:
      cpu: 2048
      memory: 4096
    x-large:
      cpu: 4096
      memory: 8192
Resources:
  # A log group for storing the stdout logs from this service's containers
  LogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: '{{service_instance.name}}' # resource parameter

  # The task definition. This is a simple metadata description of what
  # container to run, and what resource requirements it has.
  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      Family: '{{service_instance.name}}' # resource parameter
      Cpu: !FindInMap [TaskSize, {{service_instance.inputs.task_size}}, cpu] # input parameter
      Memory: !FindInMap [TaskSize, {{service_instance.inputs.task_size}}, memory] 
      NetworkMode: awsvpc
      RequiresCompatibilities:
        - FARGATE
      ExecutionRoleArn: '{{environment.outputs.ECSTaskExecutionRole}}'  # output reference to an environment infrastructure code file
      TaskRoleArn: !Ref "AWS::NoValue"
      ContainerDefinitions:
        - Name: '{{service_instance.name}}'  # resource parameter
          Cpu: !FindInMap [TaskSize, {{service_instance.inputs.task_size}}, cpu]
          Memory: !FindInMap [TaskSize, {{service_instance.inputs.task_size}}, memory]
          Image: '{{service_instance.inputs.image}}'
          PortMappings:
            - ContainerPort: '{{service_instance.inputs.port}}' # input parameter
          LogConfiguration:
            LogDriver: 'awslogs'
            Options:
              awslogs-group: '{{service_instance.name}}' # resource parameter
              awslogs-region: !Ref 'AWS::Region'
              awslogs-stream-prefix: '{{service_instance.name}}' # resource parameter

  # The service_instance. The service is a resource which allows you to run multiple
  # copies of a type of task, and gather up their logs and metrics, as well
  # as monitor the number of running tasks and replace any that have crashed
  Service:
    Type: AWS::ECS::Service
    DependsOn: LoadBalancerRule
    Properties:
      ServiceName: '{{service_instance.name}}'  # resource parameter
      Cluster: '{{environment.outputs.ClusterName}}' # output reference to an environment infrastructure as code file
      LaunchType: FARGATE
      DeploymentConfiguration:
        MaximumPercent: 200
        MinimumHealthyPercent: 75
      DesiredCount: '{{service_instance.inputs.desired_count}}'# input parameter
      NetworkConfiguration:
        AwsvpcConfiguration:
          AssignPublicIp: ENABLED
          SecurityGroups:
            - '{{environment.outputs.ContainerSecurityGroup}}' # output reference to an environment infrastructure as code file
          Subnets:
            - '{{environment.outputs.PublicSubnetOne}}' # output reference to an environment infrastructure as code file
            - '{{environment.outputs.PublicSubnetTwo}}' # output reference to an environment infrastructure as code file
      TaskDefinition: !Ref 'TaskDefinition'
      LoadBalancers:
        - ContainerName: '{{service_instance.name}}'  # resource parameter
          ContainerPort: '{{service_instance.inputs.port}}' # input parameter
          TargetGroupArn: !Ref 'TargetGroup'
[...]
```

# サービス CloudFormation IaC ファイルパラメータの詳細と例
<a name="svc-parameters"></a>

パラメータは、あなたのサービスとパイプラインの Infrastructure as Code (IaC)ファイルで定義し、参照することができます。パラメータ、パラメータタイプ、 AWS Proton パラメータ名前空間、およびあなたの IaC ファイル内のパラメータの使用方法の詳細については、[AWS Proton パラメータ](parameters.md) を参照してください。

## サービスパラメータを定義する
<a name="svc-parameters.define"></a>

サービス IaC ファイルには、入力パラメータと出力パラメータの両方を定義できます。
+ **入力パラメータ** — サービスインスタンスの入力パラメータをあなたの[スキーマファイル](ag-schema.md)に定義します。

  以下に挙げるのは、一般的なユースケースのサービス入力パラメータの例です。
  + ポート
  + タスクサイズ
  + イメージ
  + 必要数
  + Docker ファイル
  + ユニットテストコマンド

  [サービスを作成する](ag-create-svc.md)ときに、入力パラメータの値を指定できます。
  + コンソールを使用して、 AWS Proton が提供するスキーマベースのフォームに入力します。
  + 値を含む仕様を CLI で指定します。
+ **出力パラメータ** — あなたのサービス IaC ファイル内のサービスインスタンス出力を定義します。その後、他のリソースの IaC ファイルでこれらの出力を参照できます。

## サービス IaC ファイル内のパラメータ値を読み取ります。
<a name="svc-parameters.refer"></a>

サービス IaC ファイル内のサービスや他のリソースに関連するパラメータを読み取ることができます。パラメータ値を読み取るには、パラメータ名前空間で AWS Proton パラメータの名前を参照します。
+ **入力パラメータ** — `service_instance.inputs.input-name` を参照してサービスインスタンスの入力値を読み込む。
+ **リソースパラメータ** – `service.name`、、 などの名前を参照して`service_instance.name`リソース AWS Proton パラメータを読み取ります`environment.name`。
+ **出力パラメータ** — `environment.outputs.output-name` または `service_instance.components.default.outputs.output-name` を参照して他のリソースの出力を読み取ります。

## パラメータのあるサービス IaC ファイルの例
<a name="svc-parameters.example"></a>

次の例は、サービス CloudFormation IaC ファイルからのスニペットです。`environment.outputs.` 名前空間は、環境 IaC ファイルからの出力を参照します。`service_instance.inputs.` 名前空間はサービスインスタンスの入力パラメータを参照します。`service_instance.name` プロパティは、 AWS Proton リソースパラメータを参照します。

```
Resources:
  StoreServiceInstanceInputValue:
    Type: AWS::SSM::Parameter
    Properties:
      Type: String
      Value: "{{ service.name }} {{ service_instance.name }} {{ service_instance.inputs.my_sample_service_instance_required_input }} {{ service_instance.inputs.my_sample_service_instance_optional_input }} {{ environment.outputs.MySampleInputValue }} {{ environment.outputs.MyOtherSampleInputValue }}"
              #  resource parameter references               # input parameter references                                                                                                                    # output references to an environment infrastructure as code file
Outputs:
  MyServiceInstanceParameter:                                                         # output definition
    Value: !Ref StoreServiceInstanceInputValue 
  MyServiceInstanceRequiredInputValue:                                                # output definition
    Value: "{{ service_instance.inputs.my_sample_service_instance_required_input }}"  # input parameter reference
  MyServiceInstanceOptionalInputValue:                                                # output definition
    Value: "{{ service_instance.inputs.my_sample_service_instance_optional_input }}"  # input parameter reference
  MyServiceInstancesEnvironmentSampleOutputValue:                                     # output definition
    Value: "{{ environment.outputs.MySampleInputValue }}"                             # output reference to an environment IaC file
  MyServiceInstancesEnvironmentOtherSampleOutputValue:                                # output definition
    Value: "{{ environment.outputs.MyOtherSampleInputValue }}"                        # output reference to an environment IaC file
```

# コンポーネント CloudFormation IaC ファイルパラメータの詳細と例
<a name="comp-parameters"></a>

あなたのコンポーネント infrastructure as code (IaC)ファイルで、パラメータを定義して参照することができます。 AWS Proton パラメータ、パラメータタイプ、パラメータ名前空間、および IaC ファイルでパラメータを使用する方法の詳細については、「」を参照してください[AWS Proton パラメータ](parameters.md)。コンポーネントの詳細については、「[AWS Proton コンポーネント](ag-components.md)」を参照してください。

## コンポーネントの出力パラメータを定義します。
<a name="comp-parameters.define"></a>

出力パラメータは、あなたのコンポーネント IaC ファイルで定義できます。その後、これらの出力をサービス IaC ファイルで参照できます。

**注記**  
コンポーネント IaC ファイルには入力を定義できません。アタッチされたコンポーネントは、アタッチ先のサービスインスタンスから入力を取得できます。デタッチされたコンポーネントには入力がありません。

## コンポーネント IaC ファイルのパラメータ値を読み取る
<a name="comp-parameters.refer"></a>

コンポーネント IaC ファイル内のコンポーネントや他のリソースに関連するパラメータを読み取ることができます。パラメータ値を読み取るには、パラメータ名前空間で AWS Proton パラメータの名前を参照します。
+ **入力パラメータ** — `service_instance.inputs.input-name` を参照して、アタッチされたサービスインスタンス入力値を読み込みます。
+ **リソースパラメータ** – 、`component.name`、`service.name`、 などの名前を参照して`service_instance.name`リソース AWS Proton パラメータを読み取ります`environment.name`。
+ **出力パラメータ** — `environment.outputs.output-name` を参照して環境出力を読み取ります。

## パラメータを含むコンポーネントとサービス IaC ファイルの例
<a name="comp-parameters.example"></a>

次の例では、Amazon Simple Storage Service (Amazon S3) バケットと関連するアクセスポリシーをプロビジョニングし、両方のリソースの Amazon リソースネーム (ARN) をコンポーネント出力として公開するコンポーネントを示します。コンポーネント出力をコンテナで実行しているコードで利用できるように、サービス IaC テンプレートは、Amazon Elastic Container Service (Amazon ECS) タスクのコンテナ環境変数として追加し、バケットアクセスポリシーをタスクのロールに追加します。バケット名は環境、サービス、サービスインスタンス、およびコンポーネントの名前に基づいています。言い換えると、バケットはコンポーネントテンプレートの特定のインスタンスと結合して特定のサービスインスタンスを拡張します。開発者は、このコンポーネントテンプレートに基づいて複数のカスタムコンポーネントを作成し、さまざまなサービスインスタンスや機能上のニーズに合わせて Amazon S3 バケットをプロビジョニングできます。

この例では、Jinja `{{ ... }}` 構文で、あなたのサービス IaC ファイル内のコンポーネントやその他のリソースパラメータを参照する方法を示します。`{% if ... %}` ステートメントでステートメントのブロックを追加できるのは、コンポーネントがサービスインスタンスにアタッチされている場合のみです。`proton_cfn_*` キーワードは、出力パラメータ値のサニタイズやフォーマットに使用できる*フィルター*です。フィルターの詳細については、「[CloudFormation IaC ファイルのパラメータフィルター](parameter-filters.md)」を参照してください。

 管理者としてのあなたは、サービス IaC テンプレートファイルをオーサリングします。

**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:
      # ...
```

開発者としてのあなたは、コンポーネント 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
```

がサービスインスタンスの CloudFormation テンプレートを AWS Proton レンダリングし、すべてのパラメータを実際の値に置き換えると、テンプレートは次のファイルのようになります。

**Example サービスインスタンス CloudFormation でレンダリングした IaC ファイル**  

```
Resources: 
  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      TaskRoleArn: !Ref TaskRole
      ContainerDefinitions:
        - Name: '{{service_instance.name}}'
          # ...
          Environment:
            - Name: BucketName
              Value: arn:aws:s3:us-east-1:123456789012:environment_name-service_name-service_instance_name-component_name
            - Name: BucketAccessPolicyArn
              Value: arn:aws:iam::123456789012:policy/cfn-generated-policy-name
  # ...

  TaskRole:
    Type: AWS::IAM::Role
    Properties:
      # ...
      ManagedPolicyArns:
        - !Ref BaseTaskRoleManagedPolicy
        - arn:aws:iam::123456789012:policy/cfn-generated-policy-name

  # Basic permissions for the task
  BaseTaskRoleManagedPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      # ...
```

# CloudFormation IaC ファイルのパラメータフィルター
<a name="parameter-filters"></a>

 AWS CloudFormation IaC ファイル内の[AWS Proton パラメータ](parameters.md)を参照するときは、*フィルター*と呼ばれる Jinja 修飾子を使用して、レンダリングされたテンプレートに挿入される前にパラメータ値を検証、フィルタリング、フォーマットできます。コンポーネントの作成とアタッチは開発者が行いますが、サービスインスタンステンプレートでコンポーネント出力を使用する管理者はその存在と有効性を検証することがあるため、フィルター検証機能は[コンポーネント](ag-components.md)出力パラメータを参照するときに特に便利です。ただし、フィルターは、どの Jinja IaC ファイルでも使用できます。

以下のセクションでは、使用可能なパラメータフィルターについて説明および定義し、これらのフィルターのほとんどを examples. AWS Proton defines で定義します。`default` フィルターは Jinja の組み込みフィルターです。

## Amazon ECS タスク用の環境プロパティをフォーマットする
<a name="parameter-filters.proton.cfn-ecs"></a>

**宣言**

```
dict → proton_cfn_ecs_task_definition_formatted_env_vars (raw: boolean = True) → YAML list of dicts
```

**説明**

このフィルターは、Amazon Elastic Container Service (Amazon ECS) タスク定義の `ContainerDefinition` セクションにある[環境プロパティ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-taskdefinition-containerdefinitions.html#cfn-ecs-taskdefinition-containerdefinition-environment)で使用される出力のリストをフォーマットします。

`raw` を `False` に設定すると、パラメータ値も検証されます。この場合、値は正規表現 `^[a-zA-Z0-9_-]*$` と一致させる必要があります。値がこの検証に失敗すると、テンプレートのレンダリングは失敗します。

### 例
<a name="parameter-filters.proton.cfn-ecs.example"></a>

以下のカスタムコンポーネントテンプレートを使用します。

```
Resources:
  # ...
Outputs:
  Output1:
    Description: "Example component output 1"
    Value: hello
  Output2:
    Description: "Example component output 2"
    Value: world
```

そして、以下のサービステンプレート:

```
Resources:
  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      # ...
      ContainerDefinitions:
        - Name: MyServiceName
          # ...
          Environment:
            {{ service_instance.components.default.outputs
              | proton_cfn_ecs_task_definition_formatted_env_vars }}
```

レンダリングされたサービステンプレートは以下のとおりです。

```
Resources:
  TaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      # ...
      ContainerDefinitions:
        - Name: MyServiceName
          # ...
          Environment:
            - Name: Output1
              Value: hello
            - Name: Output2
              Value: world
```

## Lambda 関数のフォーマット環境プロパティ
<a name="parameter-filters.proton.cfn-lambda"></a>

**宣言**

```
dict → proton_cfn_lambda_function_formatted_env_vars (raw: boolean = True) → YAML dict
```

**説明**

このフィルターは、 AWS Lambda 関数定義の `Properties`セクションの[環境プロパティ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html#cfn-lambda-function-environment)で使用される出力のリストをフォーマットします。

`raw` を `False` に設定すると、パラメータ値も検証されます。この場合、値は正規表現 `^[a-zA-Z0-9_-]*$` と一致させる必要があります。値がこの検証に失敗すると、テンプレートのレンダリングは失敗します。

### 例
<a name="parameter-filters.proton.cfn-lambda.example"></a>

以下のカスタムコンポーネントテンプレートを使用します。

```
Resources:
  # ...
Outputs:
  Output1:
    Description: "Example component output 1"
    Value: hello
  Output2:
    Description: "Example component output 2"
    Value: world
```

そして、以下のサービステンプレート:

```
Resources:
  Lambda:
    Type: AWS::Lambda::Function
    Properties:
      Environment:
        Variables:
          {{ service_instance.components.default.outputs
            | proton_cfn_lambda_function_formatted_env_vars }}
```

レンダリングされたサービステンプレートは以下のとおりです。

```
Resources:
  Lambda:
    Type: AWS::Lambda::Function
    Properties:
      Environment:
        Variables:
          Output1: hello
          Output2: world
```

## IAM ポリシー ARN を抽出して IAM ロールに含める
<a name="parameter-filters.proton.cfn-policy-arns"></a>

**宣言**

```
dict → proton_cfn_iam_policy_arns → YAML list
```

**説明**

このフィルターは、 AWS Identity and Access Management (IAM) ロール定義の `Properties`セクションの [ManagedPolicyArns プロパティ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html#cfn-iam-role-managepolicyarns)で使用される出力のリストをフォーマットします。フィルターは正規表現を使用して、`^arn:[a-zA-Z-]+:iam::\d{12}:policy/` 出力パラメータのリストから有効な IAM ポリシー ARN を抽出します。このフィルターを使用して、出力パラメータ値のポリシーをサービステンプレートの IAM ロール定義に追加できます。

### 例
<a name="parameter-filters.proton.cfn-policy-arns.example"></a>

以下のカスタムコンポーネントテンプレートを使用します。

```
Resources:
  # ...
  ExamplePolicy1:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      # ...
  ExamplePolicy2:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      # ...

  # ...

Outputs:
  Output1:
    Description: "Example component output 1"
    Value: hello
  Output2:
    Description: "Example component output 2"
    Value: world
  PolicyArn1:
    Description: "ARN of policy 1"
    Value: !Ref ExamplePolicy1
  PolicyArn2:
    Description: "ARN of policy 2"
    Value: !Ref ExamplePolicy2
```

そして、以下のサービステンプレート:

```
Resources: 

  # ...

  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:
      # ...
```

レンダリングされたサービステンプレートは以下のとおりです。

```
Resources: 

  # ...

  TaskRole:
    Type: AWS::IAM::Role
    Properties:
      # ...
      ManagedPolicyArns:
        - !Ref BaseTaskRoleManagedPolicy
        - arn:aws:iam::123456789012:policy/cfn-generated-policy-name-1
        - arn:aws:iam::123456789012:policy/cfn-generated-policy-name-2

  # Basic permissions for the task
  BaseTaskRoleManagedPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      # ...
```

## プロパティ値をサニタイズする
<a name="parameter-filters.proton.cfn-sanitize"></a>

**宣言**

```
string → proton_cfn_sanitize → string
```

**説明**

これは汎用フィルターです。これを使用してパラメータ値の安全性を検証します。フィルターは、値が正規表現 `^[a-zA-Z0-9_-]*$` と一致するか、有効な Amazon リソースネーム (ARN) であるかを検証します。値がこの検証に合格しなければ、テンプレートのレンダリングは失敗します。

### 例
<a name="parameter-filters.proton.cfn-sanitize.example"></a>

以下のカスタムコンポーネントテンプレートを使用:

```
Resources:
  # ...
Outputs:
  Output1:
    Description: "Example of valid output"
    Value: "This-is_valid_37"
  Output2:
    Description: "Example incorrect output"
    Value: "this::is::incorrect"
  SomeArn:
    Description: "Example ARN"
    Value: arn:aws:some-service::123456789012:some-resource/resource-name
```
+ サービステンプレート内の以下のリファレンス:

  ```
  # ...
    {{ service_instance.components.default.outputs.Output1
      | proton_cfn_sanitize }}
  ```

  以下のようにレンダリングされます: 

  ```
  # ...
    This-is_valid_37
  ```
+ サービステンプレート内の以下のリファレンス:

  ```
  # ...
    {{ service_instance.components.default.outputs.Output2
      | proton_cfn_sanitize }}
  ```

  その結果、次のレンダリングエラーが発生します。

  ```
  Illegal character(s) detected in "this::is::incorrect". Must match regex ^[a-zA-Z0-9_-]*$ or be a valid ARN
  ```
+ サービステンプレート内の以下のリファレンス:

  ```
  # ...
    {{ service_instance.components.default.outputs.SomeArn
      | proton_cfn_sanitize }}
  ```

  以下のようにレンダリングされます。

  ```
  # ...
    arn:aws:some-service::123456789012:some-resource/resource-name
  ```

## 存在しない参照にはデフォルト値を指定します。
<a name="parameter-filters.proton.default"></a>

**説明**

名前空間参照が存在しない場合、`default` フィルターはデフォルト値を提供します。デフォルト値を使えば、参照するパラメータが欠落していても問題なくレンダリングできる堅牢なテンプレートを作成できます。

### 例
<a name="parameter-filters.default.example"></a>

サービスインスタンスに直接定義された (デフォルト) コンポーネントがアタッチされていない場合や、アタッチされたコンポーネントに `test` という名前の出力がない場合、サービステンプレート内の次の参照によってテンプレートのレンダリングが失敗します。

```
# ...
  {{ service_instance.components.default.outputs.test }}
```

この問題を回避するには、`default` フィルターを追加してください。

```
# ...
  {{ service_instance.components.default.outputs.test | default("[optional-value]") }}
```

# CodeBuild プロビジョニングパラメータの詳細と例
<a name="parameters-codebuild"></a>

CodeBuild ベースの AWS Proton リソースのテンプレートでパラメータを定義し、プロビジョニングコードでこれらのパラメータを参照できます。 AWS Proton パラメータ、パラメータタイプ、パラメータ名前空間、および IaC ファイルでパラメータを使用する方法の詳細については、「」を参照してください[AWS Proton パラメータ](parameters.md)。

**注記**  
CodeBuild プロビジョニングは環境とサービスで使用できます。現時点では、この方法でコンポーネントをプロビジョニングすることはできません。

## 入力パラメータ
<a name="parameters-codebuild.input"></a>

環境やサービスなどの AWS Proton リソースを作成するときは、テンプレートの[スキーマファイル](ag-schema.md)で定義されている入力パラメータの値を指定します。作成したリソースが を使用する場合[CodeBuild プロビジョニング](ag-works-prov-methods.md#ag-works-prov-methods-codebuild)、 はこれらの入力値を入力ファイルに AWS Proton レンダリングします。あなたのプロビジョニングコードでは、このファイルからパラメータ値をインポートして取得できます。

CodeBuild テンプレートの例については、「[CodeBuild プロビジョニングテンプレートバンドル](ag-infrastructure-tmp-files-codebuild.md)」を参照してください。マニフェストファイルについて詳しくは、「[のテンプレートファイルをまとめる AWS Proton](ag-wrap-up.md)」を参照してください。

次の例は、CodeBuild ベースのサービスインスタンスのプロビジョニング中に生成される JSON 入力ファイルです。

### 例: CodeBuild プロビジョニング AWS CDK で を使用する
<a name="parameters-codebuild.example"></a>

```
{
  "service_instance": {
    "name": "my-service-staging",
    "inputs": {
      "port": "8080",
      "task_size": "medium"
    }
  },
  "service": {
    "name": "my-service"
  },
  "environment": {
    "account_id": "123456789012",
    "name": "my-env-staging",
    "outputs": {
      "vpc-id": "hdh2323423"
    }
  }
}
```

## 出力パラメータ
<a name="parameters-codebuild.output"></a>

リソースプロビジョニング出力を に伝達するために AWS Proton、プロビジョニングコードは、テンプレートのスキーマファイルで定義された出力パラメータの値`proton-outputs.json`を持つ という名前の JSON ファイルを生成できます。 [スキーマファイル](ag-schema.md)たとえば、 `cdk deploy` コマンドには、プロビジョニング出力を含む JSON ファイルを生成する AWS CDK ように に指示する `--outputs-file`引数があります。リソースが を使用している場合は AWS CDK、CodeBuild テンプレートマニフェストで次のコマンドを指定します。

```
aws proton notify-resource-deployment-status-change
```

AWS Proton はこの JSON ファイルを検索します。プロビジョニングコードが正常に完了した後に ファイルが存在する場合、 はそのファイルから出力パラメータ値を AWS Proton 読み取ります。

# Terraform Infrastructure as Code (IaC) ファイルパラメータの詳細と例
<a name="env-parameters-tform"></a>

Terraform の入力変数は、あなたのテンプレートバンドル内の `variable.tf` ファイルに含めることができます。スキーマを作成して、スキーマファイルから管理変数を作成 AWS Proton することもできます。 AWS Proton は、スキーマファイル`.tf files`から変数を作成します。詳細については、「[Terraform IaC ファイル](ag-infrastructure-tmp-files-terraform.md)」を参照してください。

インフラストラクチャ でスキーマ定義 AWS Proton 変数を参照するには`.tf files`、Terraform IaC のパラメータと AWS Proton 名前空間 テーブルに示されている名前空間を使用します。 * IaC* たとえば、`var.environment.inputs.vpc_cidr` を使用できます。引用符の中で、これらの変数を単一角括弧で囲み、先頭の中括弧の前にドル記号を追加します (たとえば、`“${var.environment.inputs.vpc_cidr}”`)。

次の例は、名前空間を使用して環境 に AWS Proton パラメータを含める方法を示しています`.tf file`。

```
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
  // This tells terraform to store the state file in s3 at the location
  // s3://terraform-state-bucket/tf-os-sample/terraform.tfstate
  backend "s3" {
    bucket = "terraform-state-bucket"
    key    = "tf-os-sample/terraform.tfstate"
    region = "us-east-1"
  }
}

// Configure the AWS Provider
provider "aws" {
  region = "us-east-1"
  default_tags {
    tags = var.proton_tags
  }
}

resource "aws_ssm_parameter" "my_ssm_parameter" {
  name  = "my_ssm_parameter"
  type  = "String"
  // Use the Proton environment.inputs. namespace
  value = var.environment.inputs.ssm_parameter_value
}
```