元件AWS CloudFormation範例 - AWS Proton

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

元件AWS CloudFormation範例

以下是AWS Proton直接定義的組件以及如何在AWS Proton服務中使用它的完整示例。元件佈建 Amazon Simple Storage Service (Amazon S3) 儲存貯體。服務實例可以引用此存儲桶並使用它。值區名稱是以環境、服務、服務執行個體和元件的名稱為基礎,這表示儲存貯體與元件範本的特定執行個體結合,延伸特定服務執行個體。開發人員可以根據此元件範本建立多個元件,以針對不同的服務執行個體和功能需求佈建 Amazon S3 儲存貯體。

這個範例涵蓋撰寫各種必要的AWS CloudFormation基礎結構做為程式碼 (IaC) 檔案,以及建立必要AWS Identity and Access Management (IAM) 角色。此範例會依擁有人員角色來分組步驟。

管理員步驟

讓開發人員能夠將元件與服務搭配使用
  1. 建立AWS Identity and Access Management (IAM) 角色,將資源範圍縮減直接定義在您環境中執行的元件可佈建的資源。 AWS Proton稍後假定此角色,以便在環境中佈建直接定義的元件。

    這個範例例例如下列政策:

    範例 直接定義的元件角色
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:CancelUpdateStack", "cloudformation:CreateChangeSet", "cloudformation:DeleteChangeSet", "cloudformation:DescribeStacks", "cloudformation:ContinueUpdateRollback", "cloudformation:DetectStackResourceDrift", "cloudformation:DescribeStackResourceDrifts", "cloudformation:DescribeStackEvents", "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:UpdateStack", "cloudformation:DescribeChangeSet", "cloudformation:ExecuteChangeSet", "cloudformation:ListChangeSets", "cloudformation:ListStackResources" ], "Resource": "arn:aws:cloudformation:*:123456789012:stack/AWSProton-*" }, { "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:DeleteBucket", "s3:GetBucket", "iam:CreatePolicy", "iam:DeletePolicy", "iam:GetPolicy", "iam:ListPolicyVersions", "iam:DeletePolicyVersion" ], "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:CalledVia": "cloudformation.amazonaws.com" } } } ] }
  2. 提供您在前一個步驟中建立的角色。在AWS Proton主控台中,在 [設定環境] 頁面上指定元件角色。如果您使用的是AWS Proton APIAWS CLI,或指componentRoleArnCreateEnvironmentUpdateEnvironmentAPI 動作。

  3. 建立服務範本,參照連接至服務執行個體的直接定義元件。

    該示例顯示瞭如何編寫強大的服務模板,如果組件未附加到服務實例,該模板不會中斷。

    範例 服務 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: # ...
  4. 建立將直接定義的元件宣告為受支援的新服務範本次要版本。

    • Amazon S3 中的範本服務包 — 在AWS Proton主控台中,當您建立服務範本版本時,對於支援的元件來源,請選擇直接定義。如果您使用的是AWS Proton APIAWS CLI,或者DIRECTLY_DEFINEDCreateServiceTemplateVersionUpdateServiceTemplateVersionAPI 動作的supportedComponentSources參數中指定。

    • 範本同步 — 提交變更至您的服務範本組合包存放庫,您可在其supported_component_sources:中指定DIRECTLY_DEFINED為主要版本目錄中.template-registration.yaml檔案中的項目。如需有關此檔案的詳細資訊,請參閱同步服務範本

  5. 發佈新的服務範範本範本本本本本本本 如需詳細資訊,請參閱 註冊和發佈範本

  6. 請務必允許使用此服務範本之開發人員的 IAM 角色。proton:CreateComponent

開發人員步

使用直接定義的元件搭配服務執行處理
  1. 建立使用系統管理員透過元件支援建立的服務範本版本的服務。或者,更新其中一個現有的服務執行個體以使用最新的範本版本。

  2. 撰寫佈建 Amazon S3 儲存貯體和相關存取政策的元件 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
  3. 如果您使用的是AWS Proton APIAWS CLI,或者,請為組件編寫資訊清單檔案。

    範例 直接定義的組件清單
    infrastructure: templates: - file: "cloudformation.yaml" rendering_engine: jinja template_language: cloudformation
  4. 建立直接定義的元件。 AWS Proton假設管理員定義用來佈建元件的元件角色。

    在AWS Proton主控台的 [元件] 頁面上,選擇 [建立元件]。對於 「元件」設定,請輸入元件名稱和可選元件描述。在「元件附件」中,選擇「將元件附加至服務執行處理」。 選取您的環境、服務和服務執行個體。針對 [元件來源] AWS CloudFormation,選擇,然後選擇元件 IaC 檔案。

    注意

    您不需要提供資訊清單,主控台會為您建立資訊清單。

    如果您使用的是AWS Proton APIAWS CLI,或使用 CreateComponentAPI 動作。設置一個組件name和可選description。設定environmentNameserviceName、和serviceInstanceName。設置templateSourcemanifest您創建的文件的路徑。

    注意

    當您指定服務和服務執行個體名稱時,指定環境名稱是選擇性的。這兩者的組合在您的AWS帳戶中是唯一的,並且AWS Proton可以從服務實例確定環境。

  5. 更新您的服務實例以重新部署它。 AWS Proton使用轉譯服務執行個體範本中元件的輸出,讓您的應用程式能夠使用該元件佈建的 Amazon S3 儲存貯體。