āĻ†āĻŽāĻŋ āĻ†āĻŽāĻžāĻ° āĻŦāĻžāĻ•āĻŋ āĻœā§€āĻŦāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻĢāĻ°ā§āĻŽā§‡āĻļāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻāĻ‡ 6 āĻŸāĻŋ āĻĒāĻžāĻ  āĻļāĻŋāĻ–ā§‡āĻ›āĻŋāĨ¤

āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻļā§āĻ°ā§ āĻ•āĻ°āĻ˛āĻžāĻŽ āĻŽā§‡āĻ˜ āĻ—āĻ āĻ¨ 4 āĻŦāĻ›āĻ° āĻ†āĻ—ā§‡. āĻ¤āĻžāĻ°āĻĒāĻ° āĻĨā§‡āĻ•ā§‡ āĻ†āĻŽāĻŋ āĻ…āĻ¨ā§‡āĻ• āĻĒāĻ°āĻŋāĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ­ā§‡āĻ™ā§‡ āĻĢā§‡āĻ˛ā§‡āĻ›āĻŋ, āĻāĻŽāĻ¨āĻ•āĻŋ āĻ¯ā§‡āĻ—ā§āĻ˛āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻ‰ā§ŽāĻĒāĻžāĻĻāĻ¨ā§‡ āĻ›āĻŋāĻ˛āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻ¤āĻŦāĻžāĻ° āĻ†āĻŽāĻŋ āĻ•āĻŋāĻ›ā§ āĻ—ā§‹āĻ˛āĻŽāĻžāĻ˛ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ†āĻŽāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ•āĻŋāĻ›ā§ āĻļāĻŋāĻ–ā§‡āĻ›āĻŋāĨ¤ āĻāĻ‡ āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡, āĻ†āĻŽāĻŋ āĻļāĻŋāĻ–ā§‡āĻ›āĻŋ āĻāĻŽāĻ¨ āĻ•āĻŋāĻ›ā§ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻžāĻ  āĻļā§‡āĻ¯āĻŧāĻžāĻ° āĻ•āĻ°āĻŦāĨ¤

āĻ†āĻŽāĻŋ āĻ†āĻŽāĻžāĻ° āĻŦāĻžāĻ•āĻŋ āĻœā§€āĻŦāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻĢāĻ°ā§āĻŽā§‡āĻļāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻāĻ‡ 6 āĻŸāĻŋ āĻĒāĻžāĻ  āĻļāĻŋāĻ–ā§‡āĻ›āĻŋāĨ¤

āĻĒāĻžāĻ  1: āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨ā§ˇ

āĻ†āĻŽāĻŋ āĻ•āĻžāĻœ āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡āĻ‡ āĻ†āĻŽāĻŋ āĻāĻ‡ āĻĒāĻžāĻ āĻŸāĻŋ āĻļāĻŋāĻ–ā§‡āĻ›āĻŋ āĻŽā§‡āĻ˜ āĻ—āĻ āĻ¨. āĻ†āĻŽāĻŋ āĻ¤āĻ–āĻ¨ āĻ āĻŋāĻ• āĻ•ā§€ āĻ­ā§‡āĻ™ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ¤āĻž āĻŽāĻ¨ā§‡ āĻ¨ā§‡āĻ‡, āĻ¤āĻŦā§‡ āĻ†āĻŽāĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŋ āĻ¯ā§‡ āĻ†āĻŽāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ aws āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻĢāĻ°ā§āĻŽā§‡āĻļāĻ¨ āĻ†āĻĒāĻĄā§‡āĻŸ. āĻāĻ‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ āĻŽā§‹āĻ¤āĻžāĻ¯āĻŧā§‡āĻ¨ āĻ•āĻ°āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻ•ā§‹āĻ¨ā§‹ āĻŦā§ˆāĻ§āĻ¤āĻž āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸāĻŸāĻŋ āĻ°ā§‹āĻ˛ āĻ†āĻ‰āĻŸ āĻ•āĻ°ā§‡āĨ¤ āĻ†āĻŽāĻŋ āĻŽāĻ¨ā§‡ āĻ•āĻ°āĻŋ āĻ¨āĻž āĻ¯ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§‡āĻ¨ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§‹āĻ¨āĻ“ āĻŦā§āĻ¯āĻžāĻ–ā§āĻ¯āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤

