AWS CloudFormation Esempio 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 CloudFormation Esempio di componente

Ecco un esempio completo di un componente definito AWS Proton direttamente e di come utilizzarlo in un AWS Proton servizio. Il componente fornisce un bucket Amazon Simple Storage Service (Amazon S3) e la relativa politica 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 è associato a un'istanza specifica del modello di componente che estende un'istanza di servizio specifica. Gli sviluppatori possono creare più componenti basati su questo modello di componenti, per fornire bucket Amazon S3 per diverse istanze di servizio ed esigenze funzionali.

L'esempio riguarda la creazione dei vari file Required AWS CloudFormation Infrastructure as Code (IAc) e la creazione di un ruolo richiesto AWS Identity and Access Management (IAM). L'esempio raggruppa i passaggi in base ai ruoli delle persone proprietarie.

Passaggi per amministratori

Per consentire agli sviluppatori di utilizzare i componenti con un servizio
  1. Crea un ruolo AWS Identity and Access Management (IAM) che limiti le risorse che possono essere fornite dai componenti definiti direttamente in esecuzione nel tuo ambiente. AWS Proton assume questo ruolo in un secondo momento per fornire componenti definiti direttamente nell'ambiente.

    Per questo esempio, utilizza la seguente politica:

    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. Nella AWS Proton console, specifica un ruolo Componente nella pagina Configura ambiente. Se stai utilizzando l' AWS Proton API o AWS CLI, specifica le azioni componentRoleArn delle CreateEnvironmento dell'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 affidabile che non si interrompa se un componente non è collegato all'istanza del servizio.

    Esempio file CloudFormation IAc di servizio che utilizza 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 come supportati i componenti definiti direttamente.

    • Pacchetto di modelli in Amazon S3: nella console, quando AWS Proton crei una versione del modello di servizio, per Origini di componenti supportate, scegli Definito direttamente. Se utilizzi l' AWS Proton API o AWS CLI, specifica DIRECTLY_DEFINED nel supportedComponentSources parametro CreateServiceTemplateVersiono nelle azioni UpdateServiceTemplateVersionAPI.

    • Sincronizzazione dei modelli: esegui una modifica supported_component_sources: nell'archivio dei pacchetti di modelli di servizio, dove specifichi DIRECTLY_DEFINED come elemento del .template-registration.yaml file nella directory delle versioni principali. Per ulteriori informazioni su questo file, consulta Modelli di servizio di sincronizzazione.

  5. Pubblica la nuova versione secondaria del modello di servizio. Per ulteriori informazioni, consulta Registra e pubblica modelli.

  6. Assicurati di consentire il proton: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 fornisce un bucket Amazon S3 e una politica di accesso correlata ed espone queste risorse come output.

    Esempio file IAc componente 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. Se stai usando l' AWS Proton API o AWS CLI, scrivi un file manifest per il componente.

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

    Nella AWS Proton console, nella pagina Componenti, scegli Crea componente. Per le impostazioni dei componenti, inserisci un nome del componente e una descrizione opzionale del componente. Per Collegamento del componente, scegli Collega il componente a un'istanza del servizio. Seleziona l'ambiente, il servizio e l'istanza del servizio. Per Component source, scegliete AWS CloudFormation, quindi scegliete il file IAc del componente.

    Nota

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

    Se stai utilizzando l' AWS Proton API oppure AWS CLI, utilizza l'azione CreateComponentAPI. Imposta un componente name e facoltativodescription. Set environmentNameserviceName, eserviceInstanceName. Imposta templateSource e manifest accedi ai percorsi dei file che hai creato.

    Nota

    La specificazione di un nome di ambiente è facoltativa quando si specificano i nomi del servizio e delle istanze del servizio. La combinazione di questi due elementi è univoca nell' AWS account e AWS Proton può determinare l'ambiente a partire dall'istanza del servizio.

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