ืืชืืืชื ืืขืืื ืขื ืชืฆืืจืช ืขื ื ืืคื ื 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 console. ืืื ืื ืืชื ืืขืืืฃ ืืืคืื ืืช ืื ืื ืฉืืชื ืืืื ืืืืืืืื, ืืืืง ืืืชื ื-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 ืื ืืฉืืื ืืืคืืฉ ืฉื elastics, ืืื'. ืื ืืืื ื ืืื ืื 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 ืืืจืฉ ืืื ืืกืคืง ืฉื ืืฉืชืืฉ ืืืกืืก ืืฉืชืืฉ ืจืืฉื. ืืืืืื ืฉืขืืืฃ ืื ืืฉืืืจ ืกืืืืช ืืงืื ืืืงืืจ ืืจืฆืืชื ืืืคืื ืืช ืืื ืืืืืืืื, ืืืืขืชื "ืื ืื ืื ืืื" ืฉืื ืืคื ื ืืคืจืืกื ืืืืฉืืจืื ืืชืงืืื ื-s3, ืืื ืืืืฉืืจืื ืื ืืืืฆืื, ื ืืฆืจืื ืืืฉืืจืื ืืืฉืื ื ืืืืืกื ื-s3.
ืืืฉืืจืื ืืื ืืืขืืจื ืืืืจ ืืื ืืคืจืืืจืื ืืคืงืืืช cloudformation create-change-set. ืชืื ืืื ื ืืกืื ืขื ืืกืงืจืืคื, ืงืจื ืฉืืืืืืจ ื-s3 ืืื, ืื"ืื ืื ืื ืืืื" ืฉืื ืืชืืืืก ืืืื ืืืืช ืืืฆืืจืช ืืืฉืืจืื ืืืฉืื.
ืื ืืชืืืชื ืืืฉืชืืฉ ืืกืงืจืืคื ืืื ืืืคืงื ืืืขืืืช ืืืืืืจ ืชืชืจืืฉ ืฉืื, ืื ืืื ืืขืืื ืืช ืืืืกื ืืช ืขื ืืืฉืืจืื ืืืฉืื. ืืืงืจื ืืกืคืฆืืคื ืืื, ืฉืื ืืืจ ืจืข ืื ืืงืจื. ืขื ืืืช, ื ืืฉืชื ืืช ืืืืฉื ืืื ืืืชืืืชื ืืืฉืชืืฉ ืืืืช ืืืจืช, ืืฉืกืืคืงืชื ืืืฉืืจืื ืคืขื ืืืช ืืืื - ืืขืช ืืฆืืจืช ืืืืกื ืืช. ืืืืืฉื, ืืฉืืืืกื ืืช ืฆืจืืื ืขืืืื, ืืืงืื ืืฆืืื ืืช ืืขืจื ืืกืืื ืฉื ืืคืจืืืจ, ืืืืชื ืคืฉืื ืืฉืชืืฉ UsePreviousValue=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"
ืฉืืขืืจ 4: ืืฉืชืืฉ ืืชืฆืืจืช ืืืืจื ืืืืืจ
ืฆืืืช ืืืจ ืฉืขืืืชื ืืืชื ืืฉืชืืฉ ืืคืื ืงืฆืื ืชืฆืืจืช ืขื ืืฉืงืืจืืื ืื ืชืฆืืจืช ืืืืจื ืืืืืจ. ืื ื ืชืงืืชื ืืื ืืคื ื ืื ืืืืจ ืืืื ืืื ืชื ืฉืื ืืืคืื ืืช ืคืจืืกืช ืืขืจืืืืช ืฉืื ืืขืื ืืืชืจ ืืื ืืื. ืขืืฉืื ืื ื ืืฉืชืืฉ ืื ืืื ืคืขื ืฉืื ื ืคืืจืก ืืช ืืงืื ืฉืื ื- Lambda ืื ECS ืืืืฆืขืืช Cloudformation.
ืืื ืื ืขืืื: ืืชื ืืฆืืื ืืืขืงืช CloudWatch ืืคืจืืืจ --ืชืฆืืจืช ืืืืจื ืืืืืจืืืฉืจ ืืชื ืืืฆืจ ืขืจืืช ืฉืื ืืืื. ืืืืืจ ืืืชืจ, ืืืฉืจ ืืชื ืืืฆืข ืกื ืฉืื ืืืื, aws ืขืืงืืช ืืืจ ืืืืขืงื ืืืฉื ืืงื ืืืช ืืคืืืช. ืื ืืืื ืืช ืืคืจืืกื ืื ืืืืขืงื ืืฉื ื ืืฆื ื-ALARM ืืืืื ืชืงืืคื ืื.
ืืืื ืืืืื ืืงืืข ืชืื ืืช ืชืฆืืจืช ืขื ืืฉืื ืื ื ืืืฆืจ ืืืขืงืช ืฉืขืื ืขื ื, ืืฉืจ ืขืืงื ืืืจ ืืื ืืฉืชืืฉ ืืขื ื ืืืกืคืจ ืืฉืืืืืช ืืืืื ื ืืขื ื (ืืืื ื ืืฆืจ ืืืืฆืขืืช MetricFilter):
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: ืืื ืฉืืชื ืคืืจืก ืืช ืืืจืกื ืืขืืื ืืช ืืืืชืจ ืฉื ืืชืื ืืช
ืงื ืืคืจืืก ืืจืกื ืคืืืช ืืืขืืื ืืช ืฉื ืชืื ืืช Cloudformation, ืื ืคืขืืื ืื ืชืืจืื ืื ืืง ืจื. ืื ืงืจื ืื ื ืคืขื ืืืช: ืืคืชื ืื ืืืฃ ืืช ืืฉืื ืืืื ืืืืจืื ืื ื-Git ืืืื ืืืืขืชื ืคืจืก ืืจืกื ืงืืืืช ืฉื ืืขืจืืื. ืื ืืืื ืืืื ืืฉืืชื ืขืืืจ ืืืคืืืงืฆืื ืฉืืฉืชืืฉื ืืขืจืืื ืื.
ืืฉืื ืคืฉืื ืืื ืืืกืคืช ืืืืงื ืืื ืืจืืืช ืื ืืกื ืืฃ ืืขืืืื ืืคื ื ืืืชืืืืืืช ืืืื ืืืื ืืกืืจ (ืืื ืื ืฉ-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
ืฉืืขืืจ 6: ืื ืชืืฆืื ืืช ืืืืื ืืืืฉ
ืื ืืืื ื ืจืื ืืื ืคืจืืกื ืขื ืชืฆืืจืช ืขื ื - ืื ืงื. ืืชื ืจืง ืฆืจืื ืืืืจื ืฉื ืกืงืจืืคืืื ืฉื bash ืืืืฆืขืื ืคืงืืืืช aws cli.
ืืคื ื 4 ืฉื ืื ืืชืืืชื ืขื ืกืงืจืืคืืื ืคืฉืืืื ืฉื ืงืจืืื ืืคืงืืื aws cloudformation create-stack. ืขื ืืืจื ืืชืกืจืื ืืืจ ืื ืืื ืคืฉืื. ืื ืฉืืขืืจ ืฉื ืืื ืืคื ืืช ืืชืกืจืื ืืืืจืื ืืืชืจ ืืืืชืจ. ืื ืืื ืื ืจืง ืงืฉื, ืืื ืื ืืื ืืืืื.
ืืืื ืื ื ืขืืื ืืืืืงืช IT ืงืื ื. ืื ืืกืืื ืืจืื ืฉืืื ืฆืืืช ืืฉ ืืจื ืืฉืื ืืคืจืืก ืขืจืืืืช ืขื ื. ืืื ืจืข. ืขืืืฃ ืฉืืืื ืื ืงืื ืืืืชื ืืืฉื. ืืืจืื ืืืื, ืืฉื ื ืืืื ืจืืื ืืืื ืื ืืื ืืขืืืจ ืื ืืคืจืืก ืืืืืืืจ ืขืจืืืืช Cloudformation.
ืฉืืขืืจืื ืืื ืืขืืจื ืื ืืืืื ืข ืืืขืืืืช.
ืืงืืจ: www.habr.com