Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[SOLUÇÃO][ERROS][ETAPA 3/4] Microsserviços na prática: IAC com CDK e deploy na AWS

O Curso estava desatualizado principalmente na Etapa 3 (Completando infra) Etapa 4 (Projeto no Ar)

Criei soluções para ajudar a seguir o curso

Importante, o que eu não coloquei abaixo é que continuou igual!

Comentei o que foi alterado do que foi mostrado no curso

public AluraRdsStack(final Construct scope, final String id, final StackProps props, final Vpc vpc) {
        super(scope, id, props);

        CfnParameter senha = CfnParameter.Builder.create(this, "senha")
                .type("String")
                .description("Senha do database pedidos-ms")
                .build();

        SecurityGroup securityGroup = SecurityGroup.Builder.create(this, "RdsSecurityGroup")
                .vpc(vpc)
                .allowAllOutbound(true) // codigo modificado para aceitar requisições de qualquer ip (0.0.0.0/0)
                .build(); 
        securityGroup.addIngressRule(Peer.anyIpv4(), Port.tcp(3306));

        DatabaseInstance database = DatabaseInstance.Builder
                .create(this, "Rds-pedidos")
                .instanceIdentifier("alura-aws-pedido-db")
                .engine(DatabaseInstanceEngine.mysql(MySqlInstanceEngineProps.builder()
                        .version(MysqlEngineVersion.VER_8_0)
                        .build()))
                .vpc(vpc)
                .credentials(Credentials.fromUsername("admin",
                CredentialsFromUsernameOptions.builder()
                        .password(SecretValue.unsafePlainText(senha.getValueAsString()))
                        .build()))
                .instanceType(InstanceType.of(InstanceClass.BURSTABLE3, InstanceSize.MICRO)) // o BURSTABLE2 não estava disponivel usar o BURSTABLE3 MICRO
                .multiAz(false)
                .allocatedStorage(10)
                .securityGroups(Collections.singletonList(securityGroup))
                .vpcSubnets(SubnetSelection.builder()
                        .subnets(vpc.getPublicSubnets()) // no curso é chamado as rotas privadas, porém as rotas privadas não tinham acesso a internet use a rota publica
                        .build())
                .publiclyAccessible(true) // torne publicamente acessivel pq se não não vai aceitar conexão pelo endpoint que ele vai disponibilizar
                .build();

        CfnOutput.Builder.create(this, "pedidos-db-endpoint")
                .exportName("pedidos-db-endpoint")
                .value(database.getDbInstanceEndpointAddress())
                .build();

        CfnOutput.Builder.create(this, "pedidos-db-senha")
                .exportName("pedidos-db-senha")
                .value(senha.getValueAsString())
                .build();
    }

nessa etapa será necessário conectar no endpoint que o rds disponibilizou ainda não de deploy no Service, caso tenha dado exclua o service e siga o comando abaixo

Abra o terminal de comandos do seu computador e coloque: mysql -h -u admin -p

coloque a senha que você cadastrou no deploy da Rds caso não tenha o mysql instalado precisa instalar ou usar um container do docker fica a sua escolha

depois que conectar rode o seguinte comando CREATE DATABASE alurafood-pedidos;

    public AluraServiceStack(final Construct scope, final String id, final StackProps props, final Cluster cluster) {
        super(scope, id, props);

        Map<String, String> autenticacao = new HashMap<>();
        autenticacao.put("SPRING_DATASOURCE_URL", "jdbc:mysql://" + Fn.importValue("pedidos-db-endpoint") +
                ":3306/alurafood-pedidos"); //RETIRE O ?createDatabaseIfNotExists=true ELE NÃO FUNCIONA NA AWS
        autenticacao.put("SPRING_DATASOURCE_USERNAME", "admin");
        autenticacao.put("SPRING_DATASOURCE_PASSWORD", Fn.importValue("pedidos-db-senha"));

        ApplicationLoadBalancedFargateService.Builder.create(this, "AluraService")
                .serviceName("alura-service-pedidos-ms")
                .cluster(cluster)
                .cpu(512)
                .desiredCount(1) 
                .listenerPort(8080) 
                .assignPublicIp(true)
                .taskImageOptions(
                        ApplicationLoadBalancedTaskImageOptions.builder()
                                .image(ContainerImage.fromRegistry("jacquelineoliveira/pedidos-ms")) 
                                .containerPort(8080) 
                                .containerName("app_pedidos_ms") 
                                .environment(autenticacao)
                                .build())
                .memoryLimitMiB(1024)
                .publicLoadBalancer(true)  
                .build()
                .getTargetGroup()
                .configureHealthCheck(HealthCheck.builder().path("/pedidos").build()); // para o load balancer subir com sucesso ele precisa verificar alguma rota que de retorno 200 (precisa existir na aplicação)
}
1 resposta
solução!

Olá Tamires, tudo bem?

Que incrível ver você compartilhando suas soluções para os desafios encontrados no curso! Isso não só ajuda você a consolidar o aprendizado, mas também pode ser uma mão na roda para outros estudantes enfrentando os mesmos problemas.

Bons estudos!