Can AWS amplify connect to a private RDS resource - amazon-web-services

I am building a webapp using NextJS. This app will have a backend with datastore that I am planning to use as AWS RDS PSQL. This RDS instance will be private within a VPC and not publicly available, now in AWS Amplify, I don't see any options for VPC, so was wondering on how the NextJS backend code connect to AWS RDS instance?

Related

AWS MSK - Debezium Postgres Connector for AWS RDS - Failed to Connect

I'm currently facing the following issue when using AWS MSK Connector (Debezium Postgres Connector)
[Worker-0509fac07b9701a23] [2022-01-19 04:55:28,759] ERROR Failed testing connection for jdbc:postgresql://debezium-cdc.fac07b9701a2.ap-south-1.rds.amazonaws.com:5432/ecommerce with user 'debezium' (io.debezium.connector.postgresql.PostgresConnector:133)
I've test AWS MSK Connector using Kafka Clients on EC2, I'm able to produce & consume messages. I've also setup AWS MSK S3 Sink Connector, that is working as well.
I've double checked the security groups config for AWS RDS, I'm able to connect to it from EC2.
I'm not sure whats causing this issue.
Here's the Connector Configuration
connector.class=io.debezium.connector.postgresql.PostgresConnector
tasks.max=1
database.hostname=debezium-cdc.fac07b9701a2.ap-south-1.rds.amazonaws.com
database.port=5432
database.dbname=ecommerce
database.user=debezium
database.password=password
database.history.kafka.bootstrap.servers=b-2.awskafkatutorialclust.awskaf.c4.kafka.ap-south-1.amazonaws.com:9094,b1.awskafkatutorialclust.awskaf.c4.kafka.ap-south-1.amazonaws.com:9094,b-3.awskafkatutorialclust.awskaf.c4.kafka.ap-south-1.amazonaws.com:9094
database.server.id=1
database.server.name=debezium-cdc
database.whitelist=ecommerce
database.history.kafka.topic=dbhistory.ecommerce
include.schema.changes=true
key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
You need to set up AWS RDS Database Publicly accessible: No.
Because your AWS MSK is in a private network (VPC) and it can not connect to public Databases (Read more: https://docs.aws.amazon.com/vpc/latest/userguide/how-it-works.html).
Please try to change your RDS Database Postgres Publicly accessible: No.
And create MSK connect again.
(make sure that your AWS RDS Database is the same VPC, Security Group as your AWS MSK.)
Anyway, If you want to connect with your private AWS RDS Database, you need to do about bastion host (Read more: https://aws.amazon.com/premiumsupport/knowledge-center/rds-connect-ec2-bastion-host/).

How to public access of Elastic vpc endpoint

I have create elastic service in AWS with Dev Testing(t2 small)
Detials shown below
VPCvpc-7620c30b
Security Groups
sg-7e9b1759
IAM RoleAWSServiceRoleForAmazonElasticsearchService
AZs and Subnets
us-east-1e: subnet-2f100a11
How to access my VPC endpoint https://vpc-xxx.us-east-1.es.amazonaws.com access from outside.
Kibana is below : https://vpc-xx.us-east-1.es.amazonaws.com/_plugin/kibana/
I am not running on Ec2 instance
From docs:
To access the default installation of Kibana for a domain that resides within a VPC, users must have access to the VPC. This process varies by network configuration, but likely involves connecting to a VPN or managed network or using a proxy server.
One way of setting up the proxy server has been explained in detail in the recent AWS blog post:
How do I use an NGINX proxy to access Kibana from outside a VPC that's using Amazon Cognito authentication?
The instruction could also be adapted to not using Congnito.
Extra links, with other, probably easier setup with ssh tunnels:
How to connect to AWS Elasticsearch cluster from outside of the VPC
How To: Access Your AWS VPC-based Elasticsearch Cluster Locally
SSH Tunnel Access to AWS ElasticSearch Domain and Kibana | Howto
How can I use an SSH tunnel to access Kibana from outside of a VPC with Amazon Cognito authentication?
VPC endpoints are not accessible directly from outside of the VPC.
If you want to allow this you will need to use a proxy instance in your VPC that can connect to the VPC endpoint, then proxy all requests through the EC2 instance in order to access the endpoint.
More information is available here.

Fargate Task with Nat Gateway fails to connect with RDS database

Basically, I'm follow these two guides:
Deploying Hasura on AWS with Fargate, RDS and Terraform
Deploying Containers on Amazon’s ECS using Fargate and Terraform: Part 2
I have:
Postgres RDS Database deployed in 'Multi-AZ'
My python/flask app deployed in Fargate across multiple AZ's
I run a migration inside the task definition before the app
ALB Load balancing between the tasks
Logging for RDS, ECS and ALB into Cloudwatch Logs.
A NAT gateway with an Elastic IP for each private subnet to get internet connectivity
A new route table for the private subnets
NO certificates
I use terraform 0.12 for the deploy.
The repository is on ECR
But...
My app can't connect to the RDS database:
sqlalchemy.exc.OperationalError
(psycopg2.OperationalError): FATAL: password authentication failed for user "postgres"
These are the logs on pastebin-logs
I've already tried changing the password to a very simple one, before deploy, on the console directly, opening ports, turning access public, changing private to public subnet, etcetera, etcetera...
Please, I have a week with this error!!!
UPDATE
I inject the database credentials in this way:
pastebin-terraform
I cannot comment, but I mean this as a comment.
What does the security group egress look like on your ECS service that runs the task? You need to make sure it can talk to the RDS, usually on port 5432.

Combine AWS Lambda with Aurora Serverless

Is it possible to access Aurora Serverless DB from AWS Lambda?
In my case I have a Flutter mobile application which is communicating with Lumen micro framework through RESTful API. For DB I use MySQL.
After creating AWS Aurora cluster, can I connect to it like to a normal MySQL DB connection?
DB_CONNECTION=mysql
DB_HOST=my.awshost.com
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
I am relatively new to AWS. I've been only using EC2 so far. Therefore, I am trying to getting more familiar with Serverless concept.
Any help is appreciated.
Yes, you can access like other service but there is limitation of Serverless DB, it can only accessible within VPC, so you should define Lambda in the same VPC and configure networking.
Limitations of Aurora Serverless
Aurora with MySQL version 5.6 compatibility
Aurora with PostgreSQL version 10.7 compatibility
The port number for connections must be:
3306 for Aurora MySQL
5432 for Aurora PostgreSQL
You can't give an Aurora Serverless DB cluster a public IP address. You can access an Aurora Serverless DB cluster only from within a virtual private cloud (VPC) based on the Amazon VPC service.
Each Aurora Serverless DB cluster requires two AWS PrivateLink endpoints. If you reach the limit for PrivateLink endpoints within your VPC, you can't create any more Aurora Serverless clusters in that VPC. For information about checking and changing the limits on endpoints within a VPC, see Amazon VPC Limits.
You can't access an Aurora Serverless DB cluster's endpoint through an AWS VPN connection or an inter-region VPC peering connection.
aurora-serverless
You can explore getting-started-with-the-amazon-aurora-serverless-data-api for configuration lambda with Serverless DB.

Using AWS CLI from EC2 instance without internet access

Is there a way to use AWS CLI to call different services such as SQS, EC2, SNS from EC2 linux instance?
The EC2 instance from where the AWS CLI command are invoked does not have access to internet. It is in private subnet. It is not using internet gateway or NAT.
Thanks,
Not possible. The CLI has to access the API endpoints for all the services you mentioned. For that the CLI needs internet access. Only service it can access without internet is the internal metadata server.
AWS Regions and Endpoints
VPC endpoints create a private connection between your VPC and an AWS service. However, currently the only supported service is S3 and none of the services listed in your question.
Currently, we support endpoints for connections with Amazon S3 only.
We'll add support for other AWS services later. Endpoints are
supported within the same region only.