【AWS】CodeDeploy ~ 入門編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2020/01/23/231827

の続き。
AWS Code シリーズ の CodeDeploy を扱いそうなので
予習しておく

目次

【1】CodeDeploy とは?
【2】特徴
【3】対象サービス - デプロイ対象先
 1)使用上の注意
【4】デプロイ方式
 1)AllAtOnce
 2)HalfAtATime
 3)OneAtATime
【5】AppSpecファイル(appspec.yml)
【6】サンプル
 例1:AWS Lambda のデプロイ向けの AppSpec ファイル

【1】CodeDeploy とは?

* アプリケーションの自動デププロイを管理するためのサービス

公式サイト
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/welcome.html

【2】特徴

* 指定した複数台のサーバに対して、同じデプロイが実行できる
* AppSpecファイル(詳細は後述)により、
 デプロイ前後に自分で作成したスクリプト処理を実行可能

【3】対象サービス - デプロイ対象先

1)EC2
2)Lambda
3)Amazon ECS (DockerコンテナをEC2上で管理できるサービス)
4)オンプレミスサーバ

1)使用上の注意

* CodeDeploy エージェント を
 インストールしておく必要がある

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/codedeploy-agent-operations-install.html

【4】デプロイ方式

* デプロイ方式は、以下の通り。
~~~~~~~
1)AllAtOnce
2)HalfAtATime
3)OneAtATime
~~~~~~~

1)AllAtOnce

* 全サーバを同時にデプロイ
 + メリット:リリース時間が短くなる
 + デメリット:システム全体でダウンタイムが発生

2)HalfAtATime

* 半分のサーバをデプロイ
 + メリット:ダウンタイムを発生しづらくリリース時間が比較的短くなる
 + デメリット:高負荷の処理が発生しない時間にリリースするなどの考慮が必要

3)OneAtATime

* 1つづつサーバをデプロイ
 + メリット:システムをダウンする可能性を低くより安全にリリースできる
 + デメリット:リリース時間が長くなる

【5】AppSpecファイル(appspec.yml)

* AppSpec file 
 => application specification file
 => アプリケーション仕様ファイル

* デプロイの詳細を定義したファイル(ファイル形式は、YAMLとJSON)
 => CodeBuild でいう「buildspec.yml」的な?
  (buildspec.yml については以下の関連記事を参照のこと)

https://dk521123.hatenablog.com/entry/2020/01/21/221122

* デプロイ対象先によって、構造が変わるっぽい
(以下の公式サイトを参照)

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file-structure.html

公式サイト
https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file.html

【6】サンプル

* appspec.yml のサンプルを書いてみた。

例1:AWS Lambda のデプロイ向けの AppSpec ファイル

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/reference-appspec-file-example.html#appspec-file-example-lambda

# AppSpec file のバージョン(固定)
version: 0.0

# デプロイする Lambda 関数に関する情報を指定
Resources:
  - myLambdaFunction:
      Type: AWS::Lambda::Function
      Properties:
        # name – 必須。これはデプロイする Lambda 関数の名前
        Name: "myLambdaFunction"
        # alias – 必須。これは Lambda 関数のエイリアスの名前
        Alias: "myLambdaFunctionAlias"
        # currentversion – 必須。
        # トラフィックが現在指している Lambda 関数のバージョン
        CurrentVersion: "1"
        # targetversion – 必須。
        # トラフィックの移行先の Lambda 関数のバージョン
        TargetVersion: "2"

# デプロイを検証するために
# 特定のデプロイライフサイクルイベントで実行する Lambda 関数を指定
Hooks:
  # BeforeAllowTraffic –
  # トラフィックがデプロイされた Lambda 関数のバージョンに
  #  移行する前にタスクを実行
  - BeforeAllowTraffic: "LambdaFunctionToValidateBeforeTrafficShift"
  # AfterAllowTraffic –
  # トラフィックがデプロイされた Lambda 関数のバージョンに
  #  移行した後でタスクを実行
  - AfterAllowTraffic: "LambdaFunctionToValidateAfterTrafficShift"

参考文献

https://dev.classmethod.jp/articles/cm-advent-calendar-2015-aws-re-entering-codedeploy/

関連記事

CodePipeline ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/01/23/231827
CodeBuild ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/01/21/221122
AWS CloudFormation ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/26/224812