元件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 ProtonAPI 或AWS CLI」中,指定componentRoleArnCreateEnvironment或者UpdateEnvironmentAPI 動作。

  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 ProtonAPI 或AWS CLI,指定DIRECTLY_DEFINED中的supportedComponentSources的參數CreateServiceTemplateVersion或者UpdateServiceTemplateVersionAPI 動作。

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

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

  6. 請務必允許proton:CreateComopnent在使用此服務模板的開發人員的 IAM 角色中。

開發人員步驟

使用直接定義的元件搭配服務執行處理

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

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

    範例 直接定義的組件清單

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

    在 中AWS Proton主控台,元件((頁面上的名稱建立元件。適用於元件設定,輸入元件名稱和一個可選的元件描述。適用於元件配件,選擇將元件附加至服務執行個體。選取您的環境、服務和服務執行個體。適用於元件原始碼,選擇AWS CloudFormation,然後選擇元件 IaC 檔案。

    注意

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

    如果您使用AWS ProtonAPI 或AWS CLI,使用CreateComponentAPI 動作。設定元件name和可選description。設定environmentNameserviceName,以及serviceInstanceName。設定templateSourcemanifest到您創建的文件的路徑。

    注意

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

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