āĻāĻ‡ āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻžāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻŋ āĻ…āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨, āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ¸ā§ƒāĻˇā§āĻŸāĻŋ-āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨-āĻ¸ā§‡āĻŸ

# OPERATION is either "UPDATE" or "CREATE"
changeset_id=$(aws cloudformation create-change-set 
    --change-set-name "$CHANGE_SET_NAME" 
    --stack-name "$STACK_NAME" 
    --template-body "$TPL_PATH" 
    --change-set-type "$OPERATION" 
    --parameters "$PARAMETERS" 
    --output text 
    --query Id)

aws cloudformation wait 
    change-set-create-complete --change-set-name "$changeset_id"

āĻāĻ•āĻŦāĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¸ā§‡āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ˛ā§‡, āĻāĻŸāĻŋ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ•ā§‹āĻ¨ āĻĒā§āĻ°āĻ­āĻžāĻŦ āĻĢā§‡āĻ˛ā§‡ āĻ¨āĻžāĨ¤ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āĻ° āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤ā§‡, āĻšā§‡āĻžā§āĻœāĻ¸ā§‡āĻŸ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĒā§āĻ°āĻ•ā§ƒāĻ¤ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ•ā§‡ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻ•āĻ°ā§‡ āĻ¨āĻžāĨ¤ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, āĻāĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻ¯āĻž āĻ†āĻĒāĻ¨āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§‡āĻ° āĻ†āĻ—ā§‡ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ†āĻĒāĻ¨āĻŋ aws āĻ•āĻ¨āĻ¸ā§‹āĻ˛ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āĻ°ā§‡āĻ¨, āĻ¤āĻžāĻšāĻ˛ā§‡ CLI-āĻ¤ā§‡ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨:

# this command is presented only for demonstrational purposes.
# the real command should take pagination into account
aws cloudformation describe-change-set 
    --change-set-name "$changeset_id" 
    --query 'Changes[*].ResourceChange.{Action:Action,Resource:ResourceType,ResourceId:LogicalResourceId,ReplacementNeeded:Replacement}' 
    --output table

āĻāĻ‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻ‰āĻ¤ā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤:

--------------------------------------------------------------------
|                         DescribeChangeSet                        |
+---------+--------------------+----------------------+------------+
| Action  | ReplacementNeeded  |      Resource        | ResourceId |
+---------+--------------------+----------------------+------------+
|  Modify | True               |  AWS::ECS::Cluster   |  MyCluster |
|  Replace| True               |  AWS::RDS::DBInstance|  MyDB      |
|  Add    | None               |  AWS::SNS::Topic     |  MyTopic   |
+---------+--------------------+----------------------+------------+

āĻ…ā§āĻ¯āĻžāĻ•āĻļāĻ¨ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻŦāĻŋāĻļā§‡āĻˇ āĻŽāĻ¨ā§‹āĻ¯ā§‹āĻ— āĻĻāĻŋāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž, āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻž āĻŦāĻž āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ - āĻ¸āĻ¤ā§āĻ¯. āĻāĻ—ā§āĻ˛āĻŋ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻŦāĻŋāĻĒāĻœā§āĻœāĻ¨āĻ• āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ¤āĻĨā§āĻ¯ āĻšāĻžāĻ°āĻžāĻ¨ā§‹āĻ° āĻĻāĻŋāĻ•ā§‡ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻŋāĻ¤ āĻ•āĻ°ā§‡āĨ¤

āĻāĻ•āĻŦāĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ˛ā§‡, āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ā§ˇ

aws cloudformation execute-change-set --change-set-name "$changeset_id"

