元件 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_instance.nameservice.name和 等名稱讀取 AWS Proton 資源參數environment.name

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

具有參數的元件和服務 IaC 檔案範例

下列範例顯示佈建 Amazon Simple Storage Service (Amazon S3) 儲存貯體和相關存取政策的元件,並將這兩個資源的 Amazon Resource Name (ARNs) 公開為元件輸出。服務 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 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: # ...