AWS Copilot v1.21: CloudFront が登場!
投稿日: 2022 年 8 月 17 日
AWS Copilot コアチームは、Copilot v1.21 リリースを発表します。 このリリースに貢献してくれた @dave-moser、@dclark、@apopa57 に特別な感謝を捧げます。私たちのパブリックなコミュニティチャットは成長しており、オンラインでは 300 人以上、GitHub では 2.4k 以上のスターを獲得しています。AWS Copilot へご支援、ご支持いただいている皆様お一人お一人に感謝をいたします。
Copilot v1.21 では、いくつかの新機能と改良が施されています。
- CloudFront を Application Load Balancer に統合: CloudFront を Load Balanced Web Service の手前にデプロイできるようになりました。詳細はこちらをご覧ください。
- Environment セキュリティグループの設定: Environment Manifest にて Environment セキュリティグループのルールを設定します。詳しくはこちらをご覧ください。
- ELB アクセスログのサポート: Load Balanced Web Service に対して、Elastic Load Balancing のアクセスログを有効にします。詳しくはこちらをご覧ください。
job logs
の改善: Job のログをたどり、ステートマシンの実行ログを見ることができるようになりました。詳しくはこちらをご覧ください。- デプロイ前の CloudFormation テンプレートのパッケージ化 Addon: Copilot は、
copilot svc deploy
コマンドで Addon テンプレートをパッケージ化するようになりました。これにより、Copilot はコンテナ化された Service と一緒に AWS Lambda 関数をデプロイできるようになりました! 導入方法については Copilotのドキュメント をご覧ください。
AWS Copilot とは?
AWS Copilot CLI は AWS 上でプロダクションレディなコンテナ化されたアプリケーションのビルド、リリース、そして運用のためのツールです。 開発のスタートからステージング環境へのプッシュ、本番環境へのリリースまで、Copilot はアプリケーション開発ライフサイクル全体の管理を容易にします。 Copilot の基礎となるのは、 AWS CloudFormation です。CloudFormation により、インフラストラクチャを 1 回の操作でコードとしてプロビジョニングできます。 Copilot は、さまざまなタイプのマイクロサービスの作成と運用の為に、事前定義された CloudFormation テンプレートと、ユーザーフレンドリーなワークフローを提供します。デプロイメントスクリプトを記述する代わりに、アプリケーションの開発に集中できます。
より詳細な AWS Copilot の紹介については、Overview を確認してください。
CloudFront の統合
Copilot の Environment Manifest への最初の大きな追加の 1 つです! CloudFront は AWS Content Delivery Network (CDN) で、世界中にアプリケーションを配信するのに役立ちます。Environment Manifest に cdn: true
を設定して copilot env deploy
を実行するだけで、ディストリビューションを有効にできるようになりました。
現在サポートされている機能
- 公開されている Application Load Balancer (ALB) の手前に配置されたディストリビューション
- DDoS 攻撃から保護するために、ALB の Ingress は CloudFront ディストリビューション に制限
- インポートされた証明書、または Copilot で管理された証明書による HTTPS トラフィック
CloudFront での HTTPS 対応
Copilot は次のプロセスを簡単にします! app init
にて --domain
を指定して Application を初期化した場合、必要な証明書が作成されるので、追加の操作は必要ありません。
ホストゾーンに独自の証明書をインポートする場合について、CloudFront 用の正しい証明書をインポートする手順を説明します。
Info
CloudFront では、証明書は us-east-1
リージョンであることが要求されます。証明書をインポートする際は、このリージョンで証明書を作成するようにしてください。
まず、AWS Certificate Manager で us-east-1
リージョンに Application 用の証明書を作成します。この証明書に Application に関連する各ドメインを追加する必要があります。証明書を検証したら、Environment Manifest に以下のようなフィールドを追加して CloudFront 用の証明書をインポートします。
cdn:
certificate: arn:aws:acm:us-east-1:${AWS_ACCOUNT_ID}:certificate/13245665-h74x-4ore-jdnz-avs87dl11jd
copilot env deploy
を実行すると、Route 53 に Copilot で作成した CloudFront ディストリビューションを指す A レコードを作成することができます。マネジメントコンソールにて、そのレコードの仕向け先の設定として Alias
を選択して、トラフィックのルーティング先にて CloudFront ディストリビューションへのエイリアスを選択し、デプロイされたディストリビューションの CloudFront DNS を入力するだけです。
CloudFront へのトラフィック制限
CloudFront ディストリビューションを経由するパブリックトラフィックを制限するために、http
にパブリックロードバランサーのための新しいフィールドが用意されています。
http:
public:
security_groups:
ingress:
restrict_to:
cdn: true
Environment セキュリティグループの設定
Environment Manifest で、Environment セキュリティグループのルールを設定できるようになりました。
Environment Manifest におけるセキュリティグループルールテンプレートのサンプルは以下の通りです。
network:
vpc:
security_group:
ingress:
- ip_protocol: tcp
ports: 80
cidr: 0.0.0.0/0
egress:
- ip_protocol: tcp
ports: 0-65535
cidr: 0.0.0.0/0
ELB アクセスログのサポート
ロードバランサーに送信されたリクエストの詳細情報を取得する、Elastic Load Balancing のアクセスログを有効にすることができるようになりました。 アクセスログを有効にするには、いくつかの方法があります。
-
以下のように Environment Manifest にて
access_logs: true
を指定すると、Copilot が S3 バケットを作成してパブリックロードバランサーがアクセスログを保存するようになります。バケット名はname: qa type: Environment http: public: access_logs: true
copilot env show --resources
コマンドで表示することもできます。 -
また、独自のバケット名とプレフィックスを利用することも可能です。Copilot はこれらのバケットの詳細を使用して、アクセスログを有効にします。 Environment Manifest で以下のような設定を指定することで可能です。
独自のバケットをインポートする場合、そのバケットが存在し、ロードバランサーがアクセスログを書き込むために必要な bucket policy を所有していることを確認する必要があります。name: qa type: Environment http: public: access_logs: bucket_name: my-bucket prefix: my-prefix
job logs
ついに、スケジュールされた Job の実行ログを閲覧、追跡できるようになりました。 Job の実行回数を選択したり、特定のタスク ID でログをフィルタリングしたり、ステートマシンの実行ログを表示するかどうかを選択することができます。 例えば、Job の最後の起動からのログと、すべてのステートマシンの実行データを表示することができます。
$ copilot job logs --include-state-machine
Which application does your job belong to? [Use arrows to move, type to filter, ? for more help]
> app1
app2
Which job's logs would you like to show? [Use arrows to move, type to filter, ? for more help]
> emailer (test)
emailer (prod)
Application: app1
Job: emailer
states/app1-test-emailer {"id":"1","type":"ExecutionStarted","details": ...
states/app1-test-emailer {"id":"2","type":"TaskStateEntered","details": ...
states/app1-test-emailer {"id":"3","type":"TaskScheduled","details": ...
states/app1-test-emailer {"id":"4","type":"TaskStarted","details": ...
states/app1-test-emailer {"id":"5","type":"TaskSubmitted","details": ...
copilot/emailer/d476069 Gathered recipients
copilot/emailer/d476069 Prepared email body
copilot/emailer/d476069 Attached headers
copilot/emailer/d476069 Sent all emails
states/app1-test-emailer {"id":"6","type":"TaskSucceeded","details": ...
states/app1-test-emailer {"id":"7","type":"TaskStateExited","details": ...
states/app1-test-emailer {"id":"8","type":"ExecutionSucceeded","details": ...
copilot job run
を使って起動したタスクのログを追うこともできます。
$ copilot job run -n emailer && copilot job logs -n emailer --follow
次は?
以下のリンクより、新しい Copilot CLI バージョンをダウンロードし、GitHub や コミュニティチャットにフィードバックを残してください。
- 最新 CLI バージョンのダウンロード
- スタートガイドを試す
- GitHub でリリースノートの全文を読む
今回のリリースの翻訳はソリューションアーキテクトの杉本が担当しました。