Closed5
AWS DAV取得のための学習
ECS
概要
- クラウドでコンテナを本番環境利⽤するためのオーケストレーター
- 多様なワークロードをサポートする「タスク」「サービス」というシンプルなリソース表現
主要要素
タスク定義
- JSON 形式のテキストファイル
- パラメータは1~10個
- 代表的なパラメータ(一部)
- ファミリー(必須)
- タスク定義の名前のようなもの。ファミリーとリビジョン番号(最初は1)で1つのタスク定義が特定される。
- コンテナ定義(必須)
- コンテナのイメージやポートマッピング、メモリ制限などを指定する
- タスクサイズ(要求CPU & メモリ)
- タスクロール
- コンテナが利⽤できる IAM ロールを指定する
- タスク実行ロール
- ECS コンテナエージェントが利⽤する IAMロールを指定する
- ネットワークモード
- タスクのコンテナが使⽤するDocker ネットワークモードを指定する。none | bridge | host | awsvpc のいずれかを設定。
- コンテナのログ設定(logConfiguration)
- 環境変数(environment)
- 平文
- 環境変数(secrets)
- Secrets Manager シークレット、ssmパラメータを参照可能
- それぞれタスク実⾏ロールに適切なIAM アクセス許可の設定が必要
- dependsOnパラメータ
- 実⾏順序の制御を⾏いたい時に利⽤
- condition ” に設定できる値→ START | COMPLETE | SUCCESS | HEALTHY
- ファミリー(必須)
タスク定義の更新方法
- タスク定義はイミュータブル(変更できない)
- 変更する場合はファミリーの新しいリビジョンを作成する
- 実⾏中のタスクは更新されない
- サービスから利⽤している場合、サービスを更新する必要がある
- タスク
- タスク定義に基づき起動されるコンテナ群
- Task内コンテナは同⼀ホスト上で実⾏される
- サービス
- タスク+ELBやAutoScaling
- タスク実⾏コピー数(n個)を定義
- 起動後、タスク実⾏コピー数を維持
- 起動タイプ(EC2, Fargate)を設定
- クラスター
- タスクorサービスのグループ?
- スケジュールされたタスクの実⾏を設定可能
起動タイプ
- EC2
- ECS コンテナエージェントを実⾏し、クラスターに登録されているEC2 インスタンス
- EC2 起動タイプを使⽤して実⾏されたタスクは、アクティブなコンテナインスタンスに配置される
- ECS コンテナインスタンス IAM ロールが設定されている必要がある
- OS やエージェント類へのパッチ当て・更新が必要
- Amazon ECS-optimized AMI
- コンテナインスタンスに求められる要件/推奨事項にしたがって最適化されたAMI。Docker デーモンやECS コンテナエージェントなどがインストール済み
- ECS コンテナエージェント
- コンテナインスタンスの管理やタスクの実⾏/停⽌を⾏う
- ECS-optimized AMIではない場合、⾃⾝でインストールする必要がある
- このエージェント⾃体もコンテナで実⾏される
- AWS Fargate
- マネージド
コンテナの実行方法
- タスク
- バッチジョブなど処理が終わると停⽌するワークロードなど
- タスクの配置戦略
- タスク配置 / 終了時にインスタンスを選択するアルゴリズム
- binpack | random | spread
- サービス
- タスクが失敗/停⽌した場合は新しいタスクを起動して置き換え
- Web アプリケーションなど⻑時間実⾏するアプリケーションで利⽤
- サービススケジューラ戦略
- レプリカ
- クラスタ全体で必要数のタスクを維持
- 通常のアプリケーションではこちらを利⽤
- デーモン
- ロギングやモニタリングなど各コンテナインスタンスで実⾏したい共通機能を実⾏する際に利⽤
- Fargate 起動タイプでは利⽤不可
- レプリカ
- クラスターキャパシティープロバイダー
- Auto Scaling
ECS とIAM の連携整理
https://d1.awsstatic.com/webinars/jp/pdf/services/20200422_BlackBelt_Amazon_ECS_Share.pdf から引用
APIGateway
- APIはHTTPSのみ。HTTPエンドポイントはサポートしていない。
CodePipeline
定義
- ソース
- ビルド
- 検証環境デプロイ
- テスト実行
- 本番環境デプロイ
パイプライン作成
- サービスロールを指定
- パイプラインによって使用されるリソース。ロールにポリシーをアタッチする。
パイプラインの実行結果の通知
- 通知はAmazon SNSで送信される
アクション
- Custom アクション
- Lambda ファンクションの実行
- Step Function の実行
- Approval(承認) アクション
CodeStar
テンプレートベースで CI/CD 環境を素早く構築でき、ダッシュボードで一元管理できる。
→自動作成
CodeDeploy
特徴
- フルマネージド
- EC2, Lambda, オンプレサーバ, コンテナにデプロイできる
- エラーを検知すると自動的にロールバックを実行
- Pull型のデプロイ
主要コンポーネント
- アプリケーション
- デプロイするアプリケーションを一意に識別する名前
- コンピューティングプラットフォーム
- アプリケーションがデプロイされるプラットフォーム
- EC2/オンプレ
- Lambda
- ECS
- アプリケーションがデプロイされるプラットフォーム
- デプロイグループ
- デプロイ環境の定義
- Auto Scaling グループ
- タグのグループ
- EC2 インスタンス、オンプレミスインスタンス
- ECS サービス
- デプロイタイプ
- In-Place
- EC2,オンプレ
- Blue/Green
- EC2,Lambda,ECS
- In-Place
- デプロイ設定
- どのようにデプロイするかを定義したもの
- デプロイする割合やデプロイ成功、失敗の条件が異なる
- EC2/オンプレ
- One-at-a-time
- [Custom]
- Half-at-a-time
- All-at-once
- Lambda/ECS
- Linear
- Canary
- All-at-once
- リビジョン
- EC2
- ソースコード、Webページ、スクリプト等と
AppSpec
ファイルをまとめたアーカイブ
- ソースコード、Webページ、スクリプト等と
- Lambda
- Lambda デプロイ用の
AppSpec
ファイル
- Lambda デプロイ用の
- ECS
- ECS デプロイ用の
AppSpec
ファイル
- ECS デプロイ用の
- EC2
- ターゲットリビジョン
- リポジトリにアップロードした直近のリビジョン
- デプロイグループへデプロイする対象
- 自動デプロイで取得されるリビジョン
- サービスロール
- CodeDaployに付与するIAMロール
- CodeDaploy から AWS リソースを操作するために必要
- IAM インスタンスプロファイル
- EC2インスタンスに付与するIAMロール
EC2/オンプレへのデプロイ
- CodeDeploy Agentのインストールが必要
- デプロイグループに Auto Scaling Group を指定することで、スケールアウト時に最新のリビジョンが自動でデプロイされる
- ライフサイクルイベントへ Hook を指定し、スクリプトを実行可能
リビジョンの構成
- appspec.yml (必須)
- osやソースファイル、パーミッション、hooksスクリプトのディレクトリを指定する
- ビルド済みの成果物
- その他の配布物
- Hook スクリプト
- ApplicationStop
- BeforeInstall
- AfterInstall
- ApplicationStart
- ValidateService
- BeforeAllowTraffic
- AfterAllowTraffic
- BeforeBlockTraffic
- AfterBlockTraffic
Lambdaのデプロイ
- 関数重み付けエイリアスを利用したトラフィックのシフト
- カナリアデプロイ (10分間 10% のトラフィックをシフト、その後残り全部もシフト ) やリニアデプロイ(毎10分ごとに10%ずつシフト)を選択可能
- Validation Hookは各ステージへのデプロイ時のテストを有効化
appspecの定義
- Lambda
- デプロイするLambdaの指定
- Hook用Lambda関数の指定
- Lambda(SAM)
- SAMによるLambdaの指定
- カナリアデプロイの定義
- CloudWatchアラームの定義
- Hook用Lambda関数の指定
ECS のデプロイ
- Greenタスクをプロビジョニングし、ロードバランサーのトラフィックを切
り替え - 検証Hookによって各ステージのデプロイメントでテストを有効化
appspecの定義
- ターゲットタイプの指定
- タスク定義
- ロードバランサの定義
- フック関数の定義
- LambdaのARNを指定
重要:デプロイメントのためのコンテナイメージのタグ付け
- Dockerタグはデプロイ時のみではなく個々のコンテナの開始時にも利用
- latest や prod タグはスケールアウトイベント発生時に未テストのコードを本番環境へデプロイする結果を招く
- デプロイメントにはユニークでイミュータブルなタグを利用すべき
機能
- CloudWatch アラームによるデプロイ停止
- メトリクス やログを監視し、デプロイを停止することが可能
- ステータスの通知
- SNS, Chatbot
- VPC エンドポイントをサポート
- EC2 へのデプロイには codedeploy, codedeploy-commands-secure の両方が必要
- Lambda, ECS へのデプロイには codedeploy のみ必要
CodeBuild
buildspecファイルの構成
- version(必須)
- run-as
- コマンドを実行するLinuxユーザ
- 指定しない場合、すべてのコマンドが root ユーザで実行される
- env
- 環境変数
- proxy
- アーティファクトのアップロード時、CloudWatch Logs へのログ送信時に プロキシサーバを利用するか個別に定義可能
- batch
- バッチビルド設定
- 3つのタイプ
- build-graph
- バッチ内の他のタスクに依存する一連のタスクを定義
- build-list
- 同時に実行されるタスクを定義
- build-matrix
- さまざまな環境と並行して実行されるタスクを定義
- install, pre_build, build, post_build
- build-graph
- phases
- ビルドの各段階で CodeBuild が実行するコマンド記述する
- reports
- テストレポート の作成
- 対応フォーマット
- Cucumber JSON, JUnitXML, NUnitXML, NUnit3 XML, TestNGXML,Visual Studio TRX
- 対応フォーマット
- コードカバレッジレポートの作成
- C0,C1
- 対応フォーマット
- Clover XML, Cobertula XML, JaCoCoXML, SimpleCovJSON
- テストレポート の作成
- artifacts
- CodeBuild の出力を定義
- cache
機能
- ローカルでビルド実行
- CodeBuild エージェントを使用して、ローカルマシンでビルド可能
- Git と Docker が必要
- Session Manager でビルド環境へアクセス
- buildspec.yml に codebuild-breakpoint を埋め込み、ビルド設定でセッション接続を有効にする
- post_build?
- ビルドを再開するには codebuild-resume を実行する
- buildspec.yml に codebuild-breakpoint を埋め込み、ビルド設定でセッション接続を有効にする
- ビルドバッジ
- ステータスの通知
- SNS,Chatbot
- VPC 内リソースへのアクセス
- 固定 IP アドレスを必要とする外部サービスへの通信に NAT ゲートウェイ,NAT インスタンスの EIP を使用する
- NAT ゲートウェイ、NAT インスタンスの代わりにインターネットゲートウェイを利用することはできない
- VPC エンドポイントをサポート
このスクラップは2021/10/01にクローズされました