コンポーネントのAWS CloudFormation例 - AWS Proton

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

コンポーネントのAWS CloudFormation例

ここでは、AWS Proton で直接定義のコンポーネントの例の一式と、それをAWS Proton サービスにおけるその使用方法を示します。コンポーネントによって Amazon Simple Storage Service (Amazon S3) バケットと関連アクセス ポリシーのプロビジョンが行われます。サービスインスタンスはこのバケットを参照して使用できます。バケット名は環境、サービス、サービスインスタンス、およびコンポーネントの名前に基づいています。したがって、バケットは、コンポーネントテンプレートの特定のインスタンスと結び付けられており、特定のサービスインスタンスを拡張します。開発者は、このコンポーネントテンプレートに基づいて複数のコンポーネントを作成し、さまざまなサービスインスタンスや機能上のニーズに合わせて Amazon S3 バケットをプロビジョニングできます。

この例では、必要なさまざまなコードとしての AWS CloudFormation infrastructure as code (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 API または AWS CLI を使用している場合は、componentRoleArnCreateEnvironment または UpdateEnvironment API アクションのいずれかを指定してください。

  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 API または AWS CLI を使用している場合、CreateServiceTemplateVersion API アクションまたは UpdateServiceTemplateVersion API アクションの supportedComponentSources パラメータで DIRECTLY_DEFINEDを指定してください。

    • テンプレート同期 — メジャーバージョンディレクトリの .template-registration.yaml ファイル内の supported_component_sources: 項目として DIRECTLY_DEFINED を指定して、あなたのサービステンプレートバンドルリポジトリに変更をコミットします。ファイルの詳細については、「サービステンプレートを同期する」を参照してください。

  5. 新規サービステンプレートのマイナーバージョンをパブリッシュする 詳細については、「テンプレートを登録してパブリッシュする」を参照してください。

  6. このサービステンプレートを使用する開発者の IAM ロールで、必ず proton:CreateComponent を許可してください。

開発者向けステップ

直接定義のコンポーネントをサービスインスタンスで使用するには
  1. コンポーネントサポートで管理者が作成したサービステンプレートバージョンを使用するサービスを作成します。または、あなたの既存のサービスインスタンスの 1 つを更新して、最新のテンプレートバージョンを使用します。

  2. Amazon S3 バケットと関連するアクセスポリシーをプロビジョニングし、これらのリソースを出力として公開するコンポーネント IaC テンプレートファイルを作成します。

    例 2: 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 API や 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 を使用している場合は、CreateComponent API アクションを使用してください。name コンポーネントとオプションの description を設定します。environmentNameserviceNameserviceInstanceName を設定します。作成したファイルまでのパスに templateSourcemanifest を設定します。

    注記

    サービスとサービスインスタンス名を指定するとき、環境名の指定は任意です。この 2 つの組み合わせは、あなたの AWS アカウントごとに異なり、AWS Proton はサービスインスタンスから環境を決定できます。

  5. あなたのサービスインスタンスを更新して再デプロイしてください。AWS Proton では、コンポーネントによってプロビジョニングされた Amazon S3 バケットをあなたのアプリケーションで使用できるように、レンダリングされたサービスインスタンステンプレートのあなたのコンポーネントの出力を使用します。