[WIP] AWS DevOpsサービス簡略概要
March 27, 2025

Of the DOP, By the DOP, For the DOP
AWSのDevOpsサービスを理解するために、DOP試験で扱われる6つのドメインをざっくりまとめてみたいと思う。
未入力状態のサービスも今後追加していきたい。
-
1. SDLC自動化[go]
-
2. IaC[go]
-
3. Cloud solution[go]
-
4. Monitoring & Logging[go]
-
5. Incident & Event[go]
-
6. Security & Compliance[go]
1. SDLC[1]自動化return ↩
CodeBuild
* buildspec.ymlを用いる
- ↪︎ ソースディレクトリのルートに配置
- ↪︎
version
,run-as
,env
,proxy
,batch
,phases
,reports
,artifacts
,cache
シーケンスが存在シーケンス Note env/parameter-store - CodeBuildサービスロールに ssm:GetParameters
を追加しSSM Parameter Storeに保存されているカスタム環境変数を取得env/secrets-manager - Secrets Managerに保存されているカスタム環境変数を取得 phases/install - インストール時に実行するコマンドなどを記述 phases/pre_build - ビルドの前に実行するコマンドをなど記述 phases/build - ビルド中に実行するコマンドをなど記述 phases/post_build - ビルドの後に実行するコマンドをなど記述
- Amazon SNSを介してのビルド結果通知などphases/*/commands - install
はオプションだが、他のシーケンスでは必須phases/*/finally - オプションブロック
-finally
ブロックはcommands
ブロックの実行後に実行される
-commands
ブロックが失敗しても実行される
-commands
,finally
両ブロックが成功したらフェーズが成功artifacts/files - アーティファクトの出力先をなど記述
- S3バケットへ渡すなどcache/paths - キャッシュの場所を記述 - ↪︎
buildspec.yml
の代わりにCodeBuildまたはCodePipelineのコンソールを使いbuild
,artifacts
を使える
* ビルドの情報はCodeBuild(要約)やCloudWatch Logs(詳細)に転送される
* CodePipelineを使ってのビルドの場合はCodePipelineで制限されたビルド情報を確認できる
* ビルドのソースはGitHub, S3などから取得できる
* 連携: CodeDeploy, S3, CloudWatch, IAM, Secrets Manager, SSM, etc.
CodeDeploy
* appspec.ymlを用いる
- ↪︎
BeforeInstall
,AfterInstall
,ApplicationStart
,ApplicationStop
hooksが存在
* EC2/On-premises(オンプレミス), ECS, Lambdaにデプロイ可能
-
↪︎ EC2/On-premises
-
↪︎ EC2/On-premisesにデプロイする場合はCodeDeploy Agentが必要
-
↪︎ デプロイ設定(In-place, Blue/green)
項目 Note CodeDeployDefault.
AllAtOnce- In-place: 同時に全部デプロイ
↪︎ ex) 9つのインスタンスデプロイ時1つでも成功すればデプロイ成功, すべて失敗すればデプロイ失敗
- Blue/green:
↪︎ Deployment to replacement environment: in-placeと同じ
↪︎ Traffic rerouting: トラフィックが少なくとも一つのインスタンスにrerouting成功したら成功, 全てが失敗したら失敗CodeDeployDefault.
HalfAtATime- In-place: 同時に最大で50%のインスタンスをデプロイ(切り捨て)
↪︎ ex) 9つのインスタンスデプロイ時1回で最大4つ(切り捨て)のインスタンスをデプロイ. 5つ以上のインスタンスデプロイに成功すれば成功 or 失敗- Blue/green:Note
Multiple ASG環境でのデプロイ時CodeDeployはインスタンスが所属しているASGに関係なく同じく50%のデプロイをする
↪︎ ex)それぞれ10個のインスタンスを持つ2つのASGのASG1, ASG2がある時, CodeDeployはASG1の10個を1回目でデプロイする可能性があり, このデプロイの成功で50%に達したため成功と見なされる可能性がある
↪︎ Deployment to replacement environment: in-placeと同じ
↪︎ Traffic rerouting: インスタンスの最大50%のトラフィックをroutingし, 最低で50%のreroutingに成功すれば成功 or 失敗CodeDeployDefault.
OneAtATime- In-place: 一度に1つのインスタンスをデプロイするが例外あり
↪︎ ex) 9つのインスタンスデプロイ時に一度に1つのインスタンスをデプロイするが, 最後の1つのインスタンスデプロイは失敗しても成功となる. 最後のインスタンスを除いては1つでも失敗したら失敗となる
↪︎ 1度に1つのインスタンスのみオフラインになるため
↪︎ ex) 1つのインスタンスの場合は1つのインスタンスデプロイ成功時, 成功
- Blue/green:
↪︎ Deployment to replacement environment: in-placeと同じ
↪︎ Traffic rerouting: 新しい環境のインスタンス1つにトラフィックを1回ずつreroutingし, 全てのトラフィックがreroutingされると成功, 例外に最後のインスタンスは失敗しても成功となる(In-place同様)
-
-
↪︎ ECS
- ↪︎ デプロイ設定(Blue/green)
項目 Note CodeDeployDefault.
ECSLinear
10PercentEvery1Minutes1分に10%ずつシフト CodeDeployDefault.
ECSLinear
10PercentEvery3Minutes3分に10%ずつシフト CodeDeployDefault.
ECSCanary
10Percent5Minutesはじめに10%をシフトし, 5分後に残りの90%をシフ CodeDeployDefault.
ECSCanary
10Percent15Minutesはじめに10%をシフトし, 15分後に残りの90%をシフト CodeDeployDefault.
ECSAllAtOnceトラファックを一気に新しいECS containerにシフト
(ALB, NLB)Note
Network Load Balancer使用時はCodeDeployDefault.ECSAllAtOnce
のみ使用可能
- ↪︎ デプロイ設定(Blue/green)
-
↪︎ Lambda
- ↪︎ デプロイ設定(Blue/green)
項目 Note CodeDeployDefault.
LambdaLinear
10PercentEvery1Minute1分に10%ずつシフト CodeDeployDefault.
LambdaLinear
10PercentEvery2Minutes2分に10%ずつシフト CodeDeployDefault.
LambdaLinear
10PercentEvery3Minutes3分に10%ずつシフト CodeDeployDefault.
LambdaLinear
10PercentEvery10Minutes10分に10%ずつシフト CodeDeployDefault.
LambdaCanary
10Percent5Minutesはじめに10%をシフトし, 5分後に残りの90%をシフト CodeDeployDefault.
LambdaCanary
10Percent10Minutesはじめに10%をシフトし, 10分後に残りの90%をシフト CodeDeployDefault.
LambdaCanary
10Percent15Minutesはじめに10%をシフトし, 15分後に残りの90%をシフト CodeDeployDefault.
LambdaCanary
10Percent30Minutesはじめに10%をシフトし, 30分後に残りの90%をシフト CodeDeployDefault.
LambdaAllAtOnceトラファックを一気に新しいLambda functionsにシフト
- ↪︎ デプロイ設定(Blue/green)
* CloudWatch(Alarms, Logs, Events(→ EventBridge)), CloudTrail(Log Monitoring), SNSでモニタリング可能
-
↪︎ CloudWatch
-
↪︎ CloudTrail
-
↪︎ SNS
* 簡略まとめ
-
In-place Blue/green Canary Downtime 大 中 ~ 少 無(設定による) Rollback 難 速 速 Deploy Spped 速 速(設定による) 遅
CodeCommit
* 公式的な新規使用は2024.07.25に停止されてあるが,まだ既存顧客は使用可能(2025.03.27基準)
* CodeCommitと言うサービス名から,Git基盤のAWS Fully Managedサービスであるコト,コードのSourceとして使われる機能であることは熟知する必要あり
Elastic Compute Cloud(EC2)
- ↪︎ CLIもしくは他のAWS serviceから使う場合は
Base64 encoding
が必要[2] - ↪︎
terraform
のprovisioner
と似ている
Elastic Container Service(ECS)
* ECS task definitionのイメージはECR, Docker hubの他にもプライベートレポジトリから取得可能
EC2 Image Builder
Simple Storage Service(S3)
S3 Glacier
Elastic Container Registry(ECR)
Elastic Kubernetes Service(EKS)
Lambda
Elastic File System(EFS)
Elastic Block Store(EBS)
Identity and Access Management(IAM)
CodeArtifact
CodePipeline
CodeGuru
Command Line Interface(CLI)
CodeStar
Software Development Kit(SDK)
2. IaCreturn ↩
CloudFormation(CFN)
- ↪︎ CloudFormationがAWS resourcesを生成するために参照するblueprint
- ↪︎
YAML
orJSON
形式で、.yaml
,.json
,.template
,.txt
拡張子で使用可能 - ↪︎ CloudFormation consoleでも作成可能
- ↪︎ Parameters
- ↪︎ Typeが存在
- ↪︎ その他のsectionについてはリンク参照
- ↪︎ CloudFormation templateによって生成されたAWS resources[3](EC2, S3, RDSなどの)の集合
- ↪︎ 環境を手動ではなく, コード(Infrastructure as Code, IaC)で管理することで自動化および再利用が容易になる
- ↪︎ スタック変更失敗時のためのオプションは, Retry, Update, Roll backがある
- ↪︎ Stack Instance
- ↪︎ StackSetのStackを参照(reference)する概念
- ↪︎ Stack InstanceがあるからといってStackが必ず存在するわけではない
- ↪︎ StackSetのStackを参照(reference)する概念
- ↪︎ 既に存在するCloudFormation templateを更新する際に変更内容を確認(差分確認など)できる
- ↪︎ 確認後,
execute-change-set
コマンドで実行可能 - ↪︎
terraform plan
と似ている
* Reference
* 連携: Service Catalog, S3, CloudWatch, IAM, Secrets Manager, SSM, etc.
Systems Manager(SSM)
* SSM Agent
- ↪︎ インスタンスとSSMが通信できるようにするAgent
- ↪︎ 多くのAmazon Linux, Ubuntu, Windows AMIにはプレインストールされている
* Documents
- ↪︎
JSON
,YAML
形式のテンプレートで,SSMを使って行える作業を文書化(標準化)できる - ↪︎ AppConfig, Automation runbook(Automation, State Manager, Maintenance Windows), CloudFormation templateなどを使用可能
- ↪︎ AWSが公式でメンテナンスするDocumentが豊富
- ↪︎
AWS-ConfigureWindowsUpdate
,AWS-RunPatchBaseline
,AWS-StartInteractiveCommand
など
- ↪︎
- ↪︎ 出題ポイントとは違うと思うが, CDKを使って定義 & デプロイも可能
* Session Manager
- ↪︎ インスタンスとSSH無しでもConsole, CLI接続ができる
- ↪︎ Bastion無し
- ↪︎ ポートを開ける必要がないのでセキュリティに役立つなど
- ↪︎ Patch Managerと違ってCloudWatch Logs(+S3)でlogging可能
* Run Command
- ↪︎ 複数のインスタンスにSSH無しでも同時にコマンドを実行可能
* Parameter Store
- ↪︎ アプリケーションの構成データ,シークレット情報などを階層構造で保存できる
- ↪︎ KMSサポート
- ↪︎ バージョン管理可能
- ↪︎ Parameter Policiesを使うためにはAdvanced tierが必要
- ↪︎
Expiration
,ExpirationNotification
,NoChangeNotification
- ↪︎
- ↪︎ Secrets Managerと使い分ける
-
条件 オススメサービス シークレットの自動ローテーション Secrets Manager コストを抑えたい Parameter Storea(Standard) 単純な設定値だけどセキュリティが必要 Parameter Store SecureString CI/CD pipelineで敏感な構成を注入したい 両方とも可能
* Patch Manager
- ↪︎ インスタンス,OSのパッチを自動化できる
- ↪︎ コンプライアンスレポーティング(Compliance reporting)
- ↪︎ Maintenance Windowsの
Scan
orInstall
タスクによりターゲットで指定されたノードのPatch baselineを確認 - ↪︎
csv
形式のパッチコンプライアンスレポートをS3 bucketに出力可能 - ↪︎ レポートは1回のみでも,定期的にでも出力可能
- ↪︎ レポートはQuickSightなどで分析可能
- ↪︎ Maintenance Windowsの
- ↪︎ ex) 全てのインスタンスはリリースから3日が経ったパッチだけをインストールしたい
- ↪︎ Patch baselineで
ApproveAfterDays
=3設定
- ↪︎ Patch baselineで
* State Manager
- ↪︎ インスタンスの構成状態を維持,持続的な管理が可能
* Inventory
- ↪︎ インスタンスの情報を自動的に取得できる
- ↪︎ 管理ノードのMetadataのみ収集
- ↪︎ Athena, EventBridgeと連携可能
* AppConfig
Serverless Application Model(SAM)
* template.ymlを用いる
- ↪︎ テンプレートで簡単にAWS resource(Lambda, API Gateway, etc.)を定義できる
* CloudFormation基盤なのでStack関連機能を使える
* sam local
を使ってローカル環境で開発できる
* sam sync
をCloudFormation Stackを全部redeployせず変更があったresourceだけアップデートできる(sam deploy
との違い)
Cloud Development Kit(CDK)
↪︎ App / Stack(s) / Construct構造
* Programming language(TypeScript, JavaScript, Python, Java, C#, Go)で作成したコードがCloudFormaitonテンプレートに変換
- ↪︎
cdk synth
でCloudFormationテンプレートを生成して,cdk deploy
でdeploy可能- ↪︎ YAMLを使わない
Secrets Manager
* SSM Parameter Storeと使い分ける
Service Catalog
* 組織内で承認されたリソースを標準化してデプロイ可能
- ↪︎ 意図しない変更によるセキュリティ問題,開発者(ユーザー)のAWSへの負荷を軽減でき,コスト管理が用意になる
* Products
- ↪︎ デプロイされるAWS Resource
- ↪︎ CloudFormation Templateのこと
- ↪︎ Service Catalogを使ってデプロイされたProducts
- ↪︎ CloudFormation Stackのこと
- ↪︎ Productsの集合(collection)
- ↪︎ 他のAWSアカウントにも提供可能
- ↪︎ IAMを使ってユーザーのPortfolioへのアクセスを制御可能
-
Constraint Note Launch constraints IAM権限など Notification constraints AWS SNS topicを使ってStack eventsの管理 Template constraints CFN templateへのカスタマイズを提供
Step Functions
* 分散アプリケーションの各段階をビジュアル化(visualize),プロセスの自動化,マイクロサービスのオーケストレーションするワークフロー(Workflows/State machines)を提供
-
Standard Express 実行時間 最大1年 最大5分 実行速度 1秒に2,000回 1秒に100,000回 実行保証 1回(Exactly-once) 最低1回(At-least-once) 実行履歴 Step Functionsで確認可能 CloudWatch Logsから確認可能 コスト 状態遷移数(state transition) 実行時間 + 回数 - ↪︎ 長期ワークフロー → Standard
- ↪︎ 高速処理/大容量イベント → Express
Elastic Beanstalk(EB)
- ↪︎ Elastic Beanstalkのcomponentsを論理的に集めた(a logical collection)もの
- ↪︎ Environments, Versions, and Environment configurationsを含む
- ↪︎ Elastic BeanstalkでApplicationは概念的にフォルダーのようなもの
- ↪︎ 特定バージョンのラベルがついてデプロイ可能なアプリケーションのコード
- ↪︎ 実際はコード入っているS3 objectを指す
- ↪︎ Application versionを実行するAWS resourceの集合
- ↪︎ Environmentを生成するとElastic Beanstalkは指定されたバージョンのアプリケーションが実行できるAWS resourceを自動でprovisioning
-
Tier Note Web Server Environment Tier HTTPリクエストを処理する環境 Worker Environment Tier Amazon SQS queueからタスクを持ってきて処理するバックエンド環境
- ↪︎ 環境及びリソースを構成するパラメータと設定の集合
- ↪︎ Environment Configurationを変更するとElastic Beanstalkが自動で反映
- ↪︎ ユニークな環境構成のためのテンプレート
- ↪︎ API及びAWS CLIでは保存された構成を
configuration templates
と呼ぶ
* Platform
- ↪︎ PlatformはOS, programming language runtime, web server, application server, そしてElastic Beanstalk componentsを合わせた概念
* デプロイ設定
-
Policy Note All at once - 新しいバージョンを全てのインスタンスに同時にデプロイ
- デプロイ中に環境の全てのインスタンスがサービスから除外される(downtime)Rolling - 新しいバージョンがBatch(グループのような概念)に別れてデプロイ
- 各Batchごとにサービスから除外されるためデプロイ中にはBatchのインスタンス分処理量が減ることになるRolling
with additional batch- 新しいバージョンがBatch(グループのような概念)に別れてデプロイされるが, デプロイ前にまず追加の新しいBatchを始めてデプロイ中にも処理量が維持される Immutable - Immutable updateにより新しいインスタンスをデプロイ後切り替える Traffic splitting - 新しいバージョンを新しい環境にデプロイ後, トラフィックを指定に比率で分配
* デプロイ比較
-
Method デプロイ失敗による影響 デプロイ所要時間 Zero downtime DNS変更 Rollback方法 デプロイ先 All at once Downtime発生 ⏳ ❌ 🟢 手動redeploy 既存インスタンス Rolling - 1つのBatch分サービスから除外
- 失敗前のBatchはデプロイ成功⏳⏳[4] 🟢 🟢 手動redeploy 既存インスタンス Rolling
with an additional batch- 最初のBatch失敗時に最小化
- そうでなければRollingと類似⏳⏳⏳[4] 🟢 🟢 手動redeploy 既存 + 新規インスタンス Immutable 最小限 ⏳⏳⏳⏳ 🟢 🟢 新規インスタンス終了 新規インスタンス Traffic splitting 新規インスタンスに向かう
指定の比率のトラフィックに影響⏳⏳⏳⏳[5] 🟢 🟢 トラフィックRerouting + 新規インスタンス終了 新規インスタンス Blue/green 最小限 ⏳⏳⏳⏳ 🟢 ❌ URL変更 新規インスタンス
* 簡略まとめ
- ↪︎ Blue/greenは他の方式と違って2つの環境を運用することになるためDNSの変更(CNAME Swap)が発生し,別途Route 53を設定しない限りBlue(old)からGreen(new)へ一気に切り替わる
- ↪︎ Traffic splittingはALB(EC2, ECS, EB), API Gateway Canary(Serverless)を使ってトラフィックを分配し,段階的に移行できる
- ↪︎ ex) Stage 1(90%/10%) → Stage 2(50%/50%) → Stage 3(0%/100%)
Config
Organizations
SCP
Control Tower
3. Cloud solutionreturn ↩
API Gateway
* REST/HTTP/WebSocket APIを生成,デプロイ,管理できる
* Fully ManagedサービスであるためIAMやCognitoなどのAWS認証サービスとも統合可能(Authorization/Authentication)
* CI/CD統合やバージョン管理可能
DynamoDB
Relational Database Service(RDS)
Aurora
Redshift
Route 53
CloudFront
Fargate
Load Balancers(ALB, NLB, CLB)
Elastic Disaster Recovery(DRS)
Athena
4. Monitoring & Loggingreturn ↩
CloudWatch
CloudTrail
KMS
Kinesis Data Firehose
Kinesis Data Streams
OpenSearch Service
Inspector
QuickSight
X-Ray
Simple Notification Service(SNS)
Auto Scaling groups(ASG)
5. Incident & Eventreturn ↩
EventBridge
Health
Simple Queue Service(SQS)
Auto Scaling
6. Security & Compliancereturn ↩
Cognito
VPC
Multi-Factor Authentication(MFA)
Security Token Service(STS)
Access control list(ACL)
Network Firewall
Web Application Firewall(WAF)
Shield
Security Hub
Detective
Directory Service
Macie
Certificate Manager(ACM)
GuardDuty
Trusted Advisor
1: Systems development life cycle, SDLC(ソフトウェア開発ライフサイクル)とは何ですか?return ↩
2: ref.1: Base64 encoding, ref.2: Base64 encoded UserData propertyreturn ↩
3: AWS resource and property types referencereturn ↩
-
service-provider::service-name::data-type-name
4: Batchサイズによるreturn ↩
5: evaluation timeオプションによるreturn ↩