operation_lowercase=$(echo "$OPERATION" | tr '[:upper:]' '[:lower:]')
aws cloudformation wait "stack-${operation_lowercase}-complete" 
    --stack-name "$STACK_NAME"

āĻĒāĻžāĻ  2: āĻ°āĻžāĻˇā§āĻŸā§āĻ°ā§€āĻ¯āĻŧ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻŦāĻž āĻ¸āĻ°āĻžāĻ¨ā§‹ āĻĨā§‡āĻ•ā§‡ āĻ†āĻŸāĻ•āĻžāĻ¤ā§‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻ¨ā§€āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨

āĻ•āĻ–āĻ¨āĻ“ āĻ•āĻ–āĻ¨āĻ“ āĻ•ā§‡āĻŦāĻ˛ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–āĻžāĻ‡ āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻ¨āĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻ°āĻž āĻ¸āĻŦāĻžāĻ‡ āĻŽāĻžāĻ¨ā§āĻˇ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž āĻ¸āĻŦāĻžāĻ‡ āĻ­ā§āĻ˛ āĻ•āĻ°āĻŋāĨ¤ āĻ†āĻŽāĻ°āĻž āĻšā§‡āĻžā§āĻœāĻ¸ā§‡āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻ•āĻŋāĻ›ā§āĻ•ā§āĻˇāĻŖ āĻĒāĻ°ā§‡, āĻ†āĻŽāĻžāĻ° āĻ¸āĻ¤ā§€āĻ°ā§āĻĨ āĻ…āĻœāĻžāĻ¨ā§āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°ā§‡ āĻ¯āĻžāĻ° āĻĢāĻ˛ā§‡ āĻāĻ•āĻŸāĻŋ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ†āĻĒāĻĄā§‡āĻŸ āĻšāĻ¯āĻŧāĨ¤ āĻ–āĻžāĻ°āĻžāĻĒ āĻ•āĻŋāĻ›ā§ āĻ˜āĻŸā§‡āĻ¨āĻŋ āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻ›āĻŋāĻ˛āĨ¤

āĻ¯āĻĻāĻŋāĻ“ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°ā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤āĻ•āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻœāĻŋāĻœā§āĻžāĻžāĻ¸āĻž āĻ•āĻ°ā§‡āĻ›ā§‡, āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻŸāĻŋ āĻāĻĄāĻŧāĻŋāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡ āĻ•āĻžāĻ°āĻŖ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻŸāĻŋ āĻāĻ¤ āĻŦāĻĄāĻŧ āĻ›āĻŋāĻ˛ āĻ¯ā§‡ āĻāĻŸāĻŋ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¨ā§‡ āĻĢāĻŋāĻŸ āĻšāĻ¯āĻŧāĻ¨āĻŋā§ˇ āĻāĻŦāĻ‚ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ• āĻ†āĻĒāĻĄā§‡āĻŸ āĻ›āĻŋāĻ˛, āĻ¤āĻžāĻ‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ–ā§āĻŦ āĻŦā§‡āĻļāĻŋ āĻŽāĻ¨ā§‹āĻ¯ā§‹āĻ— āĻĻā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧāĻ¨āĻŋāĨ¤

āĻāĻŽāĻ¨ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻ–āĻ¨āĻ‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻŦāĻž āĻ…āĻĒāĻ¸āĻžāĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¨ āĻ¨āĻžāĨ¤ āĻāĻ—ā§āĻ˛āĻŋ āĻ¸ā§āĻŸā§‡āĻŸāĻĢā§āĻ˛ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž, āĻ¯ā§‡āĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ RDS āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻž āĻāĻ•āĻŸāĻŋ āĻ‡āĻ˛āĻžāĻ¸ā§āĻŸāĻŋāĻ•āĻ¸āĻžāĻ°ā§āĻš āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°, āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĨ¤ āĻāĻŸāĻž āĻ­āĻžāĻ˛ āĻšāĻŦā§‡ āĻ¯āĻĻāĻŋ aws āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻ–ā§āĻ¯āĻžāĻ¨ āĻ•āĻ°ā§‡ āĻ¯āĻĻāĻŋ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧāĨ¤ āĻ¸ā§ŒāĻ­āĻžāĻ—ā§āĻ¯āĻ•ā§āĻ°āĻŽā§‡, āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻĢāĻ°ā§āĻŽā§‡āĻļāĻ¨ā§‡ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻ•ā§‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻĒāĻ˛āĻŋāĻ¸āĻŋ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ†āĻ°āĻ“ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨:

