Add ARM architecture to ec2 image and the related instance types
diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/compute/domain/EC2HardwareBuilder.java b/apis/ec2/src/main/java/org/jclouds/ec2/compute/domain/EC2HardwareBuilder.java
index e31dd33..753a0d2 100644
--- a/apis/ec2/src/main/java/org/jclouds/ec2/compute/domain/EC2HardwareBuilder.java
+++ b/apis/ec2/src/main/java/org/jclouds/ec2/compute/domain/EC2HardwareBuilder.java
@@ -1518,7 +1518,51 @@
                     new VolumeBuilder().type(LOCAL).size(1920.0f).device("/dev/sdc").bootDevice(false).durable(false).build()))
             .processors(ImmutableList.of(new Processor(128.0, 2.3)));
    }
-   
+
+   /**
+    * @see InstanceType#A1_MEDIUM
+    */
+   public static EC2HardwareBuilder a1_medium() {
+      return new EC2HardwareBuilder(InstanceType.A1_MEDIUM).ram(2048)
+            .processors(ImmutableList.of(new Processor(1, 2.3))).rootDeviceType(RootDeviceType.EBS)
+            .virtualizationType(VirtualizationType.HVM);
+   }
+
+   /**
+    * @see InstanceType#A1_LARGE
+    */
+   public static org.jclouds.ec2.compute.domain.EC2HardwareBuilder a1_large() {
+      return new EC2HardwareBuilder(InstanceType.A1_LARGE).ram(4096).processors(ImmutableList.of(new Processor(2, 2.3)))
+            .rootDeviceType(RootDeviceType.EBS).virtualizationType(VirtualizationType.HVM);
+   }
+
+   /**
+    * @see InstanceType#A1_XLARGE
+    */
+   public static org.jclouds.ec2.compute.domain.EC2HardwareBuilder a1_xlarge() {
+      return new EC2HardwareBuilder(InstanceType.A1_XLARGE).ram(8192)
+            .processors(ImmutableList.of(new Processor(4, 2.3))).rootDeviceType(RootDeviceType.EBS)
+            .virtualizationType(VirtualizationType.HVM);
+   }
+
+   /**
+    * @see InstanceType#A1_2XLARGE
+    */
+   public static org.jclouds.ec2.compute.domain.EC2HardwareBuilder a1_2xlarge() {
+      return new EC2HardwareBuilder(InstanceType.A1_2XLARGE).ram(16384)
+            .processors(ImmutableList.of(new Processor(8, 2.3))).rootDeviceType(RootDeviceType.EBS)
+            .virtualizationType(VirtualizationType.HVM);
+   }
+
+   /**
+    * @see InstanceType#A1_4XLARGE
+    */
+   public static org.jclouds.ec2.compute.domain.EC2HardwareBuilder a1_4xlarge() {
+      return new EC2HardwareBuilder(InstanceType.A1_4XLARGE).ram(32768)
+            .processors(ImmutableList.of(new Processor(16, 2.3))).rootDeviceType(RootDeviceType.EBS)
+            .virtualizationType(VirtualizationType.HVM);
+   }
+
    @SuppressWarnings("unchecked")
    @Override
    public Hardware build() {
diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/domain/Image.java b/apis/ec2/src/main/java/org/jclouds/ec2/domain/Image.java
index 6a037ad..1648280 100644
--- a/apis/ec2/src/main/java/org/jclouds/ec2/domain/Image.java
+++ b/apis/ec2/src/main/java/org/jclouds/ec2/domain/Image.java
@@ -123,7 +123,7 @@
    }
 
    public static enum Architecture {
-      I386, X86_64, UNRECOGNIZED;
+      I386, X86_64, ARM64, UNRECOGNIZED;
       public String value() {
          return name().toLowerCase();
       }
diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/domain/InstanceType.java b/apis/ec2/src/main/java/org/jclouds/ec2/domain/InstanceType.java
index d673d9a..2bbbafc 100644
--- a/apis/ec2/src/main/java/org/jclouds/ec2/domain/InstanceType.java
+++ b/apis/ec2/src/main/java/org/jclouds/ec2/domain/InstanceType.java
@@ -1129,4 +1129,69 @@
     * </ul>
     */
    public static final String X1_32XLARGE = "x1.32xlarge";
+
+   /**
+    * A1 Medium
+    * <ul>
+    * <li>Provider Id: a1.medium</li>
+    * <li>vCPU: 1</li>
+    * <li>Memory (GiB): 2</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * <li>Network Performance: up to 10 Gigabit</li>
+    * </ul>
+    */
+   public static final String A1_MEDIUM = "a1.medium";
+
+   /**
+    * A1 Large
+    * <ul>
+    * <li>Provider Id: a1.large</li>
+    * <li>vCPU: 2</li>
+    * <li>Memory (GiB): 4</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * <li>Network Performance: up to 10 Gigabit</li>
+    * </ul>
+    */
+   public static final String A1_LARGE = "a1.large";
+
+   /**
+    * A1 XLarge
+    * <ul>
+    * <li>Provider Id: a1.xlarge</li>
+    * <li>vCPU: 4</li>
+    * <li>Memory (GiB): 8</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * <li>Network Performance: up to 10 Gigabit</li>
+    * </ul>
+    */
+   public static final String A1_XLARGE = "a1.xlarge";
+
+   /**
+    * A1 2XLarge
+    * <ul>
+    * <li>Provider Id: a1.2xlarge</li>
+    * <li>vCPU: 8</li>
+    * <li>Memory (GiB): 16</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * <li>Network Performance: up to 10 Gigabit</li>
+    * </ul>
+    */
+   public static final String A1_2XLARGE = "a1.2xlarge";
+
+   /**
+    * A1 4XLarge
+    * <ul>
+    * <li>Provider Id: a1.4xlarge</li>
+    * <li>vCPU: 16</li>
+    * <li>Memory (GiB): 32</li>
+    * <li>No instance storage (EBS storage only)</li>
+    * <li>64-bit platform</li>
+    * <li>Network Performance: up to 10 Gigabit</li>
+    * </ul>
+    */
+   public static final String A1_4XLARGE = "a1.4xlarge";
 }
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2HardwareSupplier.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2HardwareSupplier.java
index e35ec5f..647e867 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2HardwareSupplier.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2HardwareSupplier.java
@@ -16,6 +16,11 @@
  */
 package org.jclouds.aws.ec2.compute.suppliers;
 
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.a1_medium;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.a1_large;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.a1_xlarge;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.a1_2xlarge;
+import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.a1_4xlarge;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.c1_medium;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.c1_xlarge;
 import static org.jclouds.ec2.compute.domain.EC2HardwareBuilder.c3_2xlarge;
