AWS CloudFormationBeispiel 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 CloudFormationBeispiel für eine Komponente

Hier ist ein vollständiges Beispiel für eineAWS Proton direkt definierte Komponente und wie Sie sie in einemAWS Proton Service verwenden können. Die Komponente stellt einen Amazon-Simple-Storage-Service Simple Storage Service (Amazon S3) -Bucket und die zugehörige Zugriffsrichtlinie bereit. Die Dienstinstanz 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 gekoppelt 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 Erstellen der verschiedenen erforderlichenAWS CloudFormation Infrastructure-as-Code-Dateien (IaC) und das Erstellen einer erforderlichen RolleAWS Identity and Access Management (IAM). Das Beispiel gruppiert die Schritte nach den Rollen der Besitzer.

Administratorschritte

Um Entwicklern die Verwendung von Komponenten mit einem Dienst zu ermöglichen
  1. Erstellen Sie eineAWS Identity and Access Management (IAM-) Rolle, die die Ressourcen einschränkt, 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 Beispiels 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 derAWS Proton Konsole auf der Seite „Umgebung konfigurieren“ eine Komponentenrolle an. Wenn Sie dieAWS Proton API verwenden oderAWS CLI geben SiecomponentRoleArn die CreateEnvironmentoder UpdateEnvironmentAPI-Aktionen an.

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

    Das Beispiel zeigt, wie ein robustes Service-Template geschrieben wird, das nicht kaputt geht, wenn eine Komponente nicht an die Service-Instance angehängt ist.

    Beispiel CloudFormation IAC-Datei mit einer Komponente bedienen
    # 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 Service-Template-Nebenversion, die direkt definierte Komponenten als unterstützt deklariert.

    • Vorlagenpaket in Amazon S3 — Wählen Sie in derAWS Proton Konsole, wenn Sie eine Service-Template-Version erstellen, für Unterstützte Komponentenquellen die Option Direkt definiert aus. Wenn Sie dieAWS Proton API verwenden oderAWS CLI geben SieDIRECTLY_DEFINED imsupportedComponentSources Parameter der CreateServiceTemplateVersionoder UpdateServiceTemplateVersionAPI-Aktionen an.

    • Vorlagensynchronisierung — Übernehmen Sie eine Änderung in Ihr Service Template-Bundle-Repository, das SieDIRECTLY_DEFINED als Element vonsupported_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 Nebenversion der Servicevorlage Weitere Informationen finden Sie unter Vorlagen registrieren und veröffentlichen.

  6. Stellen Sie sicher, dass Entwickler, die dieses Service-Template verwenden, die IAM-Rolle übernehmen.proton:CreateComponent

Schritte für Entwickler

Um eine direkt definierte Komponente mit einer Dienstinstanz zu verwenden
  1. Erstellen Sie einen Dienst, der die Dienstvorlagenversion verwendet, die der Administrator mit Komponentenunterstützung erstellt hat. Alternativ können Sie eine Ihrer vorhandenen Service-Instanzen 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 CloudFormation Komponenten-IAC-Datei
    # 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 dieAWS Proton API verwenden oderAWS 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übernimmt die Komponentenrolle, die der Administrator für die Bereitstellung der Komponente definiert hat.

    Wählen Sie in derAWS Proton Konsole auf der Seite Komponenten die Option Komponente erstellen aus. Geben Sie für Komponenteneinstellungen einen Komponentennamen und eine optionale Komponentenbeschreibung ein. Wählen Sie für Komponentenanhang die Option Komponente an eine Dienstinstanz anhängen aus. Wählen Sie Ihre Umgebung, Ihren Dienst und Ihre Dienstinstanz aus. Wählen Sie als Komponentenquelle die Komponenten-IAC-Datei aus AWS CloudFormation, und wählen Sie dann aus.

    Anmerkung

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

    Wenn Sie dieAWS Proton API oder verwendenAWS CLI, verwenden Sie die CreateComponentAPI-Aktion. Stellen Sie eine Komponentename und optional eindescription. SetenvironmentNameserviceName, undserviceInstanceName. Legen SietemplateSourcemanifest die Pfade der von Ihnen erstellten Dateien fest.

    Anmerkung

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

  5. Aktualisieren Sie Ihre Service-Instance, um sie erneut bereitzustellen. AWS Protonverwendet Ausgaben Ihrer Komponente in der Vorlage für gerenderte Service-Instances, damit Ihre Anwendung den Amazon S3 S3-Bucket verwenden kann, den die Komponente bereitgestellt hat.