本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
元件AWS CloudFormation範例
以下是AWS Proton直接定義的組件以及如何在AWS Proton服務中使用它的完整示例。元件佈建 Amazon Simple Storage Service (Amazon S3) 儲存貯體。服務實例可以引用此存儲桶並使用它。值區名稱是以環境、服務、服務執行個體和元件的名稱為基礎,這表示儲存貯體與元件範本的特定執行個體結合,延伸特定服務執行個體。開發人員可以根據此元件範本建立多個元件,以針對不同的服務執行個體和功能需求佈建 Amazon S3 儲存貯體。
這個範例涵蓋撰寫各種必要的AWS CloudFormation基礎結構做為程式碼 (IaC) 檔案,以及建立必要AWS Identity and Access Management (IAM) 角色。此範例會依擁有人員角色來分組步驟。
管理員步驟
讓開發人員能夠將元件與服務搭配使用
-
建立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" } } } ] } -
提供您在前一個步驟中建立的角色。在AWS Proton主控台中,在 [設定環境] 頁面上指定元件角色。如果您使用的是AWS Proton APIAWS CLI,或指
componentRoleArn
定CreateEnvironment或 UpdateEnvironmentAPI 動作。 -
建立服務範本,參照連接至服務執行個體的直接定義元件。
該示例顯示瞭如何編寫強大的服務模板,如果組件未附加到服務實例,該模板不會中斷。
範例 服務 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: # ...
-
建立將直接定義的元件宣告為受支援的新服務範本次要版本。
-
Amazon S3 中的範本服務包 — 在AWS Proton主控台中,當您建立服務範本版本時,對於支援的元件來源,請選擇直接定義。如果您使用的是AWS Proton APIAWS CLI,或者
DIRECTLY_DEFINED
在CreateServiceTemplateVersion或 UpdateServiceTemplateVersionAPI 動作的supportedComponentSources
參數中指定。 -
範本同步 — 提交變更至您的服務範本組合包存放庫,您可在其
supported_component_sources:
中指定DIRECTLY_DEFINED
為主要版本目錄中.template-registration.yaml
檔案中的項目。如需有關此檔案的詳細資訊,請參閱同步服務範本。
-
-
發佈新的服務範範本範本本本本本本本 如需詳細資訊,請參閱 註冊和發佈範本。
-
請務必允許使用此服務範本之開發人員的 IAM 角色。
proton:CreateComponent
開發人員步
使用直接定義的元件搭配服務執行處理
-
建立使用系統管理員透過元件支援建立的服務範本版本的服務。或者,更新其中一個現有的服務執行個體以使用最新的範本版本。
-
撰寫佈建 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
-
如果您使用的是AWS Proton APIAWS CLI,或者,請為組件編寫資訊清單檔案。
範例 直接定義的組件清單
infrastructure: templates: - file: "cloudformation.yaml" rendering_engine: jinja template_language: cloudformation
-
建立直接定義的元件。 AWS Proton假設管理員定義用來佈建元件的元件角色。
在AWS Proton主控台的 [元件
] 頁面上,選擇 [建立元件]。對於 「元件」設定,請輸入元件名稱和可選元件描述。在「元件附件」中,選擇「將元件附加至服務執行處理」。 選取您的環境、服務和服務執行個體。針對 [元件來源] AWS CloudFormation,選擇,然後選擇元件 IaC 檔案。 注意
您不需要提供資訊清單,主控台會為您建立資訊清單。
如果您使用的是AWS Proton APIAWS CLI,或使用 CreateComponentAPI 動作。設置一個組件
name
和可選description
。設定environmentName
serviceName
、和serviceInstanceName
。設置templateSource
和manifest
您創建的文件的路徑。注意
當您指定服務和服務執行個體名稱時,指定環境名稱是選擇性的。這兩者的組合在您的AWS帳戶中是唯一的,並且AWS Proton可以從服務實例確定環境。
-
更新您的服務實例以重新部署它。 AWS Proton使用轉譯服務執行個體範本中元件的輸出,讓您的應用程式能夠使用該元件佈建的 Amazon S3 儲存貯體。