翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
コンポーネント CloudFormation IaC ファイルパラメータの詳細と例
あなたのコンポーネント Infrastructure as Code (IaC)ファイルのパラメータは、コード (IaC) ファイルで定義して参照することができます。 AWS Proton パラメータ、パラメータタイプ、パラメータ名前空間、および IaC ファイルでパラメータを使用する方法の詳細については、「」を参照してくださいAWS Proton パラメータ。コンポーネントの詳細については、「AWS Proton コンポーネント」を参照してください。
コンポーネントの出力パラメータを定義します。
出力パラメータは、あなたのコンポーネント IaC ファイルで定義できます。その後、これらの出力をサービス IaC ファイルで参照できます。
注記
コンポーネント IaC ファイルには入力を定義できません。アタッチされたコンポーネントは、アタッチ先のサービスインスタンスから入力を取得できます。デタッチされたコンポーネントには入力がありません。
コンポーネント IaC ファイルのパラメータ値を読み取る
コンポーネント IaC ファイル内のコンポーネントや他のリソースに関連するパラメータを読み取ることができます。パラメータ値を読み取るには、パラメータ名前空間の AWS Proton パラメータ名を参照します。
-
入力パラメータ —
service_instance.inputs.
を参照して、アタッチされたサービスインスタンス入力値を読み込みます。input-name
-
リソースパラメータ –
component.name
、、service.name
、 などの名前を参照してservice_instance.name
リソース AWS Proton パラメータを読み取りますenvironment.name
。 -
出力パラメータ —
environment.outputs.
を参照して環境出力を読み取ります。output-name
パラメータを含むコンポーネントとサービス IaC ファイルの例
次の例では、Amazon Simple Storage Service (Amazon S3) バケットと関連するアクセスポリシーをプロビジョニングし、両方のリソースの Amazon リソースネーム (ARN) をコンポーネント出力として公開するコンポーネントを示します。コンポーネント出力をコンテナで実行しているコードで利用できるように、サービス IaC テンプレートは、Amazon Elastic Container Service (Amazon ECS) タスクのコンテナ環境変数として追加し、バケットアクセスポリシーをタスクのロールに追加します。バケット名は環境、サービス、サービスインスタンス、およびコンポーネントの名前に基づいています。言い換えると、バケットはコンポーネントテンプレートの特定のインスタンスと結合して特定のサービスインスタンスを拡張します。開発者は、このコンポーネントテンプレートに基づいて複数のカスタムコンポーネントを作成し、さまざまなサービスインスタンスや機能上のニーズに合わせて Amazon S3 バケットをプロビジョニングできます。
この例では、Jinja {{ ... }}
構文で、あなたのサービス IaC ファイル内のコンポーネントやその他のリソースパラメータを参照する方法を示します。{% if ... %}
ステートメントでステートメントのブロックを追加できるのは、コンポーネントがサービスインスタンスにアタッチされている場合のみです。proton_cfn_*
キーワードは、出力パラメータ値のサニタイズやフォーマットに使用できるフィルターです。フィルターの詳細については、「 CloudFormation IaC ファイルのパラメータフィルター」を参照してください。
管理者としてのあなたは、サービス IaC テンプレートファイルをオーサリングします。
例 コンポーネントを使用した サービス 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 テンプレートファイルをオーサリングします。
例 コンポーネント 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
がサービスインスタンスの AWS CloudFormation テンプレートを AWS Proton レンダリングし、すべてのパラメータを実際の値に置き換えると、テンプレートは次のファイルのようになります。
例 サービスインスタンス 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:
# ...