Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Ejemplo de componente AWS CloudFormation
A continuación, se muestra un ejemplo completo de un componente definido AWS Proton directamente y de cómo se puede utilizar en un AWS Proton servicio. El componente aprovisiona un bucket de Amazon Simple Storage Service (Amazon S3) y una política de acceso relacionada. La instancia de servicio puede hacer referencia a este bucket y utilizarlo. El nombre del bucket se basa en los nombres del entorno, el servicio, la instancia de servicio y el componente, lo que significa que el bucket está asociado a una instancia específica de la plantilla del componente que amplía una instancia de servicio específica. Los desarrolladores pueden crear varios componentes en función de esta plantilla de componentes para aprovisionar buckets de Amazon S3 para distintas instancias de servicio y necesidades funcionales.
El ejemplo describe la creación de las distintas AWS CloudFormation infraestructuras necesarias en forma de archivos de código (IaC) y la creación de un rol obligatorio AWS Identity and Access Management (IAM). El ejemplo agrupa los pasos según los roles de las personas propietarias.
Pasos de administrador
Para permitir a los desarrolladores utilizar componentes con un servicio
-
Cree una función AWS Identity and Access Management (IAM) que abarque los recursos que pueden aprovisionar los componentes definidos directamente que se ejecutan en su entorno. AWS Proton asume esta función más adelante para aprovisionar componentes directamente definidos en el entorno.
Para este ejemplo, utilice la siguiente política:
ejemplo Rol de componente definido directamente
{ "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" } } } ] } -
Proporcione el rol que creó en el paso anterior al crear o actualizar el entorno. En la AWS Proton consola, especifique una función de componente en la página de configuración del entorno. Si utilizas la AWS Proton API o AWS CLI, especifica la CreateEnvironmento las acciones
componentRoleArn
de la UpdateEnvironmentAPI. -
Cree una plantilla de servicio que haga referencia a un componente definido directamente conectado a la instancia de servicio.
El ejemplo muestra cómo escribir una plantilla de servicio sólida que no se rompa si un componente no estuviera conectado a la instancia de servicio.
ejemplo CloudFormation repare el archivo IaC mediante 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: # ...
-
Cree una nueva versión secundaria de la plantilla de servicio que declare compatibles los componentes definidos directamente.
-
Paquete de plantillas en Amazon S3: en la AWS Proton consola, al crear una versión de plantilla de servicio, en Fuentes de componentes compatibles, elija Directly defined. Si utiliza la AWS Proton API o AWS CLI, especifique
DIRECTLY_DEFINED
en elsupportedComponentSources
parámetro de la CreateServiceTemplateVersiono las acciones de la UpdateServiceTemplateVersionAPI. -
Sincronización de plantillas: confirme un cambio en el repositorio del paquete de plantillas de servicio, donde especifique
DIRECTLY_DEFINED
como elemento desupported_component_sources:
en el archivo.template-registration.yaml
del directorio de versiones principales. Para obtener más información acerca de este archivo, consulte Sincronización de plantillas de servicio.
-
-
Publique la nueva versión secundaria de la plantilla de servicio. Para obtener más información, consulte Registro y publicación de plantillas.
-
Asegúrese de permitir el permiso
proton:CreateComponent
en el rol de IAM de los desarrolladores que utilicen esta plantilla de servicio.
Pasos para desarrolladores
Para utilizar un componente definido directamente con una instancia de servicio
-
Cree un servicio que utilice la versión de la plantilla de servicio que el administrador creó con la ayuda de los componentes. Como alternativa, actualice una de sus instancias de servicio existentes para utilizar la última versión de la plantilla.
-
Escriba un archivo de plantilla de IaC de componentes que aprovisione un bucket de Amazon S3 y una política de acceso relacionada y exponga estos recursos como salidas.
ejemplo componente ( CloudFormation archivo 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
-
Si utilizas la AWS Proton API o AWS CLI, escribe un archivo de manifiesto para el componente.
ejemplo manifiesto de componentes definidos directamente
infrastructure: templates: - file: "cloudformation.yaml" rendering_engine: jinja template_language: cloudformation
-
Cree un componente definido directamente. AWS Proton asume la función de componente que el administrador definió para aprovisionar el componente.
En la AWS Proton consola, en la página Componentes
, elija Crear componente. En Configuración de componentes, introduzca un Nombre del componente y una Descripción del componente opcional. En Conexión de componentes, elija Conectar el componente a una instancia de servicio. Seleccione el entorno, el servicio y la instancia de servicio. En Origen del componente, elija AWS CloudFormation y, a continuación, elija el archivo de IaC del componente. nota
No es necesario proporcionar un manifiesto, ya que la consola lo crea automáticamente.
Si usas la AWS Proton API o AWS CLI, usa la acción de la CreateComponentAPI. Establezca el
name
del componente y unadescription
opcional. EstablezcaenvironmentName
,serviceName
yserviceInstanceName
. EstablezcatemplateSource
ymanifest
para las rutas de los archivos que ha creado.nota
La especificación de un nombre de entorno es opcional cuando se especifican los nombres de los servicios y de las instancias de servicio. La combinación de estas dos es única en tu AWS cuenta y AWS Proton puede determinar el entorno a partir de la instancia de servicio.
-
Actualice la instancia de servicio para volver a implementarla. AWS Proton utiliza los resultados de su componente en la plantilla de instancia de servicio renderizada para permitir que su aplicación utilice el bucket de Amazon S3 que el componente aprovisionó.