@@ -233,6 +238,11 @@
       sizes.add(d2_8xlarge().build());
       sizes.add(x1_32xlarge().build());
       sizes.add(x1_16xlarge().build());
+      sizes.add(a1_medium().build());
+      sizes.add(a1_large().build());
+      sizes.add(a1_xlarge().build());
+      sizes.add(a1_2xlarge().build());
+      sizes.add(a1_4xlarge().build());
 
       return sizes.build();
    }
diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/compute/AWSEC2ComputeServiceApiMockTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/compute/AWSEC2ComputeServiceApiMockTest.java
index cc81219..e11a1dd 100644
--- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/compute/AWSEC2ComputeServiceApiMockTest.java
+++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/compute/AWSEC2ComputeServiceApiMockTest.java
@@ -35,7 +35,7 @@
 
    protected String getDefaultSmallestInstanceType() {
       // NOT t2.xxx because that requires a VPC
-      return "m3.medium";
+      return "a1.medium";
    }
      
    protected String getDefaultParavirtualInstanceType() {
@@ -44,7 +44,7 @@
    }
 
    protected String getDefaultImageId() {
-       return "be3adfd7";
+       return "7ea24a17";
    }
    
    public void launchVPCSpotInstanceSubnetId() throws Exception {
diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/internal/BaseAWSEC2ApiMockTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/internal/BaseAWSEC2ApiMockTest.java
index aae84d9..fab1f50 100644
--- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/internal/BaseAWSEC2ApiMockTest.java
+++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/internal/BaseAWSEC2ApiMockTest.java
@@ -58,7 +58,7 @@
 import com.squareup.okhttp.mockwebserver.RecordedRequest;
 
 /**
- * Tests need to run {@code singleThreaded = true) as otherwise tests will clash on the regionToServers field.
+ * Tests need to run {@code singleThreaded = true} as otherwise tests will clash on the regionToServers field.
  * Sharing the regionToServers field means less code to write.
  */
 public class BaseAWSEC2ApiMockTest {