Deploy Laravel to AWS via Console (Part 0): Prerequisites — AWS Account, IAM & Billing Setup
This series guides you through deploying Laravel to AWS entirely via the AWS Console — no terminal, no CLI needed. Every action is click-by-click in the browser.
If you've seen the Deploy Laravel to AWS series (CLI version), the architecture and end result are identical. The only difference is how you get there: Console instead of command line.
Who should read this? You prefer visual interfaces, want to see every setting before creating resources, or simply aren't comfortable with the terminal yet. This series is for you.
1. Create an AWS Account
- Open your browser, go to aws.amazon.com
- Click "Create an AWS Account" (orange button, top right)
- Fill in:
- Email: Use a work email or a dedicated email for AWS (not your personal one)
- Account name: e.g.,
My Laravel Production
- Verify email via OTP code
- Set a root user password (strong, saved in a password manager)
- Choose Personal or Business account (both work)
- Enter payment info (credit/debit card — won't be charged within Free Tier)
- Verify phone number (SMS or call)
- Select Basic Support - Free
- Done — wait a few minutes for activation
Free Tier — 12 Months Free
| Service | Free Tier Limit |
|---|---|
| EC2 | 750 hrs/month t2.micro or t3.micro |
| RDS | 750 hrs/month db.t3.micro |
| S3 | 5 GB storage |
| CloudFront | 1 TB data transfer |
| ElastiCache | 750 hrs cache.t3.micro |
Warning: Anything beyond Free Tier will be charged. We'll set up billing alerts below.
2. Secure the Root Account
The root account has unlimited access to everything. Never use it for daily work.
Enable MFA for Root
- Sign in to AWS Console with root email
- Click account name (top right) → Security credentials
- Scroll to Multi-factor authentication (MFA)
- Click "Assign MFA device"
- Name:
root-mfa - Choose Authenticator app
- Click "Show QR code"
- Open authenticator app on phone (Google Authenticator, Authy, etc.) → scan QR
- Enter two consecutive MFA codes (wait for first to expire, enter second)
- Click "Add MFA"
Root is now protected. Every root login will require MFA.
Rule: Only use root for billing management and creating IAM users. Everything else uses IAM users.
3. Create an IAM User
3a. Open IAM Console
- Top search bar → type "IAM" → click IAM (not IAM Identity Center)
- Left menu → Users
- Click "Create user"
3b. User Details
| Setting | Value |
|---|---|
| User name | laravel-deployer |
| Provide user access to the AWS Management Console | ✅ Check |
| Console password | Custom password (save in password manager) |
| Users must create a new password at next sign-in | ❌ Uncheck |
Click Next.
3c. Assign Permissions
- Select "Attach policies directly"
- Search and check each policy:
| Policy | Purpose |
|---|---|
AmazonEC2FullAccess |
Manage EC2 instances |
AmazonRDSFullAccess |
Manage RDS databases |
AmazonS3FullAccess |
Manage S3 buckets |
AmazonVPCFullAccess |
Manage VPC, subnets |
ElasticLoadBalancingFullAccess |
Manage ALB |
CloudFrontFullAccess |
Manage CDN |
AmazonRoute53FullAccess |
Manage DNS |
AmazonElastiCacheFullAccess |
Manage Redis |
AWSCertificateManagerFullAccess |
Manage SSL certs |
- Click Next → Create user
Production tip: In real environments, use custom policies with least privilege. FullAccess policies are convenient for learning but too broad.
3d. Save Console Login Info
After creation, AWS shows:
- Console sign-in URL:
https://123456789012.signin.aws.amazon.com/console - User name:
laravel-deployer - Password: the one you set
Save the Console sign-in URL — you'll use this instead of the main AWS page.
3e. Enable MFA for IAM User
- IAM → Users → laravel-deployer
- Security credentials tab
- Multi-factor authentication (MFA) → Assign MFA device
- Same process as root: scan QR, enter two codes
- Done
3f. Sign In as IAM User
- Sign out of root
- Go to the Console sign-in URL (step 3d)
- Enter Account ID, User name:
laravel-deployer, Password - Enter MFA code
- You're in the Console as IAM user
From now on, every action in this series is performed as IAM user
laravel-deployer.
4. Set Up Billing Alerts
4a. Enable IAM Billing Access
By default, only root can view billing:
- Sign in as root
- Click account name → Account
- Scroll to IAM user and role access to Billing information
- Click Edit → check Activate IAM Access → Update
4b. Create Budget
- Sign back in as
laravel-deployer - Search bar → "Budgets" → AWS Budgets
- Click "Create budget"
- Template: "Zero spend budget"
- Budget name:
zero-spend-alert - Email recipients: your email
- Budget name:
- Create budget
4c. Additional Budget (Optional)
- Create budget → "Monthly cost budget"
- Amount:
$50(or your limit) - Alert thresholds: 50%, 80%, 100%
- Create budget
5. Choose Region
- Top right corner of Console, next to account name
- Click the current region name
- Select your region:
| Region | Code | Best for |
|---|---|---|
| Tokyo | ap-northeast-1 |
Users in Japan, East Asia |
| Singapore | ap-southeast-1 |
Users in Southeast Asia |
| N. Virginia | us-east-1 |
Cheapest, most services |
| Ireland | eu-west-1 |
Users in Europe |
This series uses ap-northeast-1 (Tokyo).
Important: Each region is independent. Resources created in Tokyo won't appear in Singapore. Always verify your region before creating anything.
6. Core AWS Concepts
Region & Availability Zone (AZ)
AWS Cloud
├── ap-northeast-1 (Tokyo Region)
│ ├── ap-northeast-1a (AZ-a)
│ ├── ap-northeast-1c (AZ-c)
│ └── ap-northeast-1d (AZ-d)
├── us-east-1 (Virginia Region)
│ └── ...
└── ...
- Region: Geographic area. Services and data stay in your chosen region.
- AZ: Isolated data centers within a region. Multiple AZs = high availability.
VPC (Virtual Private Cloud)
Your private network inside AWS. Think of it as an office building — you control who gets in, which rooms connect, and which face the internet.
Subnet
A "room" inside VPC:
- Public subnet: Has internet access (load balancers, web servers)
- Private subnet: No direct internet access (databases, cache — more secure)
Security Group
A virtual firewall for each resource:
Security Group for EC2:
Inbound: Port 80 only from ALB
Inbound: Port 22 only from your IP
Outbound: All traffic
Security Group for RDS:
Inbound: Port 3306 only from EC2
Outbound: None needed
IAM Role (vs IAM User)
- IAM User: For humans. Long-lived passwords or access keys.
- IAM Role: For AWS services (EC2, Lambda). Temporary, auto-rotating credentials. More secure.
In this series, EC2 will use an IAM Role to access S3 — no access keys stored on the server.
Checklist Before Part 1
- AWS account created and activated
- MFA enabled for root
- IAM user
laravel-deployercreated with policies - MFA enabled for IAM user
- Signed in to Console as IAM user
- Billing alerts configured
- Region set to ap-northeast-1
- Understood: Region, AZ, VPC, Subnet, Security Group
Ready? Let's build the network.
Series Navigation:
- Part 0: Prerequisites (You are here)
- Part 1: Architecture & VPC →
- Part 2: EC2 & Amazon Linux 2023 →
- Part 3: RDS, S3 & ElastiCache →
- Part 4: ALB, CloudFront & SSL →
- Part 5: CI/CD & Zero-Downtime Deploy →