Challenge: Deploy AWS Infrastructure with Pulumi (Python)
1️⃣ Simple AWS S3 Bucket Deployment
python
Copy
import pulumi
from pulumi_aws import s3

Create a private S3 bucket with tags

bucket = s3.Bucket(
"my-pulumi-bucket",
acl="private",
tags={
"Name": "PulumiDemoBucket",
"Environment": "Dev"
}
)

Enable bucket versioning

s3.BucketVersioning(
"bucket-versioning",
bucket=bucket.id,
versioning_configuration={
"status": "Enabled"
}
)

Export the bucket name and ARN

pulumi.export("bucket_name", bucket.id)
pulumi.export("bucket_arn", bucket.arn)
Deployment Commands:

bash
Copy

Initialize new Pulumi project (AWS Python template)

pulumi new aws-python -y

Deploy infrastructure

pulumi up

View outputs

pulumi stack output bucket_name

Destroy resources when done

pulumi destroy -y
2️⃣ Multi-Cloud Example (AWS + Azure)
python
Copy
import pulumi
from pulumi_aws import s3
from pulumi_azure_native import storage, resources

AWS S3 Bucket

aws_bucket = s3.Bucket(
"aws-demo-bucket",
acl="private"
)

Azure Resource Group

resource_group = resources.ResourceGroup(
"azure-demo-rg"
)

Azure Storage Account

storage_account = storage.StorageAccount(
"azuredemostorage",
resource_group_name=resource_group.name,
sku=storage.SkuArgs(
name="Standard_LRS"
),
kind="StorageV2"
)

Export resources

pulumi.export("aws_bucket", aws_bucket.id)
pulumi.export("azure_storage", storage_account.name)
Prerequisites:

bash
Copy

Install required providers

pip install pulumi_aws pulumi_azure_native

Configure both cloud providers

aws configure
az login
3️⃣ Advanced Example: Static Website on AWS (S3 + CloudFront + Route53)
python
Copy
import pulumi
from pulumi_aws import s3, cloudfront, route53

S3 Bucket for website content

bucket = s3.Bucket(
"website-bucket",
website=s3.BucketWebsiteArgs(
index_document="index.html"
),
acl="public-read"
)

Upload sample index.html

s3.BucketObject(
"index.html",
bucket=bucket.id,
content="

Hello Pulumi!




CloudFront Distribution

distribution = cloudfront.Distribution(
"website-distribution",
origins=[cloudfront.DistributionOriginArgs(
domain_name=bucket.bucket_regional_domain_name,
origin_id=bucket.arn
)],
enabled=True,
default_root_object="index.html",
default_cache_behavior=cloudfront.DistributionDefaultCacheBehaviorArgs(
allowed_methods=["GET", "HEAD"],
cached_methods=["GET", "HEAD"],
target_origin_id=bucket.arn,
viewer_protocol_policy="redirect-to-https"
),
restrictions=cloudfront.DistributionRestrictionsArgs(
geo_restriction=cloudfront.DistributionRestrictionsGeoRestrictionArgs(
restriction_type="none"
)
),
viewer_certificate=cloudfront.DistributionViewerCertificateArgs(
cloudfront_default_certificate=True
)
)

Export the website URL

pulumi.export("website_url", distribution.domain_name)
Deployment Steps:

Save as main.py

Run pulumi up

Access website at the exported URL

📝 Documentation Requirements
Prerequisites Section

markdown
Copy

Prerequisites

  • Pulumi CLI installed
  • AWS/Azure credentials configured
  • Python 3.7+ Architecture Diagram (ASCII or image)

Copy
[User] → [CloudFront] → [S3 Bucket]

[Route53 DNS]
Cleanup Instructions

bash
Copy

Remove all resources

pulumi destroy -y

Remove stack

pulumi stack rm dev
Troubleshooting Tips

markdown
Copy

Common Issues

  • Error: AWS credentials not found → Run aws configure
  • Error: Python dependencies missing → Run pip install -r requirements.txt