As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Começando com o Elemental MediaConnect
O exemplo de código a seguir mostra como:
Verifique o acesso ao Elemental MediaConnect
Crie um fluxo
Adicionar uma saída
Limpar os recursos
- Bash
-
- AWS CLI com script Bash
-
nota
Tem mais sobre GitHub. Encontre o exemplo completo e saiba como configurar e executar no repositório Sample developer tutorials
. #!/bin/bash # AWS Elemental MediaConnect Getting Started Tutorial Script # This script creates a MediaConnect flow, adds an output, grants an entitlement, # and then cleans up the resources. set -euo pipefail # Security: Restrict umask to prevent world-readable files umask 0077 # Set up logging with restricted permissions LOG_FILE="mediaconnect-tutorial.log" touch "$LOG_FILE" chmod 600 "$LOG_FILE" exec > >(tee -a "$LOG_FILE") 2>&1 echo "Starting AWS Elemental MediaConnect tutorial script at $(date)" echo "All commands and outputs will be logged to $LOG_FILE" # Tags for all resources TAGS_ARRAY=("Key=project,Value=doc-smith" "Key=tutorial,Value=aws-elemental-mediaconnect-gs") # Function to handle errors handle_error() { echo "ERROR: $1" >&2 echo "Attempting to clean up resources..." cleanup_resources exit 1 } # Function to validate AWS CLI is available validate_aws_cli() { if ! command -v aws &> /dev/null; then handle_error "AWS CLI is not installed or not in PATH" fi # Security: Verify AWS CLI version is recent local aws_version aws_version=$(aws --version 2>&1 | head -1) echo "AWS CLI version: $aws_version" if ! aws sts get-caller-identity &> /dev/null; then handle_error "AWS credentials are not configured or invalid" fi # Security: Validate caller identity local account_id account_id=$(aws sts get-caller-identity --query Account --output text 2>/dev/null) if [ -z "$account_id" ]; then handle_error "Failed to retrieve AWS account ID" fi echo "AWS Account ID: $account_id" } # Function to safely extract JSON values using jq (preferred) or fallback extract_json_value() { local json_output="$1" local key="$2" if [ -z "$json_output" ]; then return 1 fi # Security: Use jq if available for safer JSON parsing if command -v jq &> /dev/null; then echo "$json_output" | jq -r ".${key} // empty" 2>/dev/null || return 1 else # Fallback with additional validation if ! echo "$json_output" | grep -q "\"$key\""; then return 1 fi echo "$json_output" | grep -o "\"$key\": \"[^\"]*" | head -1 | cut -d'"' -f4 fi } # Function to tag MediaConnect resource tag_mediaconnect_resource() { local resource_arn="$1" echo "Tagging resource: $resource_arn" for tag in "${TAGS_ARRAY[@]}"; do if ! aws mediaconnect tag-resource --resource-arn "$resource_arn" --tags "$tag" 2>&1; then echo "WARNING: Failed to apply tag $tag to resource" fi done } # Function to clean up resources cleanup_resources() { echo "Cleaning up resources..." if [ -n "${FLOW_ARN:-}" ]; then # Security: Validate ARN format before using it if [[ ! "$FLOW_ARN" =~ ^arn:aws:mediaconnect:[a-z0-9-]+:[0-9]+:flow:[a-zA-Z0-9:-]+$ ]]; then echo "WARNING: Invalid Flow ARN format, skipping cleanup: $FLOW_ARN" return 1 fi # Check flow status before attempting to stop echo "Checking flow status..." local flow_status_output if flow_status_output=$(aws mediaconnect describe-flow --flow-arn "$FLOW_ARN" --query "Flow.Status" --output text 2>&1); then echo "Current flow status: $flow_status_output" if [ "$flow_status_output" == "ACTIVE" ] || [ "$flow_status_output" == "UPDATING" ]; then echo "Stopping flow: $FLOW_ARN" if aws mediaconnect stop-flow --flow-arn "$FLOW_ARN" 2>&1; then # Wait for flow to stop before deleting echo "Waiting for flow to stop..." sleep 10 else echo "WARNING: Failed to stop flow. Attempting to delete anyway..." fi else echo "Flow is not in ACTIVE or UPDATING state, skipping stop operation." fi # Delete the flow echo "Deleting flow: $FLOW_ARN" if aws mediaconnect delete-flow --flow-arn "$FLOW_ARN" 2>&1; then echo "Flow deleted successfully" else echo "WARNING: Failed to delete flow. You may need to manually delete it from the AWS console." fi else echo "WARNING: Could not check flow status" fi fi } # Set trap to cleanup on script exit trap cleanup_resources EXIT # Validate AWS CLI setup validate_aws_cli # Get the current AWS region aws_region="" if aws_region=$(aws configure get region 2>/dev/null); then if [ -z "$aws_region" ]; then handle_error "Failed to get AWS region. Please make sure AWS CLI is configured." fi else handle_error "Failed to retrieve AWS region configuration" fi # Security: Validate region format if [[ ! "$aws_region" =~ ^[a-z]{2}-[a-z]+-[0-9]$ ]]; then handle_error "Invalid AWS region format: $aws_region" fi AWS_REGION="$aws_region" echo "Using AWS Region: $AWS_REGION" # Get available availability zones in the current region echo "Getting available availability zones in region $AWS_REGION..." az_output="" if az_output=$(aws ec2 describe-availability-zones --region "$AWS_REGION" --query "AvailabilityZones[0].ZoneName" --output text 2>&1); then AVAILABILITY_ZONE="$az_output" if [ -z "$AVAILABILITY_ZONE" ]; then handle_error "Failed to retrieve availability zones" fi # Security: Validate AZ format if [[ ! "$AVAILABILITY_ZONE" =~ ^[a-z]{2}-[a-z]+-[0-9][a-z]$ ]]; then handle_error "Invalid availability zone format: $AVAILABILITY_ZONE" fi echo "Using availability zone: $AVAILABILITY_ZONE" else handle_error "Failed to get availability zones" fi # Generate a unique suffix for resource names SUFFIX=$(date +%s | cut -c 6-10) FLOW_NAME="AwardsNYCShow-${SUFFIX}" SOURCE_NAME="AwardsNYCSource-${SUFFIX}" OUTPUT_NAME="AwardsNYCOutput-${SUFFIX}" ENTITLEMENT_NAME="PhillyTeam-${SUFFIX}" echo "Using the following resource names:" echo "Flow name: $FLOW_NAME" echo "Source name: $SOURCE_NAME" echo "Output name: $OUTPUT_NAME" echo "Entitlement name: $ENTITLEMENT_NAME" # Step 1: Verify access to MediaConnect echo "Step 1: Verifying access to AWS Elemental MediaConnect..." list_flows_output="" if list_flows_output=$(aws mediaconnect list-flows 2>&1); then echo "$list_flows_output" else handle_error "Failed to list flows. Please check your AWS credentials and permissions." fi # Step 2: Create a flow echo "Step 2: Creating a flow..." create_flow_output="" if create_flow_output=$(aws mediaconnect create-flow \ --availability-zone "$AVAILABILITY_ZONE" \ --name "$FLOW_NAME" \ --source "Name=$SOURCE_NAME,Protocol=zixi-push,WhitelistCidr=10.24.34.0/23,StreamId=ZixiAwardsNYCFeed" 2>&1); then echo "$create_flow_output" else handle_error "Failed to create flow" fi # Extract the flow ARN from the output FLOW_ARN=$(echo "$create_flow_output" | jq -r '.Flow.FlowArn // empty' 2>/dev/null) if [ -z "$FLOW_ARN" ]; then FLOW_ARN=$(echo "$create_flow_output" | grep -o '"FlowArn": "[^"]*' | head -1 | cut -d'"' -f4) fi if [ -z "$FLOW_ARN" ]; then handle_error "Failed to extract flow ARN from output" fi echo "Flow ARN: $FLOW_ARN" # Validate flow ARN format if [[ ! "$FLOW_ARN" =~ ^arn:aws:mediaconnect:[a-z0-9-]+:[0-9]+:flow:[a-zA-Z0-9:-]+$ ]]; then handle_error "Invalid Flow ARN format: $FLOW_ARN" fi # Tag the flow tag_mediaconnect_resource "$FLOW_ARN" # Step 3: Add an output echo "Step 3: Adding an output to the flow..." add_output_output="" if add_output_output=$(aws mediaconnect add-flow-outputs \ --flow-arn "$FLOW_ARN" \ --outputs "Name=$OUTPUT_NAME,Protocol=zixi-push,Destination=198.51.100.11,Port=1024,StreamId=ZixiAwardsOutput" 2>&1); then echo "$add_output_output" else handle_error "Failed to add output to flow" fi # Extract the output ARN output_arn="" output_arn=$(echo "$add_output_output" | jq -r ".Output.OutputArn // empty" 2>/dev/null) if [ -z "$output_arn" ]; then output_arn=$(echo "$add_output_output" | grep -o '"OutputArn": "[^"]*' | head -1 | cut -d'"' -f4); fi if [ -z "$output_arn" ]; then echo "WARNING: Failed to extract output ARN from output" else OUTPUT_ARN="$output_arn" echo "Output ARN: $OUTPUT_ARN" tag_mediaconnect_resource "$OUTPUT_ARN" fi # Step 4: Grant an entitlement echo "Step 4: Granting an entitlement..." grant_entitlement_output="" if grant_entitlement_output=$(aws mediaconnect grant-flow-entitlements \ --flow-arn "$FLOW_ARN" \ --entitlements "Name=$ENTITLEMENT_NAME,Subscribers=222233334444" 2>&1); then echo "$grant_entitlement_output" else handle_error "Failed to grant entitlement" fi # Extract the entitlement ARN entitlement_arn="" entitlement_arn=$(echo "$grant_entitlement_output" | jq -r '.Entitlement.EntitlementArn // empty' 2>/dev/null) if [ -z "$entitlement_arn" ]; then entitlement_arn=$(echo "$grant_entitlement_output" | grep -o '"EntitlementArn": "[^"]*' | head -1 | cut -d'"' -f4) fi if [ -z "$entitlement_arn" ]; then echo "WARNING: Failed to extract entitlement ARN from output" else ENTITLEMENT_ARN="$entitlement_arn" echo "Entitlement ARN: $ENTITLEMENT_ARN" tag_mediaconnect_resource "$ENTITLEMENT_ARN" fi # Step 5: List entitlements to share with affiliates echo "Step 5: Listing entitlements for the flow..." describe_flow_output="" if describe_flow_output=$(aws mediaconnect describe-flow --flow-arn "$FLOW_ARN" --query "Flow.Entitlements" 2>&1); then echo "Entitlements for the flow:" echo "$describe_flow_output" else handle_error "Failed to describe flow" fi # Display information to share with affiliates echo "" echo "Information to share with your Philadelphia affiliate:" echo "Entitlement ARN: ${ENTITLEMENT_ARN:-N/A}" echo "AWS Region: $AWS_REGION" # Display resource summary echo "" echo "===========================================" echo "RESOURCE SUMMARY" echo "===========================================" echo "The following resources were created:" echo "1. Flow: $FLOW_NAME (ARN: $FLOW_ARN)" echo "2. Output: $OUTPUT_NAME (ARN: ${OUTPUT_ARN:-N/A})" echo "3. Entitlement: $ENTITLEMENT_NAME (ARN: ${ENTITLEMENT_ARN:-N/A})" echo "" echo "===========================================" echo "CLEANUP CONFIRMATION" echo "===========================================" echo "Automatically cleaning up all created resources..." echo "Script completed at $(date)"-
Consulte detalhes da API nos tópicos a seguir na Referência de comandos da AWS CLI .
-
Para obter uma lista completa dos guias do desenvolvedor do AWS SDK e exemplos de código, consulteCrie recursos do Amazon EC2 usando um AWS SDK. Este tópico também inclui informações sobre como começar e detalhes sobre versões anteriores do SDK.