0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

AWS Fargateのプラットフォームバージョンを1.3.0に固定したつもりが失敗したお話

はじめに

弊社はAWSのリソースをTerraformで管理しているのですが、Fargateのプラットフォームバージョンの固定に失敗したお話を書きます。
将来、v1.5.0が出た時に、同じ轍を踏まないように、同様な事象で困った方のお役に少しでも立てれば良いなと思い、この記事を書きました。

環境

  • Terraform v0.12.20
  • Amazon ECS
    • Fargate v1.3.0
  • AWS CodePipelineによるBlue/Greenデプロイ
  • バッチ処理時、アプリケーションの方からAWS SDK経由でECSタスクを起動

経緯

2021年の3月頃、FargateのプラットフォームバージョンのLATEST1.3.0 -> 1.4.0へ更新されました。

その更新されるというアナウンスが来た時点で、ECSを管理しているTerraformのコードを確認したところ、プラットフォームバージョンは指定されておらず、デフォルト値のLATESTで動いている事が判明。

そこで、対応としては、LATEST(この時点ではv1.3.0)で動いている物に関しては、v1.3.0に固定するという対応を行いました。

  • aws_ecs_serviceplatform_version1.3.0を指定
main.tf
resource "aws_ecs_service" "api" {
# ... other configuration ...
  launch_type                       = "FARGATE"
  platform_version                  = "1.3.0"
# ... other configuration ...
}

そして頃合いを見て、v1.4.0の検証を行い、動作に問題無ければ順次v1.4.0に上げていく予定でした。

問題発覚

ある日、v1.4.0で動いているECSタスクを発見!!!

原因&対応

複数の原因があり、それぞれの対応を行ったところ、無事にv1.3.0で起動しました

[原因1] CodePipelineでBlue/Greenデプロイを行っていたので、デプロイ時にCodeDeployの設定で上書きされてしまうが、CodeDeployの設定にはプラットフォームバージョンの記載が漏れていた

  • -> [対応] appspec.yamlPlatformVersion1.3.0を指定
appspec.yaml
# ... other configuration ...
  PlatformVersion: "1.3.0"

[原因2] AWS SDKを使用してECSタスクを起動している箇所への設定が漏れていた

  • バッチ処理用にアプリケーションから一時的にECSタスクを起動していた
  • -> [対応] ECSタスク起動時処理のplatform_version1.3.0を指定
ecs.rb
  launch_type: "FARGATE",
  platform_version: "1.3.0",
  • AWS SDK for Ruby

[原因3] バージョン指定方法に誤りがあった(番外編)

  • 誤って1.3と指定していた箇所があったが、パッチバージョンまで正確に記述しないとPlatformUnknownExceptionが発生する
  • -> [対応] 1.3.0とパッチバージョンまで指定

終わりに

v1.4.0でENI周りの変更があったので、ECSタスク起動時に問題が発生するかと思っていたのですが、恐らく、NATゲートウェイ経由で良い具合に通信ができたいたため(未検証)、不幸中の幸いで障害は起こりませんでした。
しかし、意図せずバージョンが上がり、使用しているアーキテクチャの後方互換性が保たれていない場合に、ある日突然アプリケーションが動かないという事態は十分に起こりえます。
将来、LATESTv1.5.0を指した時に、同様な事象で困った方のお役に少しでも立てれば幸いです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?