元件 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

  • 資源參數— 閱讀AWS Proton通過引用名稱來參考資源參數,例如component.nameservice.nameservice_instance.name,以及environment.name

  • 輸出參數— 通過引用讀取環境輸出environment.outputs.output-name

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

以下範例示範佈建 Amazon Simple Storage Service (Amazon S3) 儲存貯體和相關存取政策的元件,該儲存貯體佈建 Amazon Simple Storage Service (ARN) 做為元件輸出。服務 IaC 範本會將元件輸出新增為 Amazon 彈性容器服務 (Amazon ECS) 任務的容器環境變數,讓輸出可供在容器中執行的程式碼使用,並將儲存貯體存取政策新增至任務的角色。值區名稱是以環境、服務、服務執行個體和元件的名稱為基礎,這表示儲存貯體與元件範本的特定執行個體結合,延伸特定服務執行個體。開發人員可以根據此元件範本建立多個自訂元件,以針對不同的服務執行個體和功能需求佈建 Amazon S3 儲存貯體。

範例示範您如何使用 Jinja{{ ... }}在服務 IaC 文件中引用組件和其他資源參數的語法。您可以使用{% if ... %}陳述式,只有在元件附加至服務執行處理時才新增陳述式區塊。所以此proton_cfn_*關鍵字是過濾器您可以使用它來清理和格式化輸出參數值。如需篩選條件的詳細資訊,請參閱參數篩選器 CloudFormation 合家歡的文件

身為系統管理員,您撰寫服務 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 合家歡文件

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