AWS CloudFormation Beispiel für eine Komponente - AWS Proton

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

AWS CloudFormation Beispiel für eine Komponente

Hier ist ein vollständiges Beispiel für eine AWS Proton direkt definierte Komponente und wie Sie sie in einem AWS Proton Dienst verwenden können. Die Komponente stellt einen Amazon Simple Storage Service (Amazon S3) -Bucket und die zugehörige Zugriffsrichtlinie bereit. Die Service-Instance kann auf diesen Bucket verweisen und ihn verwenden. Der Bucket-Name basiert auf den Namen der Umgebung, des Dienstes, der Dienstinstanz und der Komponente, was bedeutet, dass der Bucket mit einer bestimmten Instanz der Komponentenvorlage verknüpft ist, die eine bestimmte Dienstinstanz erweitert. Entwickler können auf der Grundlage dieser Komponentenvorlage mehrere Komponenten erstellen, um Amazon S3 S3-Buckets für unterschiedliche Service-Instances und funktionale Anforderungen bereitzustellen.

Das Beispiel behandelt das Verfassen der verschiedenen erforderlichen IaC-Dateien ( AWS CloudFormation Infrastructure as Code) und das Erstellen einer erforderlichen Rolle AWS Identity and Access Management (IAM). Das Beispiel gruppiert die Schritte nach den Rollen, denen sie gehören.

Schritte des Administrators

Um Entwicklern die Verwendung von Komponenten mit einem Dienst zu ermöglichen
  1. Erstellen Sie eine AWS Identity and Access Management (IAM-) Rolle, die den Umfang der Ressourcen abgrenzt, die direkt definierte Komponenten, die in Ihrer Umgebung ausgeführt werden, bereitstellen können. AWS Proton übernimmt diese Rolle später, um direkt definierte Komponenten in der Umgebung bereitzustellen.

    Verwenden Sie für dieses Beispiel die folgende Richtlinie:

    Beispiel direkt definierte Komponentenrolle
    { "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. Geben Sie die Rolle an, die Sie im vorherigen Schritt erstellt haben, wenn Sie die Umgebung erstellen oder aktualisieren. Geben Sie in der AWS Proton Konsole auf der Seite „Umgebung konfigurieren“ eine Komponentenrolle an. Wenn Sie die AWS Proton API oder verwenden AWS CLI, geben Sie die componentRoleArn der CreateEnvironmentoder UpdateEnvironmentAPI-Aktionen an.

  3. Erstellen Sie eine Dienstvorlage, die sich auf eine direkt definierte Komponente bezieht, die an die Dienstinstanz angehängt ist.

    Das Beispiel zeigt, wie eine robuste Dienstvorlage geschrieben wird, die nicht kaputt geht, wenn keine Komponente an die Dienstinstanz angehängt ist.

    Beispiel CloudFormation Service-IaC-Datei mithilfe einer Komponente
    # 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. Erstellen Sie eine neue Nebenversion der Dienstvorlage, in der direkt definierte Komponenten als unterstützt deklariert werden.

    • Vorlagenpaket in Amazon S3 — Wenn Sie in der AWS Proton Konsole eine Service-Vorlagenversion erstellen, wählen Sie für Unterstützte Komponentenquellen die Option Direkt definiert aus. Wenn Sie die AWS Proton API oder verwenden AWS CLI, geben Sie DIRECTLY_DEFINED im supportedComponentSources Parameter CreateServiceTemplateVersionoder UpdateServiceTemplateVersionAPI-Aktionen an.

    • Vorlagensynchronisierung — Übernehmen Sie eine Änderung an Ihrem Service-Template-Bundle-Repository, das Sie DIRECTLY_DEFINED als Element supported_component_sources: in der .template-registration.yaml Datei im Hauptversionsverzeichnis angeben. Weitere Informationen über diese Datei finden Sie unter Synchronisieren von Dienstvorlagen.

  5. Veröffentlichen Sie die neue Nebenversion der Service-Vorlage. Weitere Informationen finden Sie unter Vorlagen registrieren und veröffentlichen.

  6. Stellen Sie sicher, dass Sie Entwicklern, die diese Dienstvorlage verwenden, die Rolle proton:CreateComponent in der IAM-Rolle zuweisen.

Schritte für Entwickler

Um eine direkt definierte Komponente mit einer Dienstinstanz zu verwenden
  1. Erstellen Sie einen Dienst, der die Version der Dienstvorlage verwendet, die der Administrator mit Komponentenunterstützung erstellt hat. Sie können auch eine Ihrer vorhandenen Dienstinstanzen aktualisieren, um die neueste Vorlagenversion zu verwenden.

  2. Schreiben Sie eine IaC-Vorlagendatei für Komponenten, die einen Amazon S3 S3-Bucket und eine zugehörige Zugriffsrichtlinie bereitstellt und diese Ressourcen als Ausgaben bereitstellt.

    Beispiel Komponenten-IaC-Datei 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. Wenn Sie die AWS Proton API oder verwenden AWS CLI, schreiben Sie eine Manifestdatei für die Komponente.

    Beispiel direkt definiertes Komponentenmanifest
    infrastructure: templates: - file: "cloudformation.yaml" rendering_engine: jinja template_language: cloudformation
  4. Erstellen Sie eine direkt definierte Komponente. AWS Proton nimmt die Komponentenrolle an, die der Administrator für die Bereitstellung der Komponente definiert hat.

    Wählen Sie in der AWS Proton Konsole auf der Seite Komponenten die Option Komponente erstellen aus. Geben Sie unter Komponenteneinstellungen einen Komponentennamen und optional eine Komponentenbeschreibung ein. Wählen Sie für Komponentenanhang die Option Komponente an eine Dienstinstanz anhängen aus. Wählen Sie Ihre Umgebung, Ihren Service und Ihre Dienstinstanz aus. Wählen Sie AWS CloudFormationals Komponentenquelle die Option und anschließend die Komponenten-IaC-Datei aus.

    Anmerkung

    Sie müssen kein Manifest angeben — die Konsole erstellt eines für Sie.

    Wenn Sie die AWS Proton API oder verwenden AWS CLI, verwenden Sie die CreateComponentAPI-Aktion. Legen Sie eine Komponente fest name und sind optionaldescription. Stellen Sie environmentNameserviceName, und einserviceInstanceName. Legen Sie templateSource manifest die Pfade der von Ihnen erstellten Dateien fest.

    Anmerkung

    Die Angabe eines Umgebungsnamens ist optional, wenn Sie Dienst- und Dienstinstanznamen angeben. Die Kombination dieser beiden ist in Ihrem AWS Konto einzigartig und AWS Proton kann die Umgebung anhand der Dienstinstanz bestimmen.

  5. Aktualisieren Sie Ihre Dienstinstanz, um sie erneut bereitzustellen. AWS Proton verwendet Ausgaben Ihrer Komponente in der gerenderten Service-Instance-Vorlage, damit Ihre Anwendung den Amazon S3 S3-Bucket verwenden kann, den die Komponente bereitgestellt hat.