Como posso usar uma importação de recursos do CloudFormation para criar uma configuração de notificação do Amazon S3 para o Lambda em um bucket do S3 existente?
Quero criar uma configuração de notificação do Amazon Simple Storage Service (Amazon S3) para o AWS Lambda em um bucket do S3 existente. Quero fazer isso usando o AWS CloudFormation para importar um recurso.
Breve descrição
Para configurar uma notificação do Amazon S3 sem usar um recurso personalizado, faça o seguinte:
- Crie um modelo com a função do Lambda S3NotificationLambdaFunction. Essa função adiciona a configuração de notificação existente do bucket NotificationS3Bucket.
- Use uma importação de recursos para colocar o bucket do S3 NotificationS3Bucket existente, especificado no modelo, para o gerenciamento do CloudFormation.
- Atualize a pilha do CloudFormation para incluir as propriedades que você deseja ativar em seu bucket do S3.
Para usar um recurso personalizado, consulte Como posso usar o CloudFormation para criar uma configuração de notificação do Amazon S3 para o Lambda em um bucket S3 existente?
Resolução
**Importante:**as etapas a seguir substituem todas as configurações de notificação existentes ou criadas manualmente em um bucket do S3. Siga estas etapas para adicionar uma nova configuração de notificação a um bucket importado do S3.
Crie um modelo do CloudFormation com uma função Lambda
O modelo de exemplo a seguir cria uma função Lambda com uma função em execução e permissões para invocar a função. Para usar uma função Lambda existente, use o Amazon Resource Name (ARN) da função em seu modelo do CloudFormation para a propriedade LambdaConfiguration no bucket do S3.
AWSTemplateFormatVersion: 2010-09-09 Description: >- Sample template that shows you how to import an existing S3 bucket as an event source for a Lambda function Parameters: NotificationBucket: Type: String Description: S3 bucket that's used for Lambda event notification Resources: S3NotificationLambdaFunction: Type: 'AWS::Lambda::Function' Properties: Code: ZipFile: !Join - |+ - - import json - 'def lambda_handler(event,context):' - ' return ''Welcome... This is a test Lambda Function''' Handler: index.lambda_handler Role: !GetAtt LambdaIAMRole.Arn Runtime: python3.6 Timeout: 5 LambdaInvokePermission: Type: 'AWS::Lambda::Permission' Properties: FunctionName: !GetAtt S3NotificationLambdaFunction.Arn Action: 'lambda:InvokeFunction' Principal: s3.amazonaws.com SourceAccount: !Ref 'AWS::AccountId' SourceArn: !Sub 'arn:aws:s3:::${NotificationBucket}' LambdaIAMRole: Type: 'AWS::IAM::Role' Properties: AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: - 'sts:AssumeRole' Path: / Policies: - PolicyName: root PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - 's3:GetBucketNotification' - 's3:PutBucketNotification' Resource: !Sub 'arn:aws:s3:::${NotificationBucket}' - Effect: Allow Action: - 'logs:CreateLogGroup' - 'logs:CreateLogStream' - 'logs:PutLogEvents' Resource: 'arn:aws:logs:*:*:*'
Importe um bucket do S3 existente para sua pilha do CloudFormation
1.Abra o console do AWS CloudFormation.
2.No painel de navegação, escolha Pilha e selecione a pilha que você criou.
3.Escolha Ações de pilha e, em seguida, escolha Importar recursos para a pilha.
4.Examine a página Visão geral da importação e escolha Avançar.
**Importante:**No seu modelo do CloudFormation, cada recurso que você importa deve ter um atributo DeletionPolicy, e todos os outros recursos devem permanecer os mesmos. Por exemplo:
AWSTemplateFormatVersion: 2010-09-09 Description: >- Sample template that shows you how to import an existing S3 bucket as an event source for a Lambda function Parameters: NotificationBucket: Type: String Description: S3 bucket that's used for Lambda event notification Resources: S3NotificationLambdaFunction: Type: 'AWS::Lambda::Function' Properties: . . LambdaInvokePermission: Type: 'AWS::Lambda::Permission' Properties: . . LambdaIAMRole: Type: 'AWS::IAM::Role' Properties: . . <The preceding resources were already created. Now, add the DeletionPolicy to the preceding stack to import the S3 bucket.> NotificationS3Bucket: Type: 'AWS::S3::Bucket' DeletionPolicy: Retain Properties: BucketName: myenv-bucket #Bucket name to import
5.Na seção Especificar modelo, escolha o URL do Amazon S3 ou Carregar um arquivo de modelo com base em seus requisitos e, em seguida, escolha ** Avançar**.
6.Conclua o restante das etapas do assistente para importar seus recursos existentes. Para obter mais informações, consulte Importar um recurso existente em uma pilha usando o console do AWS CloudFormation.
7.Aguarde até que a pilha atinja o estado IMPORT_COMPLETE.
Atualize seu modelo do CloudFormation
1.Atualize a pilha com o modelo do CloudFormation que você modificou.
2.Aguarde até que a pilha atinja o estado UPDATE_COMPLETE e, em seguida, verifique a NotificationConfiguration no bucket do S3.
3.Ative as notificações de eventos do Amazon S3 em seu bucket do S3. No modelo de exemplo a seguir, o nome do bucket é myenv-bucket:
AWSTemplateFormatVersion: 2010-09-09 Description: >- Sample template that shows you how to import an existing S3 bucket as an event source for a Lambda function Parameters: NotificationBucket: Type: String Description: S3 bucket that's used for Lambda event notification Resources: S3NotificationLambdaFunction: Type: 'AWS::Lambda::Function' Properties: . . LambdaInvokePermission: Type: 'AWS::Lambda::Permission' Properties: . . LambdaIAMRole: Type: 'AWS::IAM::Role' Properties: . . <The preceding resources were already created. Now, add the DeletionPolicy to the preceding stack to import the S3 bucket.> NotificationS3Bucket: Type: 'AWS::S3::Bucket' DeletionPolicy: Retain Properties: BucketName: myenv-bucket NotificationConfiguration: #Update stack with NotificationConfiguration LambdaConfigurations: - Event: 's3:ObjectCreated:Put' Function: !GetAtt S3NotificationLambdaFunction.Arn - Event: 's3:ObjectRemoved:*' Function: !GetAtt S3NotificationLambdaFunction.Arn
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 6 meses
- AWS OFICIALAtualizada há 6 meses
- AWS OFICIALAtualizada há 10 meses