View a markdown version of this page

Composant CloudFormation exemple - AWS Proton

Avis de fin de support : le 7 octobre 2026, AWS le support pour AWS Proton. Après le 7 octobre 2026, vous ne pourrez plus accéder à la AWS Proton console ni aux AWS Proton ressources. Votre infrastructure déployée restera intacte. Pour plus d'informations, consultez le Guide AWS Proton de dépréciation et de migration des services.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Composant CloudFormation exemple

Voici un exemple complet d'un composant AWS Proton directement défini et de la manière dont vous pouvez l'utiliser dans un AWS Proton service. Le composant fournit un compartiment Amazon Simple Storage Service (Amazon S3) et une politique d'accès associée. L'instance de service peut faire référence à ce compartiment et l'utiliser. Le nom du compartiment est basé sur les noms de l'environnement, du service, de l'instance de service et du composant, ce qui signifie que le compartiment est couplé à une instance spécifique du modèle de composant étendant une instance de service spécifique. Les développeurs peuvent créer plusieurs composants sur la base de ce modèle de composant, afin de provisionner des compartiments Amazon S3 pour différentes instances de service et besoins fonctionnels.

L'exemple couvre la création des différents fichiers d' CloudFormation infrastructure requis sous forme de code (IaC) et la création d'un rôle obligatoire Gestion des identités et des accès AWS (IAM). L'exemple regroupe les étapes en fonction des rôles des personnes propriétaires.

Étapes de l'administrateur

Pour permettre aux développeurs d'utiliser des composants avec un service
  1. Créez un rôle Gestion des identités et des accès AWS (IAM) qui délimite les ressources que les composants définis directement s'exécutant dans votre environnement peuvent mettre à disposition. AWS Proton assume ce rôle ultérieurement pour provisionner des composants directement définis dans l'environnement.

    Pour cet exemple, utilisez la politique suivante :

    Exemple rôle du composant directement défini
    JSON
    { "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. Indiquez le rôle que vous avez créé à l'étape précédente lorsque vous créez ou mettez à jour l'environnement. Dans la AWS Proton console, spécifiez un rôle de composant sur la page Configurer l'environnement. Si vous utilisez l' AWS Proton API ou AWS CLI, spécifiez l'une CreateEnvironment ou l'componentRoleArnautre des actions de UpdateEnvironment l'API.

  3. Créez un modèle de service qui fait référence à un composant directement défini attaché à l'instance de service.

    L'exemple montre comment écrire un modèle de service robuste qui ne se casse pas si aucun composant n'est attaché à l'instance de service.

    Exemple fichier CloudFormation IaC de service utilisant un composant
    # 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. Créez une nouvelle version mineure du modèle de service qui déclare les composants directement définis comme étant pris en charge.

    • Ensemble de modèles dans Amazon S3 — Dans la AWS Proton console, lorsque vous créez une version de modèle de service, pour Sources de composants prises en charge, sélectionnez Défini directement. Si vous utilisez l' AWS Proton API ou AWS CLI, spécifiez DIRECTLY_DEFINED dans le supportedComponentSources paramètre des actions CreateServiceTemplateVersion ou UpdateServiceTemplateVersion API.

    • Synchronisation des modèles  : apportez une modification au référentiel de votre bundle de modèles de service, que vous spécifiez DIRECTLY_DEFINED comme élément du supported_component_sources: .template-registration.yaml fichier dans le répertoire des versions principales. Pour plus d’informations sur ce fichier, consultez Modèles de services de synchronisation.

  5. Publiez la version mineure du nouveau modèle de service. Pour de plus amples informations, veuillez consulter Enregistrer et publier des modèles.

  6. Veillez à autoriser les proton:CreateComponent développeurs qui utilisent ce modèle de service à jouer le rôle IAM.

Étapes pour les développeurs

Pour utiliser un composant directement défini avec une instance de service
  1. Créez un service qui utilise la version du modèle de service créée par l'administrateur avec la prise en charge des composants. Vous pouvez également mettre à jour l'une de vos instances de service existantes pour utiliser la dernière version du modèle.

  2. Écrivez un fichier modèle IaC de composant qui fournit un compartiment Amazon S3 et une politique d'accès associée et expose ces ressources sous forme de sorties.

    Exemple fichier CloudFormation IaC du composant
    # 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. Si vous utilisez l' AWS Proton API ou AWS CLIécrivez un fichier manifeste pour le composant.

    Exemple manifeste de composants défini directement
    infrastructure: templates: - file: "cloudformation.yaml" rendering_engine: jinja template_language: cloudformation
  4. Créez un composant directement défini. AWS Proton assume le rôle de composant que l'administrateur a défini pour provisionner le composant.

    Dans la AWS Proton console, sur la page Composants, choisissez Créer un composant. Pour les paramètres du composant, entrez un nom de composant et une description du composant (facultatif). Pour Attacher un composant, choisissez Attacher le composant à une instance de service. Sélectionnez votre environnement, votre service et votre instance de service. Pour Source du composant, choisissez CloudFormation, puis choisissez le fichier IaC du composant.

    Note

    Vous n'avez pas besoin de fournir de manifeste : la console en crée un pour vous.

    Si vous utilisez l' AWS Proton API ou AWS CLI utilisez l'action CreateComponent API. Définissez un composant name et optionneldescription. Réglez environmentNameserviceName, etserviceInstanceName. Définissez templateSource et manifest vers les chemins des fichiers que vous avez créés.

    Note

    La spécification d'un nom d'environnement est facultative lorsque vous spécifiez des noms de service et d'instance de service. La combinaison de ces deux éléments est unique dans votre AWS compte et AWS Proton peut déterminer l'environnement à partir de l'instance de service.

  5. Mettez à jour votre instance de service pour la redéployer. AWS Proton utilise les sorties de votre composant dans le modèle d'instance de service rendu, pour permettre à votre application d'utiliser le compartiment Amazon S3 que le composant a provisionné.