AWS Cloudformation과 함께 제공되는 초기 프로젝트 - 아키텍처 기반 자동화

0. Objetivo do projeto
1. Desenho da arquitetura
2. Código e explicação
3. Conclusão

오브제티보 도 프로제토



A Motivação por trás desse projeto foi me capacitar em AWS, principalmente nos serviços Cloudformation, S3, Lambda, VPC, RDS e IG e nos conhecimentos de politicas de acesso para crescer profissionalmente. O objetivo do projeto é ser um registrador de arquivos excluídos, semper que um arquivo for deletado manualmente, ou por meio de politicas de um bucket, o S3 deverá alertar um Lambda para realizar um registro no RDS(MySQL). Pode ser uma boa solução para quem최대 sincronizar arquivos de um bucket com seu conteúdo em um banco RDS.
Todo o projeto pode ser encontrado nesse repositorio.

Desenho da arquitetura




Aarquitetura é autoexplicativa: Vamos precisar de um S3 para enviar notificações à um Lambda que vai se comunicar com um RDS. 단순함을 유지하기 위해 커뮤니카사오 엔트레 세스 서비스 의존성 및 허가를 받아야 합니다. VPC에 대해 정확한 정보를 얻으려면 이중 서브넷(RDS와 Lambda에 연결해야 함)과 Lambda에 버킷을 추가할 수 있는 역할 권한이 있습니다.

Código 및 설명



초기 vamos criar uma VPC para proteger o acesso ao nosso RDS:

SimpleVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      Tags:
        - Key: stack
          Value: des


"유형"과 "AWS::EC2::VPC"의 결합에 대한 재귀적 정의가 나오면 EC2 그룹에 VPC를 배치합니다. CidrBlock에서 VPC에 대한 IP disponível dentro에 대한 정확한 정의를 내리십시오.
정확히 두 개의 서브넷을 지정하고 VPC에 연결하지 않고 서브넷 그룹을 RDS와 연결합니다.

SimpleSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId:
        Ref: SimpleVPC
      CidrBlock: 10.0.1.0/24
      AvailabilityZone: "us-east-1a"
      Tags:
        - Key: stack
          Value: des

  SimpleSubnet2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId:
        Ref: SimpleVPC
      CidrBlock: 10.0.2.0/24
      AvailabilityZone: "us-east-1b"
      Tags:
        - Key: stack
          Value: des

  SimpleDBSubnetGroup:
    Type: AWS::RDS::DBSubnetGroup
    Properties:
      SubnetIds:
        - Ref: SimpleSubnet1
        - Ref: SimpleSubnet2
      DBSubnetGroupDescription: Subnet para o RDS


아무 것도 없는 RDS의 Podemos criar o nosso micro, que será suficiente para o nosso projeto pessoal, 4GB de storage (mais do que o suficiente), com uma engine MySQL, e utilizando do nosso grupo de subnets.

SQLDemoDbInstance:
    Type: AWS::RDS::DBInstance
    Properties:
      DBName: !Ref pDbName
      MasterUsername: !Ref pDbUser
      MasterUserPassword: !Ref pDbPass
      Engine: MySQL
      DBInstanceClass: db.t2.micro
      StorageType: gp2
      PubliclyAccessible: False
      DBSubnetGroupName:
        Ref: SimpleDBSubnetGroup
      AllocatedStorage: "4"
      DBInstanceIdentifier: !Join ["-", [ "SQLDemoDbInstance", !Ref "AWS::Region" ]]
      AvailabilityZone: !Select [1, !GetAZs ""]


공고문에서 가장 중요한 것은 정치권입니다. Nesse caso, eu quero que meu bucket notifique o Lambda semper que um objeto for removido, independente de seu estado anterior (versionado, taggeado, etc).
중요한 정의는 람다에 의존하고 람다의 소유물인 "함수"에 의존하며, 기능 !GetAtt를 사용하는 것입니다.
Perceba que eu estou definindo um filtro no S3 para notificar somente arquivos terminados em ".txt".

MyBucket:
    Type: AWS::S3::Bucket
    DependsOn: LambdaS3Permissao
    Properties:
      BucketName: !Ref BucketName
      NotificationConfiguration:
        LambdaConfigurations:
          - Event: s3:ObjectRemoved:*
            Function: !GetAtt LambdaS3Processamento.Arn
            Filter:
              S3Key:
                Rules:
                  - Name: suffix
                    Value: .txt


Por fim, vamos criar a Lambda com um código simples que pode ser atualizado depois no console. Você também poderia apontar o seu código para um arquivo zip dentro de um bucket S3, mas vamos deixar mais simples para o nosso caso.
O nosso Lambda terá는 간단한 tarefa de receber o evento de notificação, extrair o nome do arquivo e salvar na base RDS com um timestamp associado. VPC의 보안 그룹에서 네트워크 서브넷으로 활용하는 것이 중요합니다.

LambdaS3Processamento:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.execute
      Role: !GetAtt LambdaS3Role.Arn
      Runtime: nodejs12.x
      MemorySize: 128
      Timeout: 45
      VpcConfig:
        SecurityGroupIds:
          - sg-0c094b8e5f85ae4b3
        SubnetIds:
          - !Ref SimpleSubnet1
          - !Ref SimpleSubnet2
      Code:
        ZipFile: >
          exports.execute = (event, context) => {
            console.log(event);
          }


콘솔 AWS에 기반한 인프라 구축을 용이하게 하기 위해 클라우드 포메이션 서비스를 사용하지 않고 템플릿을 가져오려면 고급 아카부 드 크리어를 사용하십시오.

Depois de criado com sucesso, precisamos alterar or código da nossa Lambda com o nosso projeto do github. Para isso, precisamos baixar o projeto e compactar no formato zip. Lambda 서비스가 콘솔 AWS를 수행하지 않고 zip 파일 형식으로 업로드합니다. Depois de atualizar o código, podemos testar enviando um arquivo ao nosso bucket e apagando logo em seguida.

결론



O AWS Cloudformation nos permitiu construir uma estrutura simples, de fácil utilizando apenas um arquivo. Semper que for necessário replicar a mesma estrutura, podemos usar o mesmo arquivo alterando poucos paraâmetros.

좋은 웹페이지 즐겨찾기