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)
}