There are more AWS SDK examples available in the AWS Doc SDK Examples
Get started with Marketplace Buyer using the CLI
The following code example shows how to:
Use ec2 AuthorizeSecurityGroupIngress
Use ec2 CreateKeyPair
Use ec2 CreateSecurityGroup
- Bash
-
- AWS CLI with Bash script
-
Note
There's more on GitHub. Find the complete example and learn how to set up and run in the Sample developer tutorials
repository. #!/bin/bash # AWS Marketplace Buyer Getting Started Script # This script demonstrates how to search for products in AWS Marketplace, # launch an EC2 instance with a product AMI, and manage subscriptions. # Setup logging LOG_FILE="marketplace-tutorial.log" exec > >(tee -a "$LOG_FILE") 2>&1 echo "===================================================" echo "AWS Marketplace Buyer Getting Started Tutorial" echo "===================================================" echo "This script will:" echo "1. List available products in AWS Marketplace" echo "2. Create resources needed to launch an EC2 instance" echo "3. Launch an EC2 instance with an Amazon Linux 2 AMI" echo "4. Show how to manage and terminate the instance" echo "===================================================" echo "" # Function to check for errors in command output check_error() { local output=$1 local cmd=$2 if echo "$output" | grep -i "error" > /dev/null; then echo "ERROR: Command failed: $cmd" echo "Output: $output" cleanup_resources exit 1 fi } # Function to clean up resources cleanup_resources() { echo "" echo "===================================================" echo "CLEANING UP RESOURCES" echo "===================================================" if [ -n "$INSTANCE_ID" ]; then echo "Terminating EC2 instance: $INSTANCE_ID" aws ec2 terminate-instances --instance-ids "$INSTANCE_ID" echo "Waiting for instance to terminate..." aws ec2 wait instance-terminated --instance-ids "$INSTANCE_ID" echo "Instance terminated successfully." fi if [ -n "$SECURITY_GROUP_ID" ]; then echo "Deleting security group: $SECURITY_GROUP_ID" aws ec2 delete-security-group --group-id "$SECURITY_GROUP_ID" echo "Security group deleted." fi if [ -n "$KEY_NAME" ]; then echo "Deleting key pair: $KEY_NAME" aws ec2 delete-key-pair --key-name "$KEY_NAME" # Remove the local key file if it exists if [ -f "${KEY_NAME}.pem" ]; then rm "${KEY_NAME}.pem" echo "Local key file deleted." fi fi echo "Cleanup completed." } # Generate random identifier for resource names RANDOM_ID=$(openssl rand -hex 6) KEY_NAME="marketplace-key-${RANDOM_ID}" SECURITY_GROUP_NAME="marketplace-sg-${RANDOM_ID}" # Initialize variables to track created resources INSTANCE_ID="" SECURITY_GROUP_ID="" # Step 1: List available products in AWS Marketplace echo "Listing available products in AWS Marketplace..." echo "Note: In a real scenario, you would use marketplace-catalog commands to list and search for products." echo "However, this requires specific permissions and product knowledge." echo "" echo "For this tutorial, we'll use a public Amazon Linux 2 AMI instead of an actual marketplace product." echo "This is because subscribing to marketplace products requires accepting terms via the console." echo "" # Step 2: Create a key pair for SSH access echo "Creating key pair: $KEY_NAME" KEY_OUTPUT=$(aws ec2 create-key-pair \ --key-name "$KEY_NAME" \ --query 'KeyMaterial' \ --output text > "${KEY_NAME}.pem" 2>&1) check_error "$KEY_OUTPUT" "ec2 create-key-pair" # Set proper permissions for the key file chmod 400 "${KEY_NAME}.pem" echo "Key pair created and saved to ${KEY_NAME}.pem" # Step 3: Create a security group echo "Creating security group: $SECURITY_GROUP_NAME" SG_OUTPUT=$(aws ec2 create-security-group \ --group-name "$SECURITY_GROUP_NAME" \ --description "Security group for AWS Marketplace tutorial" 2>&1) check_error "$SG_OUTPUT" "ec2 create-security-group" # Extract security group ID SECURITY_GROUP_ID=$(echo "$SG_OUTPUT" | grep -o '"GroupId": "[^"]*' | cut -d'"' -f4) echo "Security group created with ID: $SECURITY_GROUP_ID" # Add inbound rule for SSH (port 22) echo "Adding inbound rule for SSH (port 22)..." SSH_RULE_OUTPUT=$(aws ec2 authorize-security-group-ingress \ --group-id "$SECURITY_GROUP_ID" \ --protocol tcp \ --port 22 \ --cidr 10.0.0.0/16 2>&1) check_error "$SSH_RULE_OUTPUT" "ec2 authorize-security-group-ingress (SSH)" # Add inbound rule for HTTP (port 80) echo "Adding inbound rule for HTTP (port 80)..." HTTP_RULE_OUTPUT=$(aws ec2 authorize-security-group-ingress \ --group-id "$SECURITY_GROUP_ID" \ --protocol tcp \ --port 80 \ --cidr 10.0.0.0/16 2>&1) check_error "$HTTP_RULE_OUTPUT" "ec2 authorize-security-group-ingress (HTTP)" echo "Security group configured with SSH and HTTP access from 10.0.0.0/16 network." echo "Note: In a production environment, you should restrict access to specific IP ranges." # Step 4: Get the latest Amazon Linux 2 AMI ID # Note: In a real scenario, you would use the AMI ID from a marketplace product echo "Getting the latest Amazon Linux 2 AMI ID..." AMI_OUTPUT=$(aws ec2 describe-images \ --owners amazon \ --filters "Name=name,Values=amzn2-ami-hvm-2.0.*-x86_64-gp2" "Name=state,Values=available" \ --query "sort_by(Images, &CreationDate)[-1].ImageId" \ --output text 2>&1) check_error "$AMI_OUTPUT" "ec2 describe-images" AMI_ID=$AMI_OUTPUT echo "Using AMI ID: $AMI_ID" echo "Note: In a real marketplace scenario, you would use the AMI ID from your subscribed product." # Step 5: Launch an EC2 instance echo "Launching EC2 instance with the AMI..." INSTANCE_OUTPUT=$(aws ec2 run-instances \ --image-id "$AMI_ID" \ --instance-type t2.micro \ --key-name "$KEY_NAME" \ --security-group-ids "$SECURITY_GROUP_ID" \ --count 1 2>&1) check_error "$INSTANCE_OUTPUT" "ec2 run-instances" # Extract instance ID INSTANCE_ID=$(echo "$INSTANCE_OUTPUT" | grep -o '"InstanceId": "[^"]*' | head -1 | cut -d'"' -f4) echo "Instance launched with ID: $INSTANCE_ID" # Wait for the instance to be running echo "Waiting for instance to be in running state..." aws ec2 wait instance-running --instance-ids "$INSTANCE_ID" echo "Instance is now running." # Step 6: Get instance details echo "Getting instance details..." INSTANCE_DETAILS=$(aws ec2 describe-instances \ --instance-ids "$INSTANCE_ID" \ --query "Reservations[0].Instances[0].[InstanceId,State.Name,PublicDnsName]" \ --output text 2>&1) check_error "$INSTANCE_DETAILS" "ec2 describe-instances" echo "Instance details:" echo "$INSTANCE_DETAILS" # Display summary of created resources echo "" echo "===================================================" echo "RESOURCE SUMMARY" echo "===================================================" echo "Key Pair: $KEY_NAME" echo "Security Group: $SECURITY_GROUP_NAME (ID: $SECURITY_GROUP_ID)" echo "EC2 Instance: $INSTANCE_ID" echo "" echo "To connect to your instance (once it's fully initialized):" echo "ssh -i ${KEY_NAME}.pem ec2-user@<public-dns-name>" echo "Replace <public-dns-name> with the PublicDnsName from the instance details above." echo "" # Ask user if they want to clean up resources echo "===================================================" echo "CLEANUP CONFIRMATION" echo "===================================================" echo "Do you want to clean up all created resources? (y/n): " read -r CLEANUP_CHOICE if [[ $CLEANUP_CHOICE =~ ^[Yy]$ ]]; then cleanup_resources else echo "" echo "Resources have not been cleaned up. You can manually clean them up later with:" echo "1. Terminate the EC2 instance: aws ec2 terminate-instances --instance-ids $INSTANCE_ID" echo "2. Delete the security group: aws ec2 delete-security-group --group-id $SECURITY_GROUP_ID" echo "3. Delete the key pair: aws ec2 delete-key-pair --key-name $KEY_NAME" echo "" fi echo "Script completed. See $LOG_FILE for the complete log."-
For API details, see the following topics in AWS CLI Command Reference.
-
Get started with Aws Direct Connect
Getting started with Amazon DocumentDB