Doc AWS SDK 예제 GitHub 리포지토리에서 더 많은 SDK 예제를 사용할 수 있습니다. AWS
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
DynamoDB 시작하기
다음 코드 예제에서는 다음과 같은 작업을 수행하는 방법을 보여줍니다.
DynamoDB에서 테이블 생성
DynamoDB 테이블의 데이터 업데이트
DynamoDB 테이블의 데이터 쿼리
DynamoDB 테이블 삭제
- Bash
-
- AWS CLI Bash 스크립트 사용
-
참고
GitHub에 더 많은 내용이 있습니다. 샘플 개발자 튜토리얼
리포지토리에서 전체 예제를 찾아보고 설정 및 실행 방법을 배워보세요. #!/bin/bash # DynamoDB Getting Started Tutorial Script # This script demonstrates basic operations with Amazon DynamoDB: # - Creating a table # - Writing data to the table # - Reading data from the table # - Updating data in the table # - Querying data in the table # - Deleting the table (cleanup) set -uo pipefail # Set up logging with secure permissions LOG_DIR="${XDG_STATE_HOME:-.}/dynamodb-tutorial-logs" mkdir -p "$LOG_DIR" LOG_FILE="$LOG_DIR/dynamodb-tutorial-$(date +%Y%m%d-%H%M%S).log" chmod 700 "$LOG_DIR" touch "$LOG_FILE" chmod 600 "$LOG_FILE" exec > >(tee -a "$LOG_FILE") 2>&1 echo "Starting DynamoDB Getting Started Tutorial at $(date)" echo "Logging to $LOG_FILE" # Validate AWS CLI is configured if ! command -v aws &> /dev/null; then echo "ERROR: AWS CLI is not installed or not in PATH" exit 1 fi # Check AWS credentials are available if ! aws sts get-caller-identity &> /dev/null; then echo "ERROR: AWS credentials not configured or invalid" exit 1 fi # Function to check for errors in command output check_error() { local output=$1 local cmd_name=$2 if echo "$output" | grep -qi "error\|failed"; then echo "ERROR detected in $cmd_name command:" >&2 echo "$output" >&2 return 1 fi return 0 } # Function to wait for table to be in ACTIVE state wait_for_table_active() { local table_name=$1 local max_attempts=60 local attempt=0 local status="" echo "Waiting for table $table_name to become ACTIVE..." while [[ "$status" != "ACTIVE" && $attempt -lt $max_attempts ]]; do sleep 5 status=$(aws dynamodb describe-table --table-name "$table_name" --query "Table.TableStatus" --output text 2>/dev/null || echo "UNKNOWN") echo "Current status: $status" ((attempt++)) done if [[ "$status" != "ACTIVE" ]]; then echo "ERROR: Table $table_name did not become ACTIVE within timeout period" >&2 return 1 fi echo "Table $table_name is now ACTIVE" return 0 } # Track created resources for cleanup declare -a RESOURCES=() # Cleanup function cleanup() { local exit_code=$? if [[ $exit_code -ne 0 ]]; then echo "Script encountered an error (exit code: $exit_code)" >&2 fi echo "" echo "===========================================" echo "CLEANUP" echo "===========================================" echo "Resources to clean up:" for resource in "${RESOURCES[@]+"${RESOURCES[@]}"}"; do echo "- $resource" done echo "" if [[ ${#RESOURCES[@]} -gt 0 ]]; then echo "Proceeding with cleanup of all created resources..." for resource in "${RESOURCES[@]+"${RESOURCES[@]}"}"; do if [[ "$resource" == Table:* ]]; then local table_name="${resource#Table:}" echo "Deleting table: $table_name" if aws dynamodb delete-table --table-name "$table_name" 2>/dev/null; then echo "Waiting for table deletion to complete..." aws dynamodb wait table-not-exists --table-name "$table_name" 2>/dev/null || true else echo "Warning: Failed to delete table $table_name" >&2 fi fi done echo "Cleanup completed." fi return $exit_code } trap cleanup EXIT # Validate table name validate_table_name() { local name=$1 if [[ ! $name =~ ^[a-zA-Z0-9._-]+$ ]] || [[ ${#name} -gt 255 ]]; then echo "ERROR: Invalid table name: $name" >&2 return 1 fi return 0 } # Step 1: Create a table in DynamoDB echo "Step 1: Creating Music table in DynamoDB..." TABLE_NAME="Music" validate_table_name "$TABLE_NAME" CREATE_TABLE_OUTPUT=$(aws dynamodb create-table \ --table-name "$TABLE_NAME" \ --attribute-definitions \ AttributeName=Artist,AttributeType=S \ AttributeName=SongTitle,AttributeType=S \ --key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \ --billing-mode PAY_PER_REQUEST \ --table-class STANDARD \ --tags Key=project,Value=doc-smith Key=tutorial,Value=amazon-dynamodb-gs 2>&1) || { echo "ERROR: Failed to create table" >&2 exit 1 } check_error "$CREATE_TABLE_OUTPUT" "create-table" echo "$CREATE_TABLE_OUTPUT" # Add table to resources list RESOURCES+=("Table:$TABLE_NAME") # Wait for table to be active wait_for_table_active "$TABLE_NAME" # Enable point-in-time recovery (best practice) echo "Enabling point-in-time recovery for the $TABLE_NAME table..." PITR_OUTPUT=$(aws dynamodb update-continuous-backups \ --table-name "$TABLE_NAME" \ --point-in-time-recovery-specification PointInTimeRecoveryEnabled=true 2>&1) || { echo "ERROR: Failed to enable PITR" >&2 exit 1 } check_error "$PITR_OUTPUT" "update-continuous-backups" echo "$PITR_OUTPUT" # Step 2: Write data to the DynamoDB table echo "Step 2: Writing data to the $TABLE_NAME table..." # Use a temporary file for item data ITEMS_TEMP=$(mktemp) trap "rm -f '$ITEMS_TEMP'" EXIT cat > "$ITEMS_TEMP" << 'EOF' {"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Call Me Today"}, "AlbumTitle": {"S": "Somewhat Famous"}, "Awards": {"N": "1"}} {"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Howdy"}, "AlbumTitle": {"S": "Somewhat Famous"}, "Awards": {"N": "2"}} {"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}, "AlbumTitle": {"S": "Songs About Life"}, "Awards": {"N": "10"}} {"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "PartiQL Rocks"}, "AlbumTitle": {"S": "Another Album Title"}, "Awards": {"N": "8"}} EOF declare -i item_num=0 while IFS= read -r item_data; do ((item_num++)) ITEM_OUTPUT=$(aws dynamodb put-item \ --table-name "$TABLE_NAME" \ --item "$item_data" 2>&1) || { echo "ERROR: Failed to put item $item_num" >&2 exit 1 } check_error "$ITEM_OUTPUT" "put-item (item $item_num)" echo "Item $item_num added successfully" done < "$ITEMS_TEMP" # Step 3: Read data from the DynamoDB table echo "Step 3: Reading data from the $TABLE_NAME table..." # Get a specific item GET_ITEM_OUTPUT=$(aws dynamodb get-item --consistent-read \ --table-name "$TABLE_NAME" \ --key '{"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}}' 2>&1) || { echo "ERROR: Failed to get item" >&2 exit 1 } check_error "$GET_ITEM_OUTPUT" "get-item" echo "Retrieved item:" echo "$GET_ITEM_OUTPUT" # Step 4: Update data in the DynamoDB table echo "Step 4: Updating data in the $TABLE_NAME table..." # Update an item UPDATE_ITEM_OUTPUT=$(aws dynamodb update-item \ --table-name "$TABLE_NAME" \ --key '{"Artist": {"S": "Acme Band"}, "SongTitle": {"S": "Happy Day"}}' \ --update-expression "SET AlbumTitle = :newval" \ --expression-attribute-values '{":newval": {"S": "Updated Album Title"}}' \ --return-values ALL_NEW 2>&1) || { echo "ERROR: Failed to update item" >&2 exit 1 } check_error "$UPDATE_ITEM_OUTPUT" "update-item" echo "Updated item:" echo "$UPDATE_ITEM_OUTPUT" # Step 5: Query data in the DynamoDB table echo "Step 5: Querying data in the $TABLE_NAME table..." # Query items by Artist QUERY_OUTPUT=$(aws dynamodb query \ --table-name "$TABLE_NAME" \ --key-condition-expression "Artist = :name" \ --expression-attribute-values '{":name": {"S": "Acme Band"}}' 2>&1) || { echo "ERROR: Failed to query table" >&2 exit 1 } check_error "$QUERY_OUTPUT" "query" echo "Query results:" echo "$QUERY_OUTPUT" echo "DynamoDB Getting Started Tutorial completed successfully at $(date)" echo "Log file: $LOG_FILE"-
API 세부 정보는 AWS CLI 명령 참조의 다음 토픽을 참조하세요.
-
이미지에서 PPE 감지
PartiQL INSERT를 사용하여 데이터 삽입