#author("2022-12-12T12:54:11+00:00","default:wikiadmin","wikiadmin")
#author("2022-12-12T13:03:45+00:00","default:wikiadmin","wikiadmin")
-コンテナで動く。月100分まで無料なのが嬉しいではないか!

#contents

*用語集 [#zfd5eb49]

|CodeDeploy|アプリケーション||
|CodeDeploy|デプロイメントグループ|対象のECSやデプロイ戦略を設定|
|CodeDeploy|AppSpec.yml|対象のサービスやHookと呼ばれる各ステップでのライフサイクルイベントを定義したファイル|
|CodeBuild&CodeDeploy|imagedefinitions.json|イメージ名を後続のDeployタスクで利用するために生成|

*Code 4兄弟 [#i960afc4]

|Code commit|AWS製 Git repository|
|Code Pipeline|Githubにpushされたら取得、ビルド、デプロイなどのPipline|
|Code Build|主にBuild Stage担当|
|Code Deploy|主にDeploy Stage担当|

*Code Build [#cb915725]

-buildspec.ymlと直接編集スタイルがある、最初はコンソールから直接編集してうまくいったらgitにコミットすべし
-private repositoryとの接続は個人ならaccess-tokenで接続し、組織にはOAuth2.0で接続せよとの情報あり

**Parameter Store の利用。 [#bc5f81be]

IAMに登録必要

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeParameters"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameters"
            ],
            "Resource": "arn:aws:ssm:ap-northeast-1:自分のアカウントID:parameter/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:kms:ap-northeast-1:自分のアカウントID:key/KSMのSSMのKEY"
            ]
        }
    ]
 }

**cliから実行 [#zb7e8b8d]

 aws codebuild start-build --project-name プロジェクト名

 aws codebuild start-build --project-name プロジェクト名 --source-version ブランチ名

 aws codebuild start-build --project-name プロジェクト名 --environment-variables-override name=HOGE,value=value,type=PLAINTEXT

**S3 sync [#l37f3dcc]

 post_build:
    commands:
      - aws s3 sync release s3://{S3のバケット名} --delete --acl public-read


*Code Deploy [#de8c9e1a]

**Hook(ライフサイクル)はどこに入れるの? [#l7542015]

appspec.ymlにlambda関数を指定する

**terraform化まとめ [#g2515d2d]

|Resource名|主な役割|依存するResource|
|aws_codedeploy_deployment_group|CodeDeployでBlue/Greenを設定|ECSのクラスター&サービス/ALBのターゲットグループ|
|aws_lb|LBの枠だけ作成|
|aws_lb|LBの枠だけ作成|


**ECS Blue/Green [#k35546c2]

***Test Listener [#n52caf5d]

80(Production Port)と8080(Test Listener Port)を用意しておき、デプロイが走ったときに8080経由で新しいものにアクセスできる。

***BLUE/GREENの動き [#se6f68a1]

|フェーズ|80|8080|TG|
|デプロイ前|ECS-1|ECS-1|TG-BLUE|
|デプロイ中|ECS-1|ECS-2|TG-BLUE|
|HOOK完了|ECS-2|ECS-2TG-GREEN|

+ターゲットグループに80/8080を用意
+デプロイ中の切り替え前は8080で動作を確認


-ALBにターゲットグループが二つ必要(おそらくデプロイのたびに入れ替えてくれる)
-ALBのリスナールールで初期状態(Blue)に向けておく
-デプロイステージごとにライフサイクルイベントとしてLambdaを呼び出せるらしい

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

https://qiita.com/fukubaka0825/items/59974953bd4c69e9d5c7

**terraform/ecs/blue-green サンプル含めて乗っている [#d899c466]

https://qiita.com/marnie_ms4/items/202deb8f587233a17cca

-これが一番わかりやすい?

https://dev.classmethod.jp/articles/codepipeline-ecs-codedeploy/

https://dev.classmethod.jp/articles/codedeploy-ecs-from-cli/

https://qiita.com/NaokiIshimura/items/86ec84a13a6ceb831bba

-TaskDefinitionのバージョンだけ変えたjson
-appspec.yml

*Code pipeline [#z7b388af]

https://beyondjapan.com/blog/2020/04/fargate-deploy-flow-terraform/

*参考ページ [#u42960ef]

-DockerImageをビルドしてpush

https://docs.aws.amazon.com/ja_jp/codebuild/latest/userguide/sample-docker.html

*S3にアップロードして実施 [#q81dfd35]

-rootディレクトリにbuildspec.ymlを配置
-rootディレクトリに移動してzip

 zip -r /var/tmp/upload.zip *

*Tips [#m5ebede3]

-課金が1分未満切り上げっぽい。毎回フルフルにダウンロードしていてはとても無料枠では治らない。ローカルキャッシュ使いましょう。

#counter

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS