DAILY NEWS

Stay Ahead, Stay Informed – Every Day

Advertisement
CDK Deploy-Twice: When Your Infrastructure Needs to Know About Itself



There is a moment that catches a lot of people out who are new to AWS CDK. You deploy a service, the deploy succeeds, and then you realize the service cannot fully configure itself because it did not know its own endpoint until after it was running.

This is not a CDK bug. It is a genuine chicken-and-egg problem, and once you understand it, the solution is straightforward-ish.

The problem

Some resources only exist after CloudFormation has provisioned them: ALB endpoints, service URLs, and auto-assigned DNS names. These values are not known at the cdk synth time. They are outputs that come back after the stack deploys.

If your application needs to know its own public URL (e.g., to build redirect links), well then, you are in a kerfuffle. You cannot pass a value into the stack that the stack itself has not produced yet. CloudFormation is not psychic, so unfortunately neither is CDK (I hear AI is working on this, though).

What it looks like in practice

Here is a real example from my latest YouTube tutorial video. This is a URL shortener that needs BASE_URL to construct the short links it returns, but BASE_URL is the service’s own endpoint, which CloudFormation only assigns after the ECS service and ALB are provisioned.

The CDK stack handles this with tryGetContext:

const baseUrl = this.node.tryGetContext(‘baseUrl’) as string | undefined;

const environment = (
{ name: ‘TABLE_NAME’, value: table.tableName },
{ name: ‘AWS_DEFAULT_REGION’, value: this.region },
);

if (baseUrl) {
environment.push({ name: ‘BASE_URL’, value: baseUrl });
}

Enter fullscreen mode

Exit fullscreen mode

And the endpoint is exported as a stack output:

new cdk.CfnOutput(this, ‘ServiceEndpoint’, {
value: service.attrEndpoint,
description: ‘Re-deploy with –context baseUrl= to wire BASE_URL’,
});

Enter fullscreen mode

Exit fullscreen mode

tryGetContext returns undefined if the value was not passed in, so deploy one works fine. It simply runs without BASE_URL set. Deploy two wires it in. Therefore, two deploys, one working service, zero existential crises.

The deploy pattern

Deploy 1: provision the infrastructure, get the endpoint:

cdk deploy EcsExpressStack

Enter fullscreen mode

Exit fullscreen mode

Deploy 2: pass the endpoint back in as context:

SERVICE_URL=$(aws cloudformation describe-stacks \
–stack-name EcsExpressStack \
–query “Stacks(0).Outputs(?OutputKey==’ServiceEndpoint’).OutputValue” \
–output text)

cdk deploy EcsExpressStack –context baseUrl=$SERVICE_URL

Enter fullscreen mode

Exit fullscreen mode

Why this is not a CDK bug

CDK synthesizes a CloudFormation template before anything is deployed. At synth time, late-bound values like ALB endpoints exist only as CloudFormation tokens, which are placeholders that resolve later. You can use them within the same stack (they resolve correctly in the template), but you cannot read them back into your TypeScript logic during synth. This is because the template has not run yet, and therefore the value does not exist yet. This is simply the correct order of operations.

tryGetContext sidesteps this. You supply the value externally on a subsequent deploy, once CloudFormation has resolved it.

When you will run into this

A service that builds URLs pointing to itself
A resource that needs its own ARN or DNS name as a config value
Cross-stack references where stack B’s input is stack A’s output and you have not wired them through CfnOutput and Fn.importValue

The pattern feels a little awkward the first time. It stops feeling awkward once you understand why it works that way. Then starts feeling awkward again when you dust off that old forgotten side project (you know, that one).

So which came first: the service or the endpoint?

The endpoint… but only after the service… which needed the endpoint to configure itself… which required the service to exist first.

At this point, I recommend not thinking about it too hard.



Source link

Cloud Engineer Journey #6 — EC2 Explained Simply & Launching Your First Cloud Server



After understanding:

Linux fundamentals
AWS basics
and Cloud Computing concepts,

it’s time to work with one of the most important AWS services:

EC2 is one of the core services in AWS and is heavily used in:

Cloud Engineering
DevOps
Hosting applications
Automation
CI/CD
Docker & Kubernetes environments

In this post, we’ll understand:

what EC2 actually is,
why companies use it,
and how to launch your first cloud server step by step.

I’ll keep everything beginner-friendly and practical.

EC2 stands for:

EC2 allows you to create virtual servers in the cloud.

Think of EC2 like:🖥️ renting a computer/server online whenever you need it.

Instead of buying physical hardware, AWS lets you launch servers within minutes.

These servers can run:

websites,
applications,
databases,
APIs,
automation tools,
and many cloud workloads.

Most modern cloud applications run on servers.

EC2 helps companies:

deploy applications quickly,
scale resources,
reduce hardware costs,
and manage infrastructure more easily.

It is one of the most commonly used AWS services.

Imagine you want to host:

a website,
a backend application,
or a Jenkins server.

Instead of buying a physical machine:👉 you can launch an EC2 instance in AWS within minutes.

This is one of the main reasons cloud computing became so popular.

When you launch a server in AWS, it is called an:

Each instance includes:

CPU
Memory (RAM)
Storage
Networking
Operating System

Just like a real computer.

Before launching an EC2 instance, there are a few important concepts to understand.

An AMI is a preconfigured operating system template.

Example:

Amazon Linux
Ubuntu
Red Hat

Think of it like:💿 selecting which operating system you want to install on your server.

Instance type decides:

CPU power
RAM size
performance level

Example:

“`bash id=”22j9mo”t2.micro

This is commonly used in AWS Free Tier.

# 🔐 3. Key Pair

AWS uses SSH keys for secure login.

When creating an EC2 instance, AWS generates:

* a public key
* and a private key

The private key (`.pem` file) is used to connect to the server securely.

# 🛡️ 4. Security Groups

Security Groups act like virtual firewalls.

They control:

* incoming traffic
* outgoing traffic

Example:

* Allow SSH (port 22)
* Allow HTTP (port 80)

Without proper Security Group rules, you cannot access the server.

# 🌍 5. Region

AWS has multiple regions worldwide.

Example:

* Mumbai
* Virginia
* Singapore
* London

Choosing a region closer to users improves performance and reduces latency.

# 🚀 Launching Your First EC2 Instance

Basic steps:

### 1. Open AWS Console

Search for:

“`bash id=”mf4ib7″
EC2

Enter fullscreen mode

Exit fullscreen mode

2. Click “Launch Instance”

3. Select an AMI

Example:

4. Choose Instance Type

Example:

“`bash id=”7rk0p7″t2.micro

### 5. Create or Select Key Pair

Download the `.pem` file safely.

### 6. Configure Security Group

Allow:

* SSH (22)

Optional:

* HTTP (80)
* HTTPS (443)

### 7. Launch Instance

AWS will now create your cloud server.

# 🔗 Connecting to the EC2 Instance

Once the instance is running, connect using SSH.

Example:

“`bash id=”m1v2p2″
ssh -i key.pem ec2-user@your-public-ip

Enter fullscreen mode

Exit fullscreen mode

Now you are connected to your cloud server 🚀

EC2 is heavily used in:

application hosting,
automation,
CI/CD pipelines,
Docker setups,
Kubernetes clusters,
monitoring tools,
and cloud infrastructure.

Understanding EC2 is one of the biggest first steps in Cloud Engineering.

Try this on AWS:

Task:

Launch an EC2 instance
Use Amazon Linux AMI
Select t2.micro
Create a key pair
Configure Security Group for SSH
Connect to the instance using SSH

👉 In the next post, I’ll explain the solution and common beginner mistakes step by step.

EC2 may sound advanced at first, but the core idea is simple:

👉 AWS gives you virtual servers on demand.

Instead of managing physical infrastructure, you can launch servers within minutes and use them for real-world applications.

This is one of the most important foundations in AWS and Cloud Engineering ☁️

If you are learning AWS, Linux, or Cloud basics and need help with even small doubts, feel free to connect with me through LinkedIn or email — always happy to learn and grow together 🚀



Source link