AWS Copilot v1.31: NLB 設定の拡張、タスク失敗時のログの改善、copilot deploy
の機能拡張
投稿日: 2023 年 10 月 5 日
AWS Copilot コアチームは Copilot v1.31 のリリースを発表します。
私たちのパブリックなコミュニティチャットは成長しており、オンラインでは 500 人以上、GitHub では 3k 以上のスターを獲得しています 🚀。 AWS Copilot へご支援、ご支持いただいている皆様お一人お一人に感謝をいたします。
Copilot v1.31 ではより柔軟で効率的な開発を支援する大きな機能強化が行われました:
- NLB 設定の拡張: Copilot が管理する Network Load Balancer (NLB) にセキュリティグループを追加可能になりました。また、NLB の設定で UDP プロトコルが指定可能になっています。詳細は、こちらのセクションをご参照ください。
- タスク失敗時のログの改善: Copilot では、デプロイ中にタスクが失敗した場合に、より詳細なログを提供するようになりました。これにより、トラブルシューティングが容易になります。
copilot deploy
の機能拡張: 複数のワークロードを一度にデプロイできるようになりました。また、--all
オプションにより、すべてのローカルワークロードのデプロイも可能になっています。- 静的サイトへ ACM 証明書のインポート: 自己署名の ACM 証明書を、静的サイトへインポートできるようになりました。詳細は、こちらのセクションをご参照ください。
AWS Copilot とは?
AWS Copilot CLI は AWS 上でプロダクションレディなコンテナ化されたアプリケーションのビルド、リリース、そして運用のためのツールです。 開発のスタートからステージング環境へのプッシュ、本番環境へのリリースまで、Copilot はアプリケーション開発ライフサイクル全体の管理を容易にします。 Copilot の基礎となるのは、 AWS CloudFormation です。CloudFormation により、インフラストラクチャを 1 回の操作でコードとしてプロビジョニングできます。 Copilot は、さまざまなタイプのマイクロサービスの作成と運用の為に、事前定義された CloudFormation テンプレートと、ユーザーフレンドリーなワークフローを提供します。 デプロイメントスクリプトを記述する代わりに、アプリケーションの開発に集中できます。
より詳細な AWS Copilot の紹介については、Overview を確認してください。
NLB 設定の拡張
Copilot にて、NLB の設定で UDP プロトコルが指定可能になりました。NLB が使用するプロトコルは nlb.port フィールドで指定します。
nlb:
port: 8080/udp
Info
NLB セキュリティグループは、NLB へのパブリックトラフィックをフィルタリングして、アプリケーションのセキュリティを強化できる AWS の新機能です。詳細については、AWS ブログをご参照ください。Copilot でこの機能を利用するために、NetworkLoadBalancer
および TargetGroup
リソースを再作成する必要があります。Copilot v1.31 時点では、udp
プロトコルを指定した場合のみ、NetworkLoadBalancer
および TargetGroup
リソースの再作成 (NLB へのセキュリティグループの紐付け) が行われます。ただし、Copilot v1.33 では、udp
以外のプロトコルに対してもこの変更が適用されます。すなわち、DNS エイリアスを利用していない場合、NLB のドメイン名が変更されます。DNS エイリアスを利用している場合、エイリアスはセキュリティグループが設定された新しい NLB を参照するようになります。
copilot deploy
の機能拡張
copilot deploy
で複数のワークロードを一度にデプロイできるようになりました。--name
フラグで複数のワークロードを指定できます。新しい --all
フラグを --init-wkld
フラグを組み合わせて利用すると、すべてのローカルワークロードを初期してデプロイできます。また、Service 名を指定する際に "deployment order" タグを利用可能になりました。
たとえば、複数のワークロードを含む新しいリポジトリをクローンした場合、次のコマンドで環境とすべての Service を初期化できます。
copilot deploy --init-env --deploy-env -e dev --all --init-wkld
別の例として、他の Service が公開するトピックをサブスクライブしている Worker Service がある場合、--all
と組み合わせて名前と順序を指定できます。
copilot deploy --all -n fe/1 -n worker/2
fe
をデプロイした後、次に worker
をデプロイした後に、ワークスペース内の残りの Service や Job がデプロイされます。
タスク失敗時のログの改善
Copilot v1.31 以前のバージョンでは、ECS タスクが停止した原因を確認する場合、AWS マネジメントコンソールから、「ECS」->「サービス」->「停止済みのタスク」->「停止理由」にページ遷移して確認する必要がありました。
この機能拡張により、copilot [noun] deploy
は CloudFormation のデプロイの進捗トラッカーの中に ECS タスクの停止理由を表示するようになりました。Copilot は、Load Balanced Web Service、Backend Service、Worker Service のデプロイ中に発生した、直近の 2 つのタスクの失敗を表示します。
- An ECS service to run and maintain your tasks in the environment cluster
Deployments
Revision Rollout Desired Running Failed Pending
PRIMARY 11 [in progress] 1 0 1 0
ACTIVE 8 [completed] 1 1 0 0
Latest 2 stopped tasks
TaskId CurrentStatus DesiredStatus
6b1d6e32 DEPROVISIONING STOPPED
9802d212 STOPPED STOPPED
✘ Latest 2 tasks stopped reason
- [6b1d6e32,9802d212]: Essential container in task exited
Troubleshoot task stopped reason
1. You can run `copilot svc logs --previous` to see the logs of the last stopped task.
2. You can visit this article: https://repost.aws/knowledge-center/ecs-task-stopped.
静的サイトへ ACM 証明書のインポート
Copilot では、Static Site の Manifest に新しいフィールド http.certificate
が追加されました。us-east-1
の検証済み ACM 証明書の ARN を次のように指定できます。
http:
alias: example.com
certificate: "arn:aws:acm:us-east-1:1234567890:certificate/e5a6e114-b022-45b1-9339-38fbfd6db3e2"
example.com
は、インポートする証明書のドメイン名または Subject Alternative Name (SAN) でなければならないことに注意してください。HTTPS トラフィックには、Copilot が管理する証明書の代わりに、インポートされた証明書が利用されます。