As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
AWS CloudFormation Exemplo de componente
Aqui está um exemplo completo de um componente definido AWS Proton diretamente e como você pode usá-lo em um AWS Proton serviço. O componente diretamente definido provisiona um bucket do Amazon Simple Storage Service (Amazon S3) e uma política de acesso relacionada. A instância de serviço pode se referir a esse bucket e usá-lo. O nome do bucket é baseado nos nomes do ambiente, serviço, instância de serviço e componente, o que significa que o bucket é acoplado a uma instância específica do modelo de componente que estende uma instância de serviço específica. Os desenvolvedores podem criar vários componentes com base nesse modelo de componente para provisionar buckets do Amazon S3 para diferentes instâncias de serviço e necessidades funcionais.
O exemplo abrange a criação das várias AWS CloudFormation infraestruturas necessárias como arquivos de código (IaC) e a criação de uma função necessária AWS Identity and Access Management (IAM). O exemplo agrupa etapas de acordo com os perfis das pessoas proprietárias.
Etapas do administrador
Para permitir que os desenvolvedores usem componentes com um serviço
-
Crie uma função AWS Identity and Access Management (IAM) que defina os recursos que os componentes diretamente definidos em execução em seu ambiente podem provisionar. AWS Proton assume essa função posteriormente para provisionar componentes diretamente definidos no ambiente.
Para este exemplo, use a seguinte política:
exemplo perfil de componente diretamente definido
{ "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" } } } ] } -
Forneça o perfil que você criou na etapa anterior ao criar ou atualizar o ambiente. No AWS Proton console, especifique uma função de componente na página Configurar ambiente. Se você estiver usando a AWS Proton API ou AWS CLI, especifique as ações
componentRoleArn
da CreateEnvironmentou UpdateEnvironmentda API. -
Crie um modelo de serviço que se refira a um componente diretamente definido anexado à instância de serviço.
O exemplo mostra como escrever um modelo de serviço robusto que não falha se um componente não estiver anexado à instância do serviço.
exemplo arquivo CloudFormation IaC de serviço usando um 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: # ...
-
Crie uma nova versão secundária do modelo de serviço que declare os componentes diretamente definidos como compatíveis.
-
Pacote de modelos no Amazon S3 — No AWS Proton console, ao criar uma versão de modelo de serviço, para Fontes de componentes compatíveis, escolha Definido diretamente. Se você estiver usando a AWS Proton API ou AWS CLI, especifique
DIRECTLY_DEFINED
nosupportedComponentSources
parâmetro das ações da UpdateServiceTemplateVersionAPI CreateServiceTemplateVersionou. -
Sincronização de modelos: Confirme uma alteração no repositório do pacote de modelos de serviço, onde você especifica
DIRECTLY_DEFINED
como um itemsupported_component_sources:
no arquivo.template-registration.yaml
no diretório da versão principal. Para obter mais informações sobre esse arquivo, consulte Como sincronizar modelos de serviço.
-
-
Concede permissão para criar uma versão secundária do modelo de serviço. Para obter mais informações, consulte Registre e publique modelos.
-
Certifique-se de permitir no
proton:CreateComponent
o perfil do IAM dos desenvolvedores que usam esse modelo de serviço.
Etapas do desenvolvedor
Para usar um componente definido diretamente com uma instância de serviço
-
Crie um serviço que use a versão do modelo de serviço que o administrador criou com suporte a componentes. Como alternativa, atualize uma de suas instâncias de serviço existentes para usar a versão mais recente do modelo.
-
Escreva um arquivo de modelo de componente IaC que provisione um bucket do Amazon S3 e uma política de acesso relacionada e exponha esses recursos como saídas.
exemplo arquivo CloudFormation IaC do componente
# 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
-
Se você estiver usando a AWS Proton API ou AWS CLI, escreva um arquivo de manifesto para o componente.
exemplo manifesto de componente definido diretamente
infrastructure: templates: - file: "cloudformation.yaml" rendering_engine: jinja template_language: cloudformation
-
Crie um componente definido diretamente. AWS Proton assume a função do componente que o administrador definiu para provisionar o componente.
No AWS Proton console, na página Componentes
, escolha Criar componente. Em Configurações do componente, insira o Nome do componente e opcionalmente uma Descrição do componente. Em Anexação de componente, escolha Anexar o componente a uma instância de serviço. Selecione seu ambiente, serviço e instância de serviço. Em Origem do componente, escolha e AWS CloudFormation, em seguida, escolha o arquivo IaC do componente. nota
Você não precisa fornecer um manifesto — o console cria um para você.
Se você estiver usando a AWS Proton API ou AWS CLI, use a ação CreateComponentda API. Defina um componente
name
e opcionalmentedescription
. DefinirenvironmentName
,serviceName
, eserviceInstanceName
. DefinatemplateSource
emanifest
para os caminhos dos arquivos que você criou.nota
Especificar um nome de ambiente é opcional quando você especifica nomes de serviço e instância de serviço. A combinação desses dois é exclusiva em sua AWS conta e AWS Proton pode determinar o ambiente a partir da instância de serviço.
-
Atualize sua instância de serviço para reimplantá-la. AWS Proton usa saídas do seu componente no modelo de instância de serviço renderizado para permitir que seu aplicativo use o bucket do Amazon S3 que o componente provisionou.