āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻļā§āĻ°ā§ āĻāĻ°āĻ˛āĻžāĻŽ āĻŽā§āĻ āĻāĻ āĻ¨ 4 āĻŦāĻāĻ° āĻāĻā§. āĻ¤āĻžāĻ°āĻĒāĻ° āĻĨā§āĻā§ āĻāĻŽāĻŋ āĻ āĻ¨ā§āĻ āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§ āĻā§āĻā§ āĻĢā§āĻ˛ā§āĻāĻŋ, āĻāĻŽāĻ¨āĻāĻŋ āĻ¯ā§āĻā§āĻ˛āĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻā§āĻĒāĻžāĻĻāĻ¨ā§ āĻāĻŋāĻ˛āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯āĻ¤āĻŦāĻžāĻ° āĻāĻŽāĻŋ āĻāĻŋāĻā§ āĻā§āĻ˛āĻŽāĻžāĻ˛ āĻāĻ°ā§āĻāĻŋ, āĻāĻŽāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻāĻŋāĻā§ āĻļāĻŋāĻā§āĻāĻŋāĨ¤ āĻāĻ āĻ āĻāĻŋāĻā§āĻāĻ¤āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§, āĻāĻŽāĻŋ āĻļāĻŋāĻā§āĻāĻŋ āĻāĻŽāĻ¨ āĻāĻŋāĻā§ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻĒāĻžāĻ āĻļā§āĻ¯āĻŧāĻžāĻ° āĻāĻ°āĻŦāĨ¤
āĻĒāĻžāĻ 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