コンポーネント CloudFormation IaC ファイルパラメータの詳細と例 - AWS Proton

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

コンポーネント 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: # ...