STACK_NAME=$1
RESOURCE_ID=$2

POLICY_JSON=$(cat <<EOF
{
    "Statement" : [{
        "Effect" : "Deny",
        "Action" : [
            "Update:Replace",
            "Update:Delete"
        ],
        "Principal": "*",
        "Resource" : "LogicalResourceId/$RESOURCE_ID"
    }]
}
EOF
)

aws cloudformation set-stack-policy --stack-name "$STACK_NAME" 
    --stack-policy-body "$POLICY_JSON"

āĻĒāĻžāĻ  3: āĻ—ā§‹āĻĒāĻ¨ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ UsePreviousValue āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ RDS mysql āĻ¸āĻ¤ā§āĻ¤āĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ¨, AWS-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ MasterUsername āĻāĻŦāĻ‚ MasterUserPassword āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•ā§‹āĻĄā§‡ āĻ—ā§‹āĻĒāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž āĻ¨āĻž āĻ°āĻžāĻ–āĻžāĻ‡ āĻ­āĻžāĻ˛ āĻāĻŦāĻ‚ āĻ†āĻŽāĻŋ āĻāĻ•ā§‡āĻŦāĻžāĻ°ā§‡ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°āĻ¤ā§‡ āĻšā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ "āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻŽā§‡āĻ•āĻžāĻ¨āĻŋāĻœāĻŽ" āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ†āĻ—ā§‡ s3 āĻĨā§‡āĻ•ā§‡ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻŦā§‡, āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¨āĻž āĻ¯āĻžāĻ¯āĻŧ, āĻ¨āĻ¤ā§āĻ¨ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ s3 āĻ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŋāĻ¤āĨ¤

āĻāĻ‡ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻĢāĻ°ā§āĻŽā§‡āĻļāĻ¨ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧā§‡āĻŸ-āĻšā§‡āĻžā§āĻœ-āĻ¸ā§‡āĻŸ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŸāĻŋ āĻ˜āĻŸā§‡āĻ›ā§‡ āĻ¯ā§‡ s3 āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ—āĻŸāĻŋ āĻšāĻžāĻ°āĻŋāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡, āĻāĻŦāĻ‚ āĻ†āĻŽāĻžāĻ° "āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻŽā§‡āĻ•āĻžāĻ¨āĻŋāĻœāĻŽ" āĻāĻŸāĻŋāĻ•ā§‡ āĻ¨āĻ¤ā§āĻ¨ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤

āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻŋ āĻāĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻ‰āĻ¤ā§āĻĒāĻžāĻĻāĻ¨ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻŋ āĻāĻŦāĻ‚ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ†āĻŦāĻžāĻ° āĻ˜āĻŸā§‡ āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•āĻŸāĻŋāĻ•ā§‡ āĻ¨āĻ¤ā§āĻ¨ āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻ¸āĻš āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻŦā§‡āĨ¤ āĻāĻ‡ āĻŦāĻŋāĻļā§‡āĻˇ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻ–āĻžāĻ°āĻžāĻĒ āĻ•āĻŋāĻ›ā§āĻ‡ āĻ˜āĻŸāĻŦā§‡ āĻ¨āĻžāĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ†āĻŽāĻŋ āĻāĻ‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻĒāĻ°āĻŋāĻ¤ā§āĻ¯āĻžāĻ— āĻ•āĻ°ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŦāĻžāĻ° āĻļāĻ‚āĻ¸āĻžāĻĒāĻ¤ā§āĻ° āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻ…āĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻāĻŦāĻ‚ āĻĒāĻ°ā§‡, āĻ¯āĻ–āĻ¨ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧ, āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°ā§‡āĻ° āĻ—ā§‹āĻĒāĻ¨ āĻŽāĻžāĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, āĻ†āĻŽāĻŋ āĻ•ā§‡āĻŦāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ PreviousValue=āĻ¸āĻ¤ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨:

