コンポーネントの 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、CreateEnvironment または UpdateEnvironment API アクションcomponentRoleArnの を指定します。

  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 または UpdateServiceTemplateVersion API アクションの supportedComponentSourcesパラメータDIRECTLY_DEFINEDで を指定します。

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

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

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

開発者向けステップ

直接定義のコンポーネントをサービスインスタンスで使用するには
  1. コンポーネントサポートで管理者が作成したサービステンプレートバージョンを使用するサービスを作成します。または、あなたの既存のサービスインスタンスの 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 API または を使用している場合は AWS CLI、コンポーネントのマニフェストファイルを書き込みます。

    例 直接定義のコンポーネントマニフェスト
    infrastructure: templates: - file: "cloudformation.yaml" rendering_engine: jinja template_language: cloudformation
  4. 直接定義されたコンポーネントを作成します。 は、管理者がコンポーネントをプロビジョニングするために定義したコンポーネントロール AWS Proton を引き受けます。

    AWS Proton コンソールのコンポーネントページで、コンポーネントの作成を選択します。[コンポーネント設定] には、[コンポーネント名] と、オプションで [コンポーネントの説明] を入力します。[コンポーネントのアタッチメント] で、[コンポーネントをサービスインスタンスにアタッチ] を選択します。あなたの環境、サービス、サービスインスタンスを選択します。[コンポーネントソース] で、[AWS CloudFormation] を選択し、次にコンポーネント IaC ファイルを選択します。

    注記

    マニフェストを作成する必要はありません。コンソールが作成します。

    AWS Proton API または を使用している場合は AWS CLI、CreateComponent API アクションを使用します。name コンポーネントとオプションの description を設定します。environmentNameserviceNameserviceInstanceName を設定します。作成したファイルまでのパスに templateSourcemanifest を設定します。

    注記

    サービスとサービスインスタンス名を指定するとき、環境名の指定は任意です。これら 2 つの組み合わせは AWS アカウント内で一意であり、サービスインスタンスから環境を判断 AWS Proton できます。

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