#author("2024-11-15T11:01:58+00:00","default:wikiadmin","wikiadmin") #author("2024-11-15T13:06:26+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担当| *GHA Self Hosted Runner [#y43b8c7d] -PATを利用して接続だが、WebHookのREADは必須。それ以外の権限がよくわからず。「Error while fetching Github runner token: 400 error calling github/runnerToken: 400 Bad Request」 -Admin read&write!!が必要。 **参考サイト [#od09f0f5] -https://developer.mamezou-tech.com/blogs/2024/04/29/githubactions-codebuild-runner/ *Code Build [#cb915725] -buildspec.ymlと直接編集スタイルがある、最初はコンソールから直接編集してうまくいったらgitにコミットすべし -private repositoryとの接続は個人ならaccess-tokenで接続し、組織にはOAuth2.0で接続せよとの情報あり -CodePipelineから呼び出される場合はSourceの設定は無視されるので、Pipelineからのコール前提であればS3のバケットを指定しておけばよい。 **Githubとの接続 [#ffd5959c] Default Connectionでは1つのリージョンでGithubなら全部共通。 さすがに不便すぎると思われて、カスタム接続が選べるようになっている。ただそれがウラでSecretManagerを使うため、課金されて激怒!! ***OAuth [#x088d6ed] -個人でGithubにリダイレクトして許可するというもの。以下で設定状況確認可能。 https://github.com/settings/applications **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/*" } ] } **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/ *Terraform CICD [#f34e701e] https://techblog.techfirm.co.jp/entry/terraform-on-codepipeline *参考ページ [#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 * cd infra/node/koa zip -r dest.zip ./ -x '*node_modules*' '*output*' *Tips [#m5ebede3] -課金が1分未満切り上げっぽい。毎回フルフルにダウンロードしていてはとても無料枠では治らない。ローカルキャッシュ使いましょう。 #counter