aws cloudformation create-change-set 
    --change-set-name "$CHANGE_SET_NAME" 
    --stack-name "$STACK_NAME" 
    --template-body "$TPL_PATH" 
    --change-set-type "UPDATE" 
    --parameters "ParameterKey=MasterUserPassword,UsePreviousValue=true"

āĻĒāĻžāĻ  4: āĻ°ā§‹āĻ˛āĻŦā§āĻ¯āĻžāĻ• āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨

āĻ†āĻŽāĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻ†āĻ°ā§‡āĻ•āĻŸāĻŋ āĻĻāĻ˛ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›ā§‡ āĻŽā§‡āĻ˜ āĻ—āĻ āĻ¨āĻĄāĻžāĻ•āĻž āĻ°ā§‹āĻ˛āĻŦā§āĻ¯āĻžāĻ• āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨. āĻ†āĻŽāĻŋ āĻ†āĻ—ā§‡ āĻāĻŸāĻŋ āĻœā§āĻĄāĻŧā§‡ āĻ†āĻ¸āĻŋāĻ¨āĻŋ āĻāĻŦāĻ‚ āĻĻā§āĻ°ā§āĻ¤ āĻŦā§āĻāĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ¯ā§‡ āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻ° āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻļā§€āĻ¤āĻ˛ āĻ•āĻ°ā§‡ āĻ¤ā§āĻ˛āĻŦā§‡āĨ¤ āĻāĻ–āĻ¨ āĻ†āĻŽāĻŋ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻĢāĻ°ā§āĻŽā§‡āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ˛ā§āĻ¯āĻžāĻŽā§āĻŦāĻĄāĻž āĻŦāĻž āĻ‡āĻ¸āĻŋāĻāĻ¸-āĻ āĻ†āĻŽāĻžāĻ° āĻ•ā§‹āĻĄ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŋāĨ¤

āĻāĻŸāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡: āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§āĻ¨ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻ“āĻ¯āĻŧāĻžāĻš āĻ…ā§āĻ¯āĻžāĻ˛āĻžāĻ°ā§āĻŽ āĻ†āĻ°ā§āĻ¨ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°ā§‡ --āĻ°ā§‹āĻ˛āĻŦā§āĻ¯āĻžāĻ•-āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨āĻ¯āĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¸ā§‡āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ¨āĨ¤ āĻĒāĻ°ā§‡, āĻ¯āĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸ āĻšāĻžāĻ˛āĻžāĻ¨, aws āĻ…āĻ¨ā§āĻ¤āĻ¤ āĻāĻ• āĻŽāĻŋāĻ¨āĻŋāĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…ā§āĻ¯āĻžāĻ˛āĻžāĻ°ā§āĻŽ āĻ¨āĻŋāĻ°ā§€āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡āĨ¤ āĻāĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡ āĻ…ā§āĻ¯āĻžāĻ˛āĻžāĻ°ā§āĻŽā§‡āĻ° āĻ…āĻŦāĻ¸ā§āĻĨāĻž ALARM-āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ˛ā§‡ āĻāĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§‡ āĻ†āĻ¨ā§‡āĨ¤

āĻ¨ā§€āĻšā§‡ āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸ āĻ‰āĻĻā§āĻ§ā§ƒāĻ¤āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŽā§‡āĻ˜ āĻ—āĻ āĻ¨āĻ¯āĻž āĻ†āĻŽāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻ“āĻ¯āĻŧāĻžāĻš āĻ…ā§āĻ¯āĻžāĻ˛āĻžāĻ°ā§āĻŽ, āĻ¯āĻž āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ˛āĻ—āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•āĻ•ā§‡ āĻŸā§āĻ°ā§āĻ¯āĻžāĻ• āĻ•āĻ°ā§‡ (āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•āĻŸāĻŋ āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻšāĻ¯āĻŧ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ• āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ°):

