рд╕рд╛рдердорд╛ рдХрд╛рдо рдЧрд░реНрди рдерд╛рд▓реЗрдВ рдХреНрд▓рд╛рдЙрдбрдлреЙрд░реНрдореЗрд╢рди рек рд╡рд░реНрд╖ рдкрд╣рд┐рд▓реЗ ред рддреНрдпрд╕рдмреЗрд▓рд╛рджреЗрдЦрд┐ рдореИрд▓реЗ рдзреЗрд░реИ рдкреВрд░реНрд╡рд╛рдзрд╛рд░рд╣рд░реВ рднрддреНрдХрд╛рдПрдХреЛ рдЫреБ, рддреА рдкрдирд┐ рдЬреБрди рдЙрддреНрдкрд╛рджрдирдорд╛ рдерд┐рдПред рддрд░ рд╣рд░реЗрдХ рдЪреЛрдЯрд┐ рдореИрд▓реЗ рдХреЗрд╣рд┐ рдЧрдбрдмрдб рдЧрд░реЗрдВ, рдореИрд▓реЗ рдХреЗрд╣рд┐ рдирдпрд╛рдБ рд╕рд┐рдХреЗред рдпрд╕ рдЕрдиреБрднрд╡ рдорд╛рд░реНрдлрдд, рдореИрд▓реЗ рд╕рд┐рдХреЗрдХрд╛ рдХреЗрд╣реА рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдкрд╛рдард╣рд░реВ рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреЗрдЫреБред
рдкрд╛рда 1: рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдореИрд▓реЗ рдХрд╛рдо рдЧрд░реНрди рдерд╛рд▓реЗрдкрдЫрд┐ рдореИрд▓реЗ рдпреЛ рдкрд╛рда рд╕рд┐рдХреЗрдВ рдХреНрд▓рд╛рдЙрдбрдлреЙрд░реНрдореЗрд╢рдиред рдорд▓рд╛рдИ рдпрд╛рдж рдЫреИрди рдХрд┐ рдореИрд▓реЗ рддреНрдпрд╕рдмреЗрд▓рд╛ рдХреЗ рддреЛрдбреЗрдХреЛ рдерд┐рдПрдБ, рддрд░ рдорд▓рд╛рдИ рдкрдХреНрдХреИ рдпрд╛рдж рдЫ рдХрд┐ рдореИрд▓реЗ рдХрдорд╛рдгреНрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдВ aws cloudformation рдЕрдкрдбреЗрдЯред рдпреЛ рдЖрджреЗрд╢рд▓реЗ рддреИрдирд╛рде рдЧрд░рд┐рдиреЗ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рдХреБрдиреИ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдмрд┐рдирд╛ рдиреИ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд░реЛрд▓ рдЖрдЙрдЯ рдЧрд░реНрджрдЫред рдорд▓рд╛рдИ рд▓рд╛рдЧреНрджреИрди рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рддреИрдирд╛рдд рдЧрд░реНрдиреБ рдЕрдШрд┐ рд╕рдмреИ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдХрд┐рди рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдиреБрдкрд░реНрдЫ рднрдиреЗрд░ рдХреБрдиреИ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдЫред
рдпреЛ рдЕрд╕рдлрд▓рддрд╛ рдкрдЫрд┐, рдо рддреБрд░реБрдиреНрддреИ рдкрд░рд┐рд╡рд░реНрддрди рднрдпреЛ рддреИрдирд╛рддреА рдкрд╛рдЗрдкрд▓рд╛рдЗрди, рдХрдорд╛рдгреНрдбрдХреЛ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдЖрджреЗрд╢ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрджреИ рд╕рд┐рд░реНрдЬрдирд╛-рдкрд░рд┐рд╡рд░реНрддрди-рд╕реЗрдЯ
# 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"
рдкрд╛рда реи: рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╕реНрд░реЛрддрд╣рд░реВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╡рд╛ рд╣рдЯрд╛рдЙрдирдмрд╛рдЯ рд░реЛрдХреНрди рд╕реНрдЯреНрдпрд╛рдХ рдиреАрддрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдорд╛рддреНрд░ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд╣реЗрд░реНрди рдкрд░реНрдпрд╛рдкреНрдд рдЫреИрдиред рд╣рд╛рдореА рд╕рдмреИ рдорд╛рдирд╡ рд╣реМрдВ рд░ рд╣рд╛рдореА рд╕рдмреИрд▓реЗ рдЧрд▓реНрддреА рдЧрд░реНрдЫреМрдВред рд╣рд╛рдореАрд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдерд╛рд▓реЗрдХреЛ рдХреЗрд╣реА рд╕рдордп рдкрдЫрд┐, рдореЗрд░реЛ рдЯреЛрд▓реАрд▓реЗ рдЕрдирдЬрд╛рдирдорд╛ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНтАНрдпреЛ рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдбрд╛рдЯрд╛рдмреЗрд╕ рдЕрдкрдбреЗрдЯ рднрдпреЛред рдХреЗрд╣реА рдирд░рд╛рдореНрд░реЛ рднрдПрди рдХрд┐рдирднрдиреЗ рдпреЛ рдкрд░реАрдХреНрд╖рд╛рдХреЛ рд╡рд╛рддрд╛рд╡рд░рдг рдерд┐рдпреЛред
рд╣рд╛рдореНрд░рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рд╕реВрдЪреА рджреЗрдЦрд╛рдПрд░ рдкреБрд╖реНрдЯрд┐рдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╕реЛрдзреЗ рддрд╛рдкрдирд┐, рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рд╕реВрдЪреА рдпрддрд┐ рдареВрд▓реЛ рднрдПрдХреЛрд▓реЗ рд╕реНрдХреНрд░рд┐рдирдорд╛ рдлрд┐рдЯ рдирд╣реБрдиреЗ рднрдПрдХрд╛рд▓реЗ рдмрджрд▓реНрдиреБрд╣реЛрд╕реН рдкрд░рд┐рд╡рд░реНрддрди рдЫреЛрдбрд┐рдпреЛред рд░ рдпреЛ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рднрдПрдХреЛрд▓реЗ, рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдорд╛ рдзреЗрд░реИ рдзреНрдпрд╛рди рджрд┐рдЗрдПрдиред
рддреНрдпрд╣рд╛рдБ рд╕реНрд░реЛрддрд╣рд░реВ рдЫрдиреН рдЬреБрди рддрдкрд╛рдИрдВ рдХрд╣рд┐рд▓реНрдпреИ рдмрджрд▓реНрди рд╡рд╛ рд╣рдЯрд╛рдЙрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдиред рдпреА рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╕реЗрд╡рд╛рд╣рд░реВ рд╣реБрдиреН, рдЬрд╕реНрддреИ 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"
рдкрд╛рда рей: рдЧреЛрдкреНрдп рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд╕рд╛рде рд╕реНрдЯреНрдпрд╛рдХ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрджрд╛ UsePreviousValue рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН
рддрдкрд╛рдИрдВрд▓реЗ RDS mysql рдПрдХрд╛рдЗ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛, AWS рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ MasterUsername рд░ MasterUserPassword рдЙрдкрд▓рдмреНрдз рдЧрд░рд╛рдЙрдиреБрдкрд░реНрдЫред рд╕реНрд░реЛрдд рдХреЛрдбрдорд╛ рдЧреЛрдкреНрдп рдХреБрд░рд╛рд╣рд░реВ рдирд░рд╛рдЦреНрдиреБ рд░рд╛рдореНрд░реЛ рднрдПрдХреЛрд▓реЗ рд░ рдо рд╕рдмреИ рдХреБрд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдереЗрдБ, рдореИрд▓реЗ "рд╕реНрдорд╛рд░реНрдЯ рдореЗрдХрд╛рдирд┐рдЬреНрдо" рд▓рд╛рдЧреВ рдЧрд░реЗрдВ рдЬрд╣рд╛рдБ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЕрдШрд┐ рдкреНрд░рдорд╛рдгрд╣рд░реВ s3 рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рд╣реБрдиреЗрдЫрдиреН, рд░ рдпрджрд┐ рдкреНрд░рдорд╛рдгрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд░реЗрдирдиреН рднрдиреЗ, рдирдпрд╛рдБ рдкреНрд░рдорд╛рдгрд╣рд░реВ рдЙрддреНрдкрдиреНрди рд╣реБрдиреНрдЫрдиреН рд░ s3 рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫред
рдпреА рдкреНрд░рдорд╛рдгрд╣рд░реВ рддреНрдпрд╕рдкрдЫрд┐ рдХреНрд▓рд╛рдЙрдбрдлрд░реНрдореЗрд╕рди рд╕рд┐рд░реНрдЬрдирд╛-рдкрд░рд┐рд╡рд░реНрддрди-рд╕реЗрдЯ рдЖрджреЗрд╢рдорд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдиреЗрдЫред рд╕реНрдХреНрд░рд┐рдкреНрдЯрдХреЛ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, рдпреЛ рднрдпреЛ рдХрд┐ s3 рдорд╛ рдЬрдбрд╛рди рд╣рд░рд╛рдПрдХреЛ рдерд┐рдпреЛ, рд░ рдореЗрд░реЛ "рд╕реНрдорд╛рд░реНрдЯ рдореЗрдХрд╛рдирд┐рдЬреНрдо" рд▓реЗ рдпрд╕рд▓рд╛рдИ рдирдпрд╛рдБ рдкреНрд░рдорд╛рдгрд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рд╕рдВрдХреЗрддрдХреЛ рд░реВрдкрдорд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрдпреЛред
рдпрджрд┐ рдореИрд▓реЗ рдЙрддреНрдкрд╛рджрдирдорд╛ рдпреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реЗрдВ рд░ рдЬрдбрд╛рди рд╕рдорд╕реНрдпрд╛ рдлреЗрд░рд┐ рднрдпреЛ рднрдиреЗ, рдпрд╕рд▓реЗ рд╕реНрдЯреНрдпрд╛рдХрд▓рд╛рдИ рдирдпрд╛рдБ рдкреНрд░рдорд╛рдгрд╣рд░реВрд╕рдБрдЧ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрдиреЗрдЫред рдпрд╕ рд╡рд┐рд╢реЗрд╖ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдХреЗрд╣рд┐ рдЦрд░рд╛рдм рд╣реБрдиреЗрдЫреИрдиред рдпрджреНрдпрдкрд┐, рдореИрд▓реЗ рдпреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рддреНрдпрд╛рдЧреЗрдХреЛ рдЫреБ рд░ рдЕрд░реНрдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдерд╛рд▓реЗрдБ, рдПрдХ рдкрдЯрдХ рдорд╛рддреНрд░ рдкреНрд░рдорд╛рдгрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджреИ - рд╕реНрдЯреНрдпрд╛рдХ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛ред рд░ рдкрдЫрд┐, рдЬрдм рд╕реНрдЯреНрдпрд╛рдХрд▓рд╛рдИ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рдЧреЛрдкреНрдп рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛, рдо рдХреЗрд╡рд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреБред PreviousValue=true рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН:
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"
рдкрд╛рда рек: рд░реЛрд▓рдмреНрдпрд╛рдХ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН
рдореИрд▓реЗ рдХрд╛рдо рдЧрд░реЗрдХреЛ рдЕрд░реНрдХреЛ рдЯреЛрд▓реАрд▓реЗ рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреЛ рдХреНрд▓рд╛рдЙрдбрдлреЙрд░реНрдореЗрд╢рди, рдмреЛрд▓рд╛рдЗрдпреЛ рд░реЛрд▓рдмреНрдпрд╛рдХ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдиред рдореИрд▓реЗ рдкрд╣рд┐рд▓реЗ рдпреЛ рднреЗрдЯреЗрдХреЛ рдерд┐рдЗрдирдБ рд░ рдЪрд╛рдБрдбреИ рдорд╣рд╕реБрд╕ рдЧрд░реЗрдВ рдХрд┐ рдпрд╕рд▓реЗ рдореЗрд░реЛ рд╕реНрдЯреНрдпрд╛рдХрд╣рд░реВ рдердк рдХреВрд▓рд░ рдмрдирд╛рдЙрдБрджрдЫред рдЕрдм рдо рдХреНрд▓рд╛рдЙрдбрдлрд╛рд░реНрдореЗрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ lambda рд╡рд╛ ECS рдорд╛ рдореЗрд░реЛ рдХреЛрдб рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрджрд╛ рд╣рд░реЗрдХ рдкрдЯрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреБред
рдпреЛ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрджрдЫ: рддрдкрд╛рдЗрдБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН CloudWatch рдЕрд▓рд╛рд░реНрдо рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдорд╛ --рд░реЛрд▓рдмреНрдпрд╛рдХ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдЬрдм рддрдкрд╛рдЗрдБ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫред рдкрдЫрд┐, рдЬрдм рддрдкрд╛рдЗрдБ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рд╕реЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, 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"
рдкрд╛рда рел: рдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯрдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрднрдпреЛ
рдХреНрд▓рд╛рдЙрдбрдлрд░реНрдореЗрд╕рди рдЯреЗрдореНрдкреНрд▓реЗрдЯрдХреЛ рдкрдЫрд┐рд▓реНрд▓реЛ рднрдиреНрджрд╛ рдХрдо рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫ, рддрд░ рддреНрдпрд╕реЛ рдЧрд░реНрджрд╛ рдзреЗрд░реИ рдХреНрд╖рддрд┐ рд╣реБрдиреЗрдЫред рдпреЛ рд╣рд╛рдореАрд▓рд╛рдИ рдПрдХ рдкрдЯрдХ рднрдпреЛ: рдПрдХ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд▓реЗ Git рдмрд╛рдЯ рдирд╡реАрдирддрдо рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдзрдХреНрдХрд╛ рджрд┐рдПрди рд░ рдЕрдирдЬрд╛рдирдорд╛ рд╕реНрдЯреНрдпрд╛рдХрдХреЛ рдЕрдШрд┐рд▓реНрд▓реЛ рд╕рдВрд╕реНрдХрд░рдг рддреИрдирд╛рдд рдЧрд░реНрдпреЛред рдпрд╕рд▓реЗ рдпреЛ рд╕реНрдЯреНрдпрд╛рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдбрд╛рдЙрдирдЯрд╛рдЗрдордХреЛ рдкрд░рд┐рдгрд╛рдо рд╣реЛред
рдпреЛ рдЧрд░реНрди рдЕрдШрд┐ рд╢рд╛рдЦрд╛ рдЕрдк рдЯреБ рдбреЗрдЯ рдЫ рдХрд┐ рдЫреИрди рднрдиреЗрд░ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЪреЗрдХ рдердкреНрди рдЬрддреНрддрд┐рдХреИ рд╕рд░рд▓ рдЫ (рдЧрд┐рдЯ рддрдкрд╛рдИрдВрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдиреНрддреНрд░рдг рдЙрдкрдХрд░рдг рд╣реЛ рднрдиреА рдорд╛рдиреНрджреИ):
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
рдкрд╛рда рем: рдкрд╛рдЩреНрдЧреНрд░рд╛рд▓рд╛рдИ рдкреБрди: рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирдЧрд░реНрдиреБрд╣реЛрд╕реН
рдпреЛ рд╕рдВрдЧ рддреИрдирд╛рддреА рдЬрд╕реНрддреЛ рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ рдХреНрд▓рд╛рдЙрдбрдлреЙрд░реНрдореЗрд╢рди - рд╕рдЬрд┐рд▓реЛ рдЫред рддрдкрд╛рдИрд▓рд╛рдИ рдХреЗрд╡рд▓ aws cli рдЖрджреЗрд╢рд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреЗ bash рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдХреЛ рдЧреБрдЪреНрдЫрд╛ рдЪрд╛рд╣рд┐рдиреНрдЫред
4 рд╡рд░реНрд╖ рдкрд╣рд┐рд▓реЗ рдореИрд▓реЗ aws рдХреНрд▓рд╛рдЙрдбрдлрд░реНрдореЗрд╢рди рд╕рд┐рд░реНрдЬрдирд╛-рд╕реНрдЯреНрдпрд╛рдХ рдЖрджреЗрд╢ рднрдирд┐рдиреЗ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрд╕рдБрдЧ рд╕реБрд░реБ рдЧрд░реЗрдВред рдЪрд╛рдБрдбреИ рдкрдЯрдХрдерд╛ рдЕрдм рд╕рд░рд▓ рдерд┐рдПрдиред рд╕рд┐рдХреЗрдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдард▓реЗ рд▓рд┐рдкрд┐рд▓рд╛рдИ рдердк рдЬрдЯрд┐рд▓ рдмрдирд╛рдпреЛред рдпреЛ рдЧрд╛рд╣реНрд░реЛ рдорд╛рддреНрд░ рдерд┐рдПрди, рддрд░ рдмрдЧрд╣рд░реВрд▓реЗ рднрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред
рдо рд╣рд╛рд▓ рдПрдЙрдЯрд╛ рд╕рд╛рдиреЛ рдЖрдИрдЯреА рд╡рд┐рднрд╛рдЧрдорд╛ рдХрд╛рдо рдЧрд░реНрдЫреБред рдЕрдиреБрднрд╡рд▓реЗ рджреЗрдЦрд╛рдПрдХреЛ рдЫ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрд▓реАрд╕рдБрдЧ рдХреНрд▓рд╛рдЙрдбрдлреЙрд░реНрдореЗрд╢рди рд╕реНрдЯреНрдпрд╛рдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЖрдлреНрдиреИ рддрд░рд┐рдХрд╛ рдЫред рд░ рддреНрдпреЛ рдирд░рд╛рдореНрд░реЛ рдЫред рд╕рдмреИрд▓реЗ рдПрдЙрдЯреИ рддрд░рд┐рдХрд╛ рдЕрдкрдирд╛рдП рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдереНрдпреЛ ред рд╕реМрднрд╛рдЧреНрдп рджреЗрдЦрд┐, рдХреНрд▓рд╛рдЙрдбрдлрд░реНрдореЗрд╢рди рд╕реНрдЯреНрдпрд╛рдХрд╣рд░реВ рдбрд┐рдкреНрд▓реЛрдп рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрди рдзреЗрд░реИ рдЙрдкрдХрд░рдгрд╣рд░реВ рдЙрдкрд▓рдмреНрдз рдЫрдиреНред
рдпреА рдкрд╛рдард╣рд░реВрд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЧрд▓реНрддреАрд╣рд░реВрдмрд╛рдЯ рдмрдЪреНрди рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫред
рд╕реНрд░реЛрдд: www.habr.com