組件 CloudFormation IaC 文件參數的詳細信息和示例 - AWS Proton

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

組件 CloudFormation IaC 文件參數的詳細信息和示例

您可以將元件基礎結構中的參數定義並參考為程式碼 (IaC) 檔案。如需參數、參數類型、 AWS Proton 參數命名空間以及如何在 IaC 檔案中使用參數的詳細說明,請參閱AWS Proton 參數。如需元件的詳細資訊,請參閱AWS Proton 元件

定義元件輸出參數

您可以在元件 IaC 檔案中定義輸出參數。然後,您可以在服務 IaC 文件中引用這些輸出。

注意

您無法定義元件 IaC 檔案的輸入。連接的組件可以從它們所連接的服務實例獲取輸入。分離的組件沒有輸入。

讀取元件 IaC 檔案中的參數值

您可以在元件 IaC 檔案中讀取與元件和其他資源相關的參數。您可以在參數命名空間中參照參數的名稱來讀取 AWS Proton 參數值。

  • 輸入參數 — 透過參照來讀取附加的服務執行個體輸入值service_instance.inputs.input-name

  • 資源參數 — 藉由參照名稱 (例如component.nameservice.nameservice_instance.name和) 來讀取 AWS Proton 資源參數environment.name

  • 輸出參數 — 透過參考讀取環境輸出environment.outputs.output-name

具有參數的示例組件和服務 IaC 文件

下列範例顯示佈建 Amazon Simple Storage Service (Amazon S3) 貯體和相關存取政策的元件,並將兩個資源的 Amazon 資源名稱 (ARN) 公開為元件輸出。服務 IaC 範本會將元件輸出新增為 Amazon 彈性容器服務 (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 Proton 轉譯 AWS CloudFormation 範本,並以實際值取代所有參數時,範本可能看起來像下列檔案。

範例 服務實例 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: # ...