エラー内容
AWS Codedeployを実施したところ、「置き換えタスクセットのデプロイ」が33%のところで止まってしまい一向に進まなくなりました。本記事ではどのような解決したか記載します。
原因
半年ほど前にも、別の原因でこの現象に陥りました。エラーのログが見当たらないのでなかなか苦戦します。。
そのときにいろいろ原因は調査し記載したのですが、いずれでもなかったです。ご参考までに。
【AWS】Codedeployのタイムアウトエラーにより「置き換えタスクセットのデプロイ」が一向に終わらない件の対応方法
今回の原因は、env
ファイルでした。
デプロイが失敗するとついELBやデプロイグループなどAWSリソースの問題かと気にしてしまうのですが、がっつりソースコードに問題がありました。
ビルドしたソースはFASTAPIのコード。以下config.py
がありました。
from pydantic import BaseSettings
class Settings(BaseSettings):
db_user: str
db_password: str
db_host: str
db_port: Union[int, str] = 3306
db_name: str
class Config:
env_file = ".env"
@sample
def SQLALCHEMY_DATABASE_URI(self) -> str:
SQLALCHEMY_DATABASE_URI: str = (f'mysql://{self.db_user}:{self.db_password}@{self.db_host}:'
f'{self.db_port}/{self.db_dbname}')
return SQLALCHEMY_DATABASE_URI
config.py
についての公式ドキュメントはこちら:Settings in another module
FastAPIアプリケーション内で環境設定や設定情報を管理するためのPythonモジュールです。アプリケーションの設定情報を一元管理するもので、環境変数や.env
ファイルなどから設定情報を読み込みます。
ビルド時にbuildspec.yaml
で.env
からDB環境変数が渡るようになっていたのですが、その.env
にdb_user
たちを書いていなかったのです...(一旦使わなくなり.env
から消してしまっていたため)。
Settings
クラスのdb_user
やdb_password
などの属性は.env
ファイルから環境変数を読み込んで設定されるため、.env
ファイルに必要な環境変数が設定されていない場合、これらの属性には値が設定されず、デプロイが失敗してしまったのです。アプリケーションが正しく動作せず、デプロイプロセスが途中で停止してしまうんですね。
解決方法
.env
ファイルに必要な環境変数を設定することで、デプロイが正常に完了しました。
仮に使用しない環境変数だとしても、Settings
クラスに書いたままの状態で.env
から消すとこうなるんですね。AWS CodeDeployが「置き換えタスクセットのデプロイ」中に途中で停止する問題に遭遇した時は、一度環境変数が正しく設定されているか確認するのも大事、、ということですな。