Resources:
  # this metric tracks number of errors in the cloudwatch logs. In this
  # particular case it's assumed logs are in json format and the error logs are
  # identified by level "error". See FilterPattern
  ErrorMetricFilter:
    Type: AWS::Logs::MetricFilter
    Properties:
      LogGroupName: !Ref LogGroup
      FilterPattern: !Sub '{$.level = "error"}'
      MetricTransformations:
      - MetricNamespace: !Sub "${AWS::StackName}-log-errors"
        MetricName: Errors
        MetricValue: 1
        DefaultValue: 0

  ErrorAlarm:
    Type: AWS::CloudWatch::Alarm
    Properties:
      AlarmName: !Sub "${AWS::StackName}-errors"
      Namespace: !Sub "${AWS::StackName}-log-errors"
      MetricName: Errors
      Statistic: Maximum
      ComparisonOperator: GreaterThanThreshold
      Period: 1 # 1 minute
      EvaluationPeriods: 1
      Threshold: 0
      TreatMissingData: notBreaching
      ActionsEnabled: yes

āĻāĻ–āĻ¨āĻ‡ āĻŦāĻŋāĻĒāĻĻāĻžāĻļāĻ™ā§āĻ•āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ°ā§‹āĻ˛āĻŦā§āĻ¯āĻžāĻ• āĻŸā§āĻ˛āĻŦāĻ•ā§āĻ¸ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ°:

ALARM_ARN=$1

ROLLBACK_TRIGGER=$(cat <<EOF
{
  "RollbackTriggers": [
    {
      "Arn": "$ALARM_ARN",
      "Type": "AWS::CloudWatch::Alarm"
    }
  ],
  "MonitoringTimeInMinutes": 1
}
EOF
)

aws cloudformation create-change-set 
    --change-set-name "$CHANGE_SET_NAME" 
    --stack-name "$STACK_NAME" 
    --template-body "$TPL_PATH" 
    --change-set-type "UPDATE" 
    --rollback-configuration "$ROLLBACK_TRIGGER"

āĻĒāĻžāĻ  5: āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸā§‡āĻ° āĻ¸āĻ°ā§āĻŦāĻļā§‡āĻˇ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨

āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻĢāĻ°ā§āĻŽā§‡āĻļāĻ¨ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸā§‡āĻ° āĻ˛ā§‡āĻŸā§‡āĻ¸ā§āĻŸ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡āĻ° āĻšā§‡āĻ¯āĻŧā§‡ āĻ•āĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¸āĻšāĻœ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻž āĻ•āĻ°āĻ˛ā§‡ āĻ…āĻ¨ā§‡āĻ• āĻ•ā§āĻˇāĻ¤āĻŋ āĻšāĻŦā§‡āĨ¤ āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŦāĻžāĻ° āĻ˜āĻŸā§‡āĻ›āĻŋāĻ˛: āĻāĻ•āĻœāĻ¨ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€ āĻ—āĻŋāĻŸ āĻĨā§‡āĻ•ā§‡ āĻ¸āĻ°ā§āĻŦāĻļā§‡āĻˇ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻ§āĻžāĻ•ā§āĻ•āĻž āĻĻā§‡āĻ¯āĻŧāĻ¨āĻŋ āĻāĻŦāĻ‚ āĻ…āĻœāĻžāĻ¨ā§āĻ¤ā§‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§€ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻāĻ° āĻĢāĻ˛ā§‡ āĻāĻ‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻŸāĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻžāĻ‰āĻ¨āĻŸāĻžāĻ‡āĻŽ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡ āĻļāĻžāĻ–āĻžāĻŸāĻŋ āĻ†āĻĒ āĻŸā§ āĻĄā§‡āĻŸ āĻ•āĻŋāĻ¨āĻž āĻ¤āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻšā§‡āĻ• āĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻŽāĻ¤ā§‹ āĻ¸āĻšāĻœ āĻ•āĻŋāĻ›ā§ āĻ āĻŋāĻ• āĻšāĻŦā§‡ (āĻ§āĻ°ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ—āĻŋāĻŸ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽ):

