DevOps على AWS: دليل شامل
تعرّف على خدمات AWS الخاصة بأتمتة DevOps وتنسيقها.
I
InSkillCoach
· دقيقة
DevOps على AWS: دليل شامل
تعرّف على خدمات AWS الخاصة بأتمتة DevOps وتنسيقها.
1. CI/CD باستخدام AWS CodePipeline
إعداد خط الأنابيب
# مثال على إعداد CodePipeline
import boto3
def create_codepipeline():
codepipeline = boto3.client('codepipeline')
pipeline_config = {
'name': 'MonPipeline',
'roleArn': 'arn:aws:iam::account:role/service-role/AWSCodePipelineServiceRole',
'stages': [
{
'name': 'Source',
'actions': [
{
'name': 'Source',
'actionTypeId': {
'category': 'Source',
'owner': 'AWS',
'provider': 'CodeCommit',
'version': '1'
},
'configuration': {
'RepositoryName': 'mon-repo',
'BranchName': 'main'
},
'outputArtifacts': [
{
'name': 'SourceOutput'
}
]
}
]
},
{
'name': 'Build',
'actions': [
{
'name': 'Build',
'actionTypeId': {
'category': 'Build',
'owner': 'AWS',
'provider': 'CodeBuild',
'version': '1'
},
'configuration': {
'ProjectName': 'MonProjetBuild'
},
'inputArtifacts': [
{
'name': 'SourceOutput'
}
],
'outputArtifacts': [
{
'name': 'BuildOutput'
}
]
}
]
}
]
}
response = codepipeline.create_pipeline(**pipeline_config)
return response['pipeline']['name']
إعداد CodeBuild
# مثال على إعداد CodeBuild
def setup_codebuild():
codebuild = boto3.client('codebuild')
project_config = {
'name': 'MonProjetBuild',
'source': {
'type': 'CODECOMMIT',
'location': 'https://git-codecommit.region.amazonaws.com/v1/repos/mon-repo',
'gitCloneDepth': 1
},
'artifacts': {
'type': 'NO_ARTIFACTS'
},
'environment': {
'type': 'LINUX_CONTAINER',
'image': 'aws/codebuild/amazonlinux2-x86_64-standard:4.0',
'computeType': 'BUILD_GENERAL1_SMALL'
},
'serviceRole': 'arn:aws:iam::account:role/service-role/AWSCodeBuildServiceRole'
}
response = codebuild.create_project(**project_config)
return response['project']['name']
2. البنية التحتية كشيفرة برمجية (Infrastructure as Code) باستخدام AWS CloudFormation
إنشاء Stack
# مثال على إنشاء stack في CloudFormation
def create_cloudformation_stack():
cloudformation = boto3.client('cloudformation')
template = {
'AWSTemplateFormatVersion': '2010-09-09',
'Description': 'Stack de développement',
'Resources': {
'MyEC2Instance': {
'Type': 'AWS::EC2::Instance',
'Properties': {
'InstanceType': 't2.micro',
'ImageId': 'ami-0c55b159cbfafe1f0',
'Tags': [
{
'Key': 'Name',
'Value': 'InstanceDev'
}
]
}
}
}
}
response = cloudformation.create_stack(
StackName='MonStackDev',
TemplateBody=json.dumps(template),
Parameters=[
{
'ParameterKey': 'Environment',
'ParameterValue': 'Development'
}
]
)
return response['StackId']
تحديث Stack
# مثال على تحديث stack
def update_cloudformation_stack():
cloudformation = boto3.client('cloudformation')
template = {
'AWSTemplateFormatVersion': '2010-09-09',
'Description': 'Stack de développement mis à jour',
'Resources': {
'MyEC2Instance': {
'Type': 'AWS::EC2::Instance',
'Properties': {
'InstanceType': 't2.small',
'ImageId': 'ami-0c55b159cbfafe1f0',
'Tags': [
{
'Key': 'Name',
'Value': 'InstanceDev'
}
]
}
}
}
}
response = cloudformation.update_stack(
StackName='MonStackDev',
TemplateBody=json.dumps(template)
)
return response['StackId']
3. إدارة الحاويات باستخدام Amazon ECS
إعداد Cluster
# مثال على إعداد ECS
def setup_ecs_cluster():
ecs = boto3.client('ecs')
# إنشاء الـ cluster
cluster = ecs.create_cluster(
clusterName='MonCluster',
capacityProviders=['FARGATE'],
defaultCapacityProviderStrategy=[
{
'capacityProvider': 'FARGATE',
'weight': 1
}
]
)
# تعريف المهمة
task_definition = ecs.register_task_definition(
family='MonApplication',
networkMode='awsvpc',
requiresCompatibilities=['FARGATE'],
cpu='256',
memory='512',
executionRoleArn='arn:aws:iam::account:role/ecsTaskExecutionRole',
containerDefinitions=[
{
'name': 'MonContainer',
'image': 'mon-image:latest',
'portMappings': [
{
'containerPort': 80,
'protocol': 'tcp'
}
],
'essential': True
}
]
)
return {
'cluster_arn': cluster['cluster']['clusterArn'],
'task_definition_arn': task_definition['taskDefinition']['taskDefinitionArn']
}
نشر الخدمة
# مثال على نشر خدمة ECS
def deploy_ecs_service():
ecs = boto3.client('ecs')
service = ecs.create_service(
cluster='MonCluster',
serviceName='MonService',
taskDefinition='MonApplication',
desiredCount=2,
launchType='FARGATE',
networkConfiguration={
'awsvpcConfiguration': {
'subnets': ['subnet-xxxxx'],
'securityGroups': ['sg-xxxxx'],
'assignPublicIp': 'ENABLED'
}
}
)
return service['service']['serviceArn']
4. المراقبة باستخدام AWS CloudWatch
إعداد المقاييس
# مثال على إعداد CloudWatch
def setup_cloudwatch_monitoring():
cloudwatch = boto3.client('cloudwatch')
# إنشاء تنبيه
alarm = cloudwatch.put_metric_alarm(
AlarmName='CPUUtilization',
MetricName='CPUUtilization',
Namespace='AWS/EC2',
Statistic='Average',
Period=300,
EvaluationPeriods=1,
Threshold=80,
ComparisonOperator='GreaterThanThreshold',
AlarmActions=['arn:aws:sns:region:account:MonTopic']
)
# إعداد السجلات
log_group = cloudwatch.create_log_group(
logGroupName='/aws/ecs/MonApplication',
retentionInDays=30
)
return {
'alarm_name': alarm['AlarmArn'],
'log_group': log_group['logGroupName']
}
إعداد لوحات المعلومات (Dashboards)
# مثال على إنشاء dashboard
def create_cloudwatch_dashboard():
cloudwatch = boto3.client('cloudwatch')
dashboard_body = {
'widgets': [
{
'type': 'metric',
'x': 0,
'y': 0,
'width': 12,
'height': 6,
'properties': {
'metrics': [
['AWS/EC2', 'CPUUtilization', 'InstanceId', 'i-xxxxx']
],
'period': 300,
'stat': 'Average',
'region': 'region',
'title': 'Utilisation CPU'
}
}
]
}
response = cloudwatch.put_dashboard(
DashboardName='MonDashboard',
DashboardBody=json.dumps(dashboard_body)
)
return response['DashboardArn']
5. إدارة الأسرار باستخدام AWS Secrets Manager
إعداد الأسرار
# مثال على إدارة الأسرار
def manage_secrets():
secretsmanager = boto3.client('secretsmanager')
# إنشاء سر
secret = secretsmanager.create_secret(
Name='MonSecret',
SecretString=json.dumps({
'username': 'admin',
'password': 'secret123'
}),
Description='Secret pour l\'application'
)
# استرجاع السر
get_secret = secretsmanager.get_secret_value(
SecretId='MonSecret'
)
return {
'secret_arn': secret['ARN'],
'secret_value': json.loads(get_secret['SecretString'])
}
تدوير الأسرار
# مثال على تدوير الأسرار
def rotate_secret():
secretsmanager = boto3.client('secretsmanager')
# إعداد التدوير
rotation = secretsmanager.rotate_secret(
SecretId='MonSecret',
RotationRules={
'AutomaticallyAfterDays': 30
}
)
return rotation['ARN']
الخاتمة
النقاط الرئيسية التي ينبغي تذكرها:
- أتمتة النشر باستخدام CodePipeline
- إدارة البنية التحتية باستخدام CloudFormation
- تنسيق الحاويات باستخدام ECS
- المراقبة باستخدام CloudWatch
- تأمين الأسرار
التوصيات:
- استخدام البنية التحتية كشيفرة برمجية (Infrastructure as Code)
- إنشاء خطوط أنابيب CI/CD
- أتمتة عمليات النشر
- مراقبة الأداء
- إدارة الأسرار بطريقة آمنة
نبذة عن InSkillCoach
خبير في التدريب والتقنيات
مدرّب متخصص في التقنيات المتقدمة والذكاء الاصطناعي، تدعمه شركة GNeurone Inc.
الشهادات:
- AWS Certified Solutions Architect – Professional
- شهادات Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
1.0k
188
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش