0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Copilot manifestファイルのTips

Last updated at Posted at 2024-07-09

AWS Copilotを使っていて、気がついた点や公式ドキュメントではわかりにくい点をまとめました

ビルド時にキャッシュを効かせる

公式ドキュメントでもdockerfileの指定は

image:
  build: './frontend/Dockerfile'

こんな感じでになっていますが、これだと毎回最初からビルドされるので非効率です

image:
  build:
    dockerfile: './frontend/Dockerfile'
    cache_from:
      - {アカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/xxxxxxx:latest
    args:
      BUILDKIT_INLINE_CACHE: 1

こんな感じでcache_fromにECRのレポジトリとargsにBUILDKIT_INLINE_CACHE:1を設定するとキャッシュが効きます
要は、docker buildコマンドで--cache-from--build-arg BUILDKIT_INLINE_CACHE=1を指定してるのと同じことになります
(ただ、これでも変更が無いのにキャッシュが効かないことがある謎)

起動コマンドで複数コマンドを実行したい場合は起動用シェルを作る

例えばこんな感じで

command: python manage.py migrate && gunicorn config.wsgi:application -b :80 --timeout 600

&&で繋いで複数コマンド実行とかはできません
素直にシェルにしましょう、例えばこんな感じ

dcokerfile
(省略)

COPY start.sh /start.sh
RUN chmod +x /start.sh

(省略)
start.sh
python manage.py migrate
gunicorn config.wsgi:application -b :80 --timeout 600
manifest.yml
command: sh /start-prd.sh

git管理したくない情報のsecretsへの渡し方

DBのアクセス情報とか各種アクセスキーなどですね
その場合、パラメータストアかシークレットマネージャーから渡すことになります

シークレットマネージャーの場合

secrets:
  {設定したい環境変数名}:
    secretsmanager: '{シークレットの名前}:{シークレットのキー}::'

例えば以下のような感じ

secrets:
  DATABASE_HOST:
    secretsmanager: 'hogehoge:host::'

パラメータストアの場合

secrets:
  {設定したい環境変数名}: {パラメータの名前}

パラメータの名前は
/copilot/${COPILOT_APPLICATION_NAME}/${COPILOT_ENVIRONMENT_NAME}/secrets/{パラメータ}
が推奨のようです
例えば以下のような感じ

secrets:
  API_KEY: /copilot/${COPILOT_APPLICATION_NAME}/${COPILOT_ENVIRONMENT_NAME}/secrets/API_KEY

またどちらも以下の二つのタグをつける必要があります
copilot-application: {copilotで作成したアプリケーション名}
copilot-environment: {デプロイする際のenvironment}

jobのdockerfileはlocationを指定する

jobは大抵はバックエンドと同じソースで起動コマンドだけ違うってことが多いと思います
その場合にmanifestファイルにバックエンドと同じようにdockerfileのパスを指定すると、ビルドされてしまいデプロイに時間がかかりますし、ECRのレポジトリも勝手に作られてしまいます
以下のような感じでlocationを指定すれば、デプロイ時にビルドされずにビルド済みイメージが使われます

image:
  location: {アカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/xxxxxxx:latest

jobでDB接続したい場合はsecurity_groupsを指定する

バックエンドサービスが使っているセキュリティグループをそのまま使えばいいはず
例えばApp Runnerの場合は、設定>ネットワーキング>セキュリティグループにありました

network:
  vpc:
    security_groups:
      groups:
        - 'sg-xxxxxxxxxxxx'

manifestファイルに変更があった場合にやること

サービスのmanifestファイルに変更があった場合は特にやることはなく、普通にpushするだけで反映されます
ただし、pipelinesのmanifestファイルはcopilot pipeline deployをしないと反映されませんでした

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?