git fetch
HEADHASH=$(git rev-parse HEAD)
UPSTREAMHASH=$(git rev-parse master@{upstream})

if [[ "$HEADHASH" != "$UPSTREAMHASH" ]] ; then
   echo "Branch is not up to date with origin. Aborting"
   exit 1
fi

āĻĒāĻžāĻ  6: āĻšāĻžāĻ•āĻž āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ‰āĻĻā§āĻ­āĻžāĻŦāĻ¨ āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¨āĻž

āĻ¸āĻ™ā§āĻ—ā§‡ āĻŽā§‹āĻ¤āĻžāĻ¯āĻŧā§‡āĻ¨ āĻŽāĻ¨ā§‡ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻŽā§‡āĻ˜ āĻ—āĻ āĻ¨ - āĻāĻŸāĻŋ āĻ¸āĻšāĻœ. aws cli āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻ—ā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§‡āĻŦāĻ˛ āĻāĻ•āĻ—ā§āĻšā§āĻ› āĻŦā§āĻ¯āĻžāĻļ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻĻāĻ°āĻ•āĻžāĻ°āĨ¤

4 āĻŦāĻ›āĻ° āĻ†āĻ—ā§‡ āĻ†āĻŽāĻŋ aws āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻĢāĻ°ā§āĻŽā§‡āĻļāĻ¨ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧā§‡āĻŸ-āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ¨āĻžāĻŽā§‡ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻļā§€āĻ˜ā§āĻ°āĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ†āĻ° āĻ¸āĻšāĻœ āĻ›āĻŋāĻ˛ āĻ¨āĻžāĨ¤ āĻļā§‡āĻ–āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĒāĻžāĻ  āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻœāĻŸāĻŋāĻ˛ āĻ•āĻ°ā§‡ āĻ¤ā§āĻ˛ā§‡āĻ›ā§‡āĨ¤ āĻāĻŸāĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ•āĻ āĻŋāĻ¨ āĻ›āĻŋāĻ˛ āĻ¨āĻž, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻŦāĻžāĻ— āĻĒā§‚āĻ°ā§āĻŖ.

āĻ†āĻŽāĻŋ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻ›ā§‹āĻŸ āĻ†āĻ‡āĻŸāĻŋ āĻŦāĻŋāĻ­āĻžāĻ—ā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻŋāĨ¤ āĻ…āĻ­āĻŋāĻœā§āĻžāĻ¤āĻž āĻĻā§‡āĻ–āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĻāĻ˛ā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻĢāĻ°ā§āĻŽā§‡āĻļāĻ¨ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻāĻŦāĻ‚ āĻāĻŸāĻž āĻ–āĻžāĻ°āĻžāĻĒ. āĻ¸āĻŦāĻžāĻ‡ āĻāĻ•āĻ‡ āĻĒāĻ¨ā§āĻĨāĻž āĻ¨āĻŋāĻ˛ā§‡ āĻ­āĻžāĻ˛ā§‹ āĻšāĻŦā§‡āĨ¤ āĻ¸ā§ŒāĻ­āĻžāĻ—ā§āĻ¯āĻŦāĻļāĻ¤, āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻĢāĻ°ā§āĻŽā§‡āĻļāĻ¨ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻŦāĻ‚ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§‡āĻ•āĻ—ā§āĻ˛āĻŋ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻāĻ‡ āĻĒāĻžāĻ āĻ—ā§āĻ˛āĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ­ā§āĻ˛ āĻāĻĄāĻŧāĻžāĻ¤ā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻŦā§‡āĨ¤

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