2424 name : HashiCorp Packer Build
2525 runs-on : ubuntu-latest
2626 if : ${{ github.event.inputs.run_packer == 'true' }}
27-
27+
2828 steps :
2929 - name : Checkout
3030 uses : actions/checkout@v4
@@ -43,15 +43,36 @@ jobs:
4343
4444 - name : Get latest Ubuntu AMI
4545 run : |
46+ echo "🔍 Searching for Ubuntu 22.04 AMI..."
47+
48+ # Try specific search first
4649 UBUNTU_AMI=$(aws ec2 describe-images \
4750 --owners 099720109477 \
4851 --filters \
4952 "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-22.04-amd64-server-*" \
5053 "Name=state,Values=available" \
5154 --query 'Images | sort_by(@, &CreationDate) | [-1].ImageId' \
52- --output text)
53-
54- echo "Found Ubuntu AMI: $UBUNTU_AMI"
55+ --output text 2>/dev/null || echo "")
56+
57+ # If that fails, try broader search
58+ if [ "$UBUNTU_AMI" = "" ] || [ "$UBUNTU_AMI" = "None" ]; then
59+ echo "⚠️ First search failed, trying broader search..."
60+ UBUNTU_AMI=$(aws ec2 describe-images \
61+ --owners 099720109477 \
62+ --filters \
63+ "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-*-amd64-server-*" \
64+ "Name=state,Values=available" \
65+ --query 'Images | sort_by(@, &CreationDate) | [-1].ImageId' \
66+ --output text)
67+ fi
68+
69+ # Fallback to known AMI
70+ if [ "$UBUNTU_AMI" = "" ] || [ "$UBUNTU_AMI" = "None" ]; then
71+ echo "⚠️ Using hardcoded Ubuntu 22.04 AMI for us-west-2"
72+ UBUNTU_AMI="ami-0c2d3e23eb7b0270d"
73+ fi
74+
75+ echo "✅ Using Ubuntu AMI: $UBUNTU_AMI"
5576 echo "UBUNTU_AMI=$UBUNTU_AMI" >> $GITHUB_ENV
5677
5778 - name : Create Packer template
7293 region = "${{ env.AWS_REGION }}"
7394 source_ami = "${{ env.UBUNTU_AMI }}"
7495 ssh_username = "ubuntu"
75-
96+
7697 tags = {
7798 Name = "packer-demo-\${timestamp()}"
7899 Tool = "HashiCorp-Packer"
81102
82103 build {
83104 sources = ["source.amazon-ebs.ubuntu"]
84-
105+
85106 provisioner "shell" {
86107 inline = [
87108 "sudo apt-get update",
@@ -111,7 +132,7 @@ jobs:
111132 name : AWS EC2 Image Builder Build
112133 runs-on : ubuntu-latest
113134 if : ${{ github.event.inputs.run_ec2_imagebuilder == 'true' }}
114-
135+
115136 steps :
116137 - name : Checkout
117138 uses : actions/checkout@v4
@@ -125,21 +146,53 @@ jobs:
125146
126147 - name : Get latest Ubuntu AMI
127148 run : |
149+ echo "🔍 Searching for Ubuntu 22.04 AMI..."
150+
151+ # Try multiple search patterns
128152 UBUNTU_AMI=$(aws ec2 describe-images \
129153 --owners 099720109477 \
130154 --filters \
131155 "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-22.04-amd64-server-*" \
132156 "Name=state,Values=available" \
133157 --query 'Images | sort_by(@, &CreationDate) | [-1].ImageId' \
134- --output text)
135-
136- echo "Found Ubuntu AMI: $UBUNTU_AMI"
158+ --output text 2>/dev/null || echo "")
159+
160+ # If that fails, try a broader search
161+ if [ "$UBUNTU_AMI" = "" ] || [ "$UBUNTU_AMI" = "None" ]; then
162+ echo "⚠️ First search failed, trying broader search..."
163+ UBUNTU_AMI=$(aws ec2 describe-images \
164+ --owners 099720109477 \
165+ --filters \
166+ "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-*-amd64-server-*" \
167+ "Name=state,Values=available" \
168+ --query 'Images | sort_by(@, &CreationDate) | [-1].ImageId' \
169+ --output text)
170+ fi
171+
172+ # If still fails, use a known working AMI
173+ if [ "$UBUNTU_AMI" = "" ] || [ "$UBUNTU_AMI" = "None" ]; then
174+ echo "⚠️ AMI search failed, using hardcoded Ubuntu 22.04 AMI for us-west-2"
175+ UBUNTU_AMI="ami-0c2d3e23eb7b0270d" # Ubuntu 22.04 LTS in us-west-2
176+ fi
177+
178+ echo "✅ Using Ubuntu AMI: $UBUNTU_AMI"
179+
180+ # Verify the AMI exists
181+ aws ec2 describe-images --image-ids $UBUNTU_AMI --query 'Images[0].Name' --output text
182+
137183 echo "UBUNTU_AMI=$UBUNTU_AMI" >> $GITHUB_ENV
138184
139185 - name : Run EC2 Image Builder pipeline
140186 run : |
141187 echo "🚀 Starting EC2 Image Builder with AMI: $UBUNTU_AMI"
142-
188+
189+ # Verify we have a valid AMI
190+ if [ "$UBUNTU_AMI" = "" ] || [ "$UBUNTU_AMI" = "None" ]; then
191+ echo "❌ No valid AMI found. Exiting."
192+ exit 1
193+ fi
194+
195+ # Create component with proper YAML formatting
143196 cat > component.yml << 'EOF'
144197 name: InstallNginx
145198 description: Install Nginx web server
@@ -159,6 +212,10 @@ jobs:
159212 - echo '<h1>Built with EC2 Image Builder</h1>' > /var/www/html/index.html
160213 EOF
161214
215+ echo "📋 Component YAML:"
216+ cat component.yml
217+
218+ # Create component
162219 COMPONENT_ARN=$(aws imagebuilder create-component \
163220 --name "nginx-component-$(date +%s)" \
164221 --semantic-version "1.0.0" \
@@ -167,9 +224,10 @@ jobs:
167224 --data file://component.yml \
168225 --query 'componentBuildVersionArn' \
169226 --output text)
170-
227+
171228 echo "✅ Component created: $COMPONENT_ARN"
172-
229+
230+ # Create image recipe
173231 RECIPE_ARN=$(aws imagebuilder create-image-recipe \
174232 --name "nginx-recipe-$(date +%s)" \
175233 --semantic-version "1.0.0" \
@@ -178,27 +236,48 @@ jobs:
178236 --components componentArn=$COMPONENT_ARN \
179237 --query 'imageRecipeArn' \
180238 --output text)
181-
239+
182240 echo "✅ Recipe created: $RECIPE_ARN"
183-
241+
242+ # Get default VPC info for infrastructure config
243+ DEFAULT_VPC=$(aws ec2 describe-vpcs \
244+ --filters "Name=is-default,Values=true" \
245+ --query 'Vpcs[0].VpcId' \
246+ --output text)
247+
248+ DEFAULT_SUBNET=$(aws ec2 describe-subnets \
249+ --filters "Name=vpc-id,Values=$DEFAULT_VPC" \
250+ --query 'Subnets[0].SubnetId' \
251+ --output text)
252+
253+ echo "🌐 Using VPC: $DEFAULT_VPC, Subnet: $DEFAULT_SUBNET"
254+
255+ # Create infrastructure configuration
184256 INFRA_ARN=$(aws imagebuilder create-infrastructure-configuration \
185257 --name "basic-infra-$(date +%s)" \
186258 --instance-types t3.micro \
259+ --subnet-id "$DEFAULT_SUBNET" \
187260 --query 'infrastructureConfigurationArn' \
188261 --output text)
189-
262+
190263 echo "✅ Infrastructure config created: $INFRA_ARN"
191-
264+
265+ # Start image build
192266 IMAGE_ARN=$(aws imagebuilder create-image \
193267 --image-recipe-arn "$RECIPE_ARN" \
194268 --infrastructure-configuration-arn "$INFRA_ARN" \
195269 --query 'imageBuildVersionArn' \
196270 --output text)
197-
271+
198272 echo "✅ Image build started: $IMAGE_ARN"
273+
274+ # Create build log
199275 echo "Build Summary:" > ec2-imagebuilder-build.log
200276 echo "Base AMI: $UBUNTU_AMI" >> ec2-imagebuilder-build.log
201277 echo "Image ARN: $IMAGE_ARN" >> ec2-imagebuilder-build.log
278+ echo "Recipe ARN: $RECIPE_ARN" >> ec2-imagebuilder-build.log
279+ echo "Component ARN: $COMPONENT_ARN" >> ec2-imagebuilder-build.log
280+ echo "Infrastructure ARN: $INFRA_ARN" >> ec2-imagebuilder-build.log
202281
203282 - name : Upload EC2 Image Builder logs
204283 uses : actions/upload-artifact@v4
@@ -211,7 +290,7 @@ jobs:
211290 runs-on : ubuntu-latest
212291 needs : [packer-build, ec2-imagebuilder-build]
213292 if : always()
214-
293+
215294 steps :
216295 - name : Generate comparison report
217296 run : |
0 commit comments