AWS Copilot v1.20: Envronment Manifest とその先へ!
投稿日: 2022 年 7 月 19 日
AWS Copilot コアチームは、Copilot v1.20 のリリースを発表します。 このリリースに貢献してくれた @gautam-nutalapati、@codekitchen, そして @kangere に感謝します。私たちのパブリックなコミュニティチャットは成長しており、オンラインでは 300 人以上、GitHub では 2.3k 以上のスターを獲得しています。AWS Copilot へご支援、ご支持いただいている皆様お一人お一人に感謝をいたします。
Copilot v1.20 では、いくつかの新機能と改良が施されています。
- Environment Manifest: Infrastructure as Code のすべての利点を環境にもたらす Manifest ファイルを使用して、Environment を作成および更新できるようになりました。既存の Environment を移行する方法については、詳細な手順を参照してください。
- オートスケーリングクールダウンのサポート: Service Manifest でオートスケーリングクールダウンを指定できるようになりました。
- ビルドロールの追加ポリシー: Pipeline Manifest の
additional_policy
フィールドを通じて、CodeBuild ビルドプロジェクトのサービスロールにおける追加ポリシーを指定できるようになりました。ビルドプロジェクトロールに追加する追加ポリシードキュメントの指定方法については、詳細な手順を参照してください。 (#3709) - スケジュールされた Job の呼び出し: 新しい
copilot job run
コマンドを使用して、既存のスケジュールされた Job をアドホックに実行できるようになりました。 (#3692) - デフォルトセキュリティグループを拒否する: Service Manifest の
security_groups
にdeny_default
というオプションを追加し、デフォルトで適用される Environment のセキュリティグループの Ingress を削除するようにしました。 (#3682) - ALBを使った Backend Service の予測可能なエイリアス: 内部 ALB が設定されている Backend Service にエイリアスを指定しない場合、デフォルトの ALB ホスト名ではなく、
svc.env.app.internal
というホスト名で到達できるようになりました。 (#3668)
AWS Copilot とは?
AWS Copilot CLI は AWS 上でプロダクションレディなコンテナ化されたアプリケーションのビルド、リリース、そして運用のためのツールです。 開発のスタートからステージング環境へのプッシュ、本番環境へのリリースまで、Copilot はアプリケーション開発ライフサイクル全体の管理を容易にします。 Copilot の基礎となるのは、 AWS CloudFormation です。CloudFormation により、インフラストラクチャを 1 回の操作でコードとしてプロビジョニングできます。 Copilot は、さまざまなタイプのマイクロサービスの作成と運用の為に、事前定義された CloudFormation テンプレートと、ユーザーフレンドリーなワークフローを提供します。デプロイメントスクリプトを記述する代わりに、アプリケーションの開発に集中できます。
より詳細な AWS Copilot の紹介については、Overview を確認してください。
Environment Manifest
v1.20 以前は、クライアントは追加の設定で Environment を更新することができませんでした。例えば、Environment がドメインと関連付けられていない場合、ユーザーは env init --name copy --import-cert-arns
を実行して証明書付きの新しい Environment を作成し、古い Environment を取り壊す必要がありました。このリリースから、ユーザーは Environment を再作成することなく、Manifestを使用して Environment を変更することができます。
今後、新しい Environment リソースは env init
コマンドのフラグの代わりに manifest.yml
ファイルで設定されるようになります。
ウォークスルー
[1] copilot env init
は、アカウントに Environment を即座にデプロイしなくなりました。代わりに、このコマンドはローカルのワークスペースに manifest.yml ファイルを書き込みます。
copilot env init
の実行
$ copilot env init
Environment name: prod-pdx
Credential source: [profile default]
Default environment configuration? Yes, use default.
✔ Wrote the manifest for environment prod-pdx at copilot/environments/prod-pdx/manifest.yml
...additional output messages
$ cat copilot/environments/prod-pdx/manifest.yml
# The manifest for the "prod-pdx" environment.
# Read the full specification for the "Environment" type at:
# https://aws.github.io/copilot-cli/docs/manifest/environment/
# Your environment name will be used in naming your resources like VPC, cluster, etc.
name: prod-pdx
type: Environment
# Import your own VPC and subnets or configure how they should be created.
# network:
# vpc:
# id:
# Configure the load balancers in your environment, once created.
# http:
# public:
# private:
# Configure observability for your environment resources.
observability:
container_insights: false
[2] Manifest を修正した後、新しい copilot env deploy
コマンドを実行して Environment スタックを作成または更新することができます。
copilot env deploy
の実行
$ copilot env deploy
Name: prod-pdx
✔ Proposing infrastructure changes for the demo-prod-pdx environment.
- Creating the infrastructure for the demo-prod-pdx environment. [update complete] [110.6s]
- An ECS cluster to group your services [create complete] [9.1s]
- A security group to allow your containers to talk to each other [create complete] [6.3s]
- An Internet Gateway to connect to the public internet [create complete] [18.5s]
- Private subnet 1 for resources with no internet access [create complete] [6.3s]
- Private subnet 2 for resources with no internet access [create complete] [6.3s]
- A custom route table that directs network traffic for the public subnets [create complete] [15.5s]
- Public subnet 1 for resources that can access the internet [create complete] [6.3s]
- Public subnet 2 for resources that can access the internet [create complete] [6.3s]
- A private DNS namespace for discovering services within the environment [create complete] [47.2s]
- A Virtual Private Cloud to control networking of your AWS resources [create complete] [43.6s]
これで終わりです🚀! ワークフローは、copilot svc
と copilot job
コマンドの動作と同じです。
既存 Environment の移行
既存の Environment 用の manifest.yml ファイルを作成するために、Copilot は copilot env show
コマンドに新しい --manifest
フラグを導入しました。
以下の例では、既存の "prod"
Environment 用の Manifest ファイルを生成します。
[1] 最初に、現在の git リポジトリまたは新しいリポジトリに、Environment Manifest のための必須ディレクトリ構造を作成します。
prod のディレクトリ構造
# 1. Navigate to your git repository.
$ cd my-sample-repo/
# 2. Create the directory for the "prod" environment
$ mkdir -p copilot/environments/prod
[2] copilot env show --manifest
コマンドを実行して Manifest を生成し、"prod" フォルダにリダイレクトします。
Manifest の生成
$ copilot env show -n prod --manifest > copilot/environments/prod/manifest.yml
これで完了です! Manifest ファイルを仕様の任意のフィールドで変更し、copilot env deploy
を実行してスタックを更新することができるようになりました。
継続的デリバリ
最後に、Copilot は Service または Job として、Environment に対して同じ継続的デリバリーの Pipelineのワークフローを提供します。
[1] Manifest ファイルが作成されると、既存の copilot pipeline init
コマンドを実行して、デプロイステージを記述するための Pipeline の manifest.yml
ファイルや、CloudFormation 設定ファイルを生成するための "Build" ステージで使用する buildspec.yml
を作成することが可能です。
Pipeline Manifest と buildspec の作成
$ copilot pipeline init
Pipeline name: env-pipeline
What type of continuous delivery pipeline is this? Environments
1st stage: test
2nd stage: prod
✔ Wrote the pipeline manifest for copilot-pipeline-test at 'copilot/pipelines/env-pipeline/manifest.yml'
✔ Wrote the buildspec for the pipeline's build stage at 'copilot/pipelines/env-pipeline/buildspec.yml'
[2] AWS CodePipeline スタックを作成または更新するために、copilot pipeline deploy
を実行します。
Pipeline の作成
$ copilot pipeline deploy
Are you sure you want to redeploy an existing pipeline: env-pipeline? Yes
✔ Successfully deployed pipeline: env-pipeline
オートスケーリングクールダウンのサポート
Service Manifest に、オートスケーリングクールダウン期間を設定する機能が追加されました。Load Balanced
、Backend
、および Worker
Service では、count
の下にあるオートスケーリングフィールドを構成して、カスタムクールダウン期間を持つことができるようになりました。以前は、cpu_percentage
などの各スケーリングメトリックは、120 秒の 'in' クールダウンと 60 秒の 'out' クールダウンが固定されていました。今回、グローバルクールダウン期間を設定できるようになりました。
一般的なオートスケーリングクールダウンの使用
count:
range: 1-10
cooldown:
in: 30s
out: 30s
cpu_percentage: 50
また、クールダウンを個別に設定し、一般的なクールダウンを上書きすることも可能です。
特定のオートスケーリングクールダウンを使用する
count:
range: 1-10
cooldown:
in: 2m
out: 2m
cpu_percentage: 50
requests:
value: 10
cooldown:
in: 30s
out: 30s
次は?
以下のリンクより、新しい Copilot CLI バージョンをダウンロードし、GitHub や コミュニティチャットにフィードバックを残してください。
- 最新 CLI バージョンのダウンロード
- スタートガイドを試す
- GitHub でリリースノートの全文を読む
今回のリリースの翻訳はソリューションアーキテクトの杉本が担当しました。