本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
元件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 ProtonAPI 或AWS 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 ProtonAPI 或AWS CLI,指定
DIRECTLY_DEFINED
中的supportedComponentSources
的參數CreateServiceTemplateVersion或者UpdateServiceTemplateVersionAPI 動作。 -
範本同步— 將變更提交至您指定的服務範本包儲存庫
DIRECTLY_DEFINED
作為項目supported_component_sources:
中的.template-registration.yaml
主要版本目錄中的文件。如需有關此檔案的詳細資訊,請參閱同步服務範本。
-
-
發佈新的服務範本次要版本。如需詳細資訊,請參閱 註冊和發佈範本。
-
請務必允許
proton:CreateComopnent
在使用此服務模板的開發人員的 IAM 角色中。
開發人員步驟
使用直接定義的元件搭配服務執行處理
-
建立使用系統管理員透過元件支援建立的服務範本版本的服務。或者,更新其中一個現有的服務執行個體以使用最新的範本版本。
-
撰寫佈建 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
-
如果您使用的是AWS ProtonAPI 或AWS CLI」中,寫入元件的資訊清單檔案。
範例 直接定義的組件清單
infrastructure: templates: - file: "cloudformation.yaml" rendering_engine: jinja template_language: cloudformation
-
建立直接定義的元件。AWS Proton假設管理員定義用來佈建元件的元件角色。
在 中AWS Proton主控台,元件
((頁面上的名稱建立元件。適用於元件設定,輸入元件名稱和一個可選的元件描述。適用於元件配件,選擇將元件附加至服務執行個體。選取您的環境、服務和服務執行個體。適用於元件原始碼,選擇AWS CloudFormation,然後選擇元件 IaC 檔案。 注意 您不需要提供資訊清單,主控台會為您建立資訊清單。
如果您使用AWS ProtonAPI 或AWS CLI,使用CreateComponentAPI 動作。設定元件
name
和可選description
。設定environmentName
、serviceName
,以及serviceInstanceName
。設定templateSource
和manifest
到您創建的文件的路徑。注意 當您指定服務和服務執行個體名稱時,指定環境名稱是選擇性的。這兩者的組合是獨一無二的AWS帳戶,以及AWS Proton可以從服務實例確定環境。
-
更新您的服務實例以重新部署它。AWS Proton使用轉譯服務執行個體範本中元件的輸出,讓您的應用程式能夠使用該元件佈建的 Amazon S3 儲存貯體。