AWS CloudFormationEsempio di componente - AWS Proton

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

AWS CloudFormationEsempio di componente

Ecco un esempio completo di un componente definitoAWS Proton direttamente e di come utilizzarlo in unAWS Proton servizio. Il componente fornisce un bucket Amazon Simple Storage Service (Amazon S3) e la relativa policy di accesso. L'istanza del servizio può fare riferimento a questo bucket e utilizzarlo. Il nome del bucket si basa sui nomi dell'ambiente, del servizio, dell'istanza del servizio e del componente, il che significa che il bucket è accoppiato a un'istanza specifica del modello di componente che estende un'istanza di servizio specifica. Gli sviluppatori possono creare più componenti in base a questo modello di componenti, per fornire bucket Amazon S3 per diverse istanze di servizio ed esigenze funzionali.

L'esempio riguarda la creazione delle varieAWS CloudFormation infrastrutture richieste come file di codice (iAC) e la creazione di un ruolo richiestoAWS Identity and Access Management (IAM). L'esempio raggruppa i passaggi in base ai ruoli delle persone proprietarie.

Passaggi dell'amministratore

Per consentire agli sviluppatori di utilizzare componenti con un servizio
  1. Crea un ruoloAWS Identity and Access Management (IAM) che analizzi le risorse che possono fornire i componenti definiti direttamente in esecuzione nel tuo ambiente. AWS Protonassume questo ruolo in seguito per fornire componenti definiti direttamente nell'ambiente.

    Per questo esempio, utilizzare la seguente policy:

    Esempio ruolo del componente definito direttamente
    { "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. Fornisci il ruolo creato nel passaggio precedente quando crei o aggiorni l'ambiente. NellaAWS Proton console, specificare un ruolo del componente nella pagina Configura ambiente. Se stai usando l'AWS ProtonAPI oppureAWS CLI, specifica le azionicomponentRoleArn delle CreateEnvironmento UpdateEnvironmentAPI.

  3. Crea un modello di servizio che faccia riferimento a un componente definito direttamente collegato all'istanza del servizio.

    L'esempio mostra come scrivere un modello di servizio robusto che non si interrompa se un componente non è collegato all'istanza del servizio.

    Esempio file CloudFormation IAC di servizio utilizzando un componente
    # 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. Crea una nuova versione secondaria del modello di servizio che dichiari che i componenti definiti direttamente sono supportati.

    • Pacchetto di modelli in Amazon S3: nellaAWS Proton console, quando crei una versione modello di servizio, per Origini di componenti supportate, scegli Definito direttamente. Se stai usando l'AWS ProtonAPI oppureAWS CLI, specificaDIRECTLY_DEFINED nelsupportedComponentSources parametro delle azioni dell'UpdateServiceTemplateVersionAPI CreateServiceTemplateVersionor.

    • Sincronizzazione dei modelli: apporta una modifica al repository del pacchetto di modelli di servizi, da specificareDIRECTLY_DEFINED come elemento delsupported_component_sources:.template-registration.yaml file nella directory delle versioni principali. Per ulteriori informazioni su questo file, consulta Modelli di servizio di sincronizzazione.

  5. Pubblicare la versione secondaria del nuovo modello di servizio. Per ulteriori informazioni, consulta Registrazione e pubblicazione di modelli.

  6. Assicurati di accettare ilproton:CreateComponent ruolo IAM degli sviluppatori che utilizzano questo modello di servizio.

Passaggi per gli sviluppatori

Per utilizzare un componente definito direttamente con un'istanza di servizio
  1. Crea un servizio che utilizzi la versione del modello di servizio creata dall'amministratore con il supporto dei componenti. In alternativa, aggiorna una delle istanze del servizio esistenti per utilizzare la versione più recente del modello.

  2. Scrivi un file modello IaC componente che fornisca un bucket Amazon S3 e una relativa politica di accesso ed esponga queste risorse come output.

    Esempio componente CloudFormation : file 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. Se stai usando l'AWS ProtonAPI oAWS CLI scrivi un file manifest per il componente.

    Esempio manifesto dei componenti definito direttamente
    infrastructure: templates: - file: "cloudformation.yaml" rendering_engine: jinja template_language: cloudformation
  4. Crea un componente definito direttamente. AWS Protonassume il ruolo del componente definito dall'amministratore per fornire il componente.

    NellaAWS Proton console, nella pagina Componenti, scegli Crea componente. Per le impostazioni dei componenti, inserite un nome del componente e una descrizione opzionale del componente. Per Allegato al componente, scegli Collega il componente a un'istanza di servizio. Seleziona l'ambiente, il servizio e l'istanza del servizio. Per Origine del componente AWS CloudFormation, scegliete e quindi scegliete il file iAC del componente.

    Nota

    Non è necessario fornire un manifesto: la console ne crea uno per te.

    Se stai usando l'AWS ProtonAPI oppureAWS CLI, usa l'azione CreateComponentAPI. Imposta un componentename e facoltativodescription. SetenvironmentNameserviceName, eserviceInstanceName. ImpostatemplateSource emanifest ai percorsi dei file che hai creato.

    Nota

    La specificazione del nome di un ambiente è facoltativa quando si specificano i nomi dei servizi e delle istanze del servizio. La combinazione di questi due elementi è unica nel tuoAWS account eAWS Proton può determinare l'ambiente dall'istanza del servizio.

  5. Aggiorna l'istanza del servizio per ridistribuirla. AWS Protonutilizza gli output del componente nel modello di istanza del servizio renderizzato, per consentire all'applicazione di utilizzare il bucket Amazon S3 fornito dal componente.