AI application development under the serverless architecture

はじめに:CI/CD は、アプリケーション開発フェーズに自動化プロセスを導入することで、アプリケーションを頻繁にお客様に届ける手法です。CI/CD のコアコンセプトは、継続的インテグレーション、継続的デリバリー、継続的デプロイメントです。

サーバーレスアーキテクチャと CI/CD ツールの組み合わせ

CI/CD は、アプリケーション開発フェーズに自動化を導入することで、アプリケーションを頻繁にお客様に届けるアプローチです。図に示すように、CI/CD のコアコンセプトは、継続的インテグレーション、継続的デリバリー、継続的デプロイメントの 3 つです。

開発と運用保守のチーム向けソリューションとして、CI/CD は新しいコードを統合する際に生じる問題に焦点を当てています。具体的には、CI/CD はアプリケーションライフサイクル全体(統合フェーズ、テストフェーズから配信フェーズ、デプロイメントフェーズまで)を通じて、継続的な自動化と継続的な監視を実現します。これらの関連する一連の処理は、一般に「CI/CD パイプライン」と総称され、開発と運用保守のチームがアジャイル方式で連携して支えています。

CI/CD の概念と構成図

サーバーレスアーキテクチャでは、通常、多数の関数が集まって完全な機能やサービスを構成しています。このように粒度の細かい関数は、プロジェクトの後期の保守において、関数の管理、プロジェクトのビルド、リリースなど、さまざまな面で大きな不便をもたらすことがあります。このような背景から、サーバーレスアーキテクチャにおいては CI/CD が特に重要となります。適切に設計された継続的インテグレーションとデプロイメントのプロセスは、ビジネスプロセス全体をより標準化できるだけでなく、手動操作や手動での統合・デプロイに起因するエラーの確率がある程度低減でき、同時に運用保守担当者の作業負荷を大幅に軽減できます。

サーバーレスアプリケーションの CI/CD を効率的かつ手軽に実現するには、Serverless Framework や Serverless Devs などの対応する開発者ツールを使用する必要があります。Serverless 開発者ツールを CI/CD プラットフォームに統合するプロセスは、以下の図のように簡略化できます。

Serverless 開発者ツールを CI/CD プラットフォームに統合するプロセス

1. GitHub Action との統合

GitHub Action の YAML ファイルに、Serverless Devs のダウンロード、設定、コマンド実行に関する内容を追加します。たとえば、GitHub リポジトリに `.github/workflows/publish.yml` ファイルを作成し、ファイルの内容を次のように記述します。

GitHub Action との統合には、主に以下の部分が含まれます。

- NPM を使用して Serverless Devs 開発者ツールの最新バージョンをインストールします:
run: npm install -g @serverless-devs/s
- config コマンドを使用してキーなどの情報を設定します:
run: s config add --AccountID ${{secrets.AccountID}} --AccessKeyID ${{secrets.
AccessKeyID}} --AccessKeySecret ${{secrets.AccessKeySecret}} -a default
- deploy コマンドでプロジェクトをデプロイする、build などのコマンドでプロジェクトをビルドするなど、特定のコマンドを実行します:
run: s deploy

キーの設定について:キー情報は ${{secrets.*}} の形式で取得します。このため、必要なキーを GitHub Secrets に設定する必要があります。上記の例では、AccountID、AccessKeyID、AccessKeySecret の 3 つのキーを設定すれば、関連する内容を利用できます。

GitHub Secrets のページは、図のようになります。

2. Gitee Go との統合
Gitee Go のサービスを有効化した後、パイプラインの YAML ファイルに Serverless Devs のダウンロード、設定、コマンド実行に関する内容を追加できます。たとえば、GitHub リポジトリに必要なファイルを作成します。

GitHub Action の統合プロセスと同様に、Gitee Go との統合には主に以下の部分が含まれます。
- NPM を使用して Serverless Devs 開発者ツールの最新バージョンをインストールします:
npm install -g @serverless-devs/s
- config コマンドを使用してキーなどの情報を設定します:
s config add --AccountID $ACCOUNTID --AccessKeyID $ACCESSKEYID --AccessKeySecret
$ACCESSKEYSECRET -a default
- deploy コマンドでプロジェクトをデプロイする、build などのコマンドでプロジェクトをビルドするなど、特定のコマンドを実行します:
s deploy
キーの設定について:キー情報は $* の形式で取得します。このため、必要なキーを Gitee の環境変数管理に設定する必要があります。上記の例では、AccountID、AccessKeyID、AccessKeySecret の 3 つのキーを設定すれば、関連する内容を利用できます。
Gitee の環境変数管理ページは、図のようになります。

3. Jenkins との統合

Serverless Devs を Jenkins に統合する前に、Jenkins 公式サイトに従って Jenkins をインストールし、起動する必要があります。ローカルで Jenkins を起動し、ブラウザで http://localhost:8080 にアクセスして基本設定を行った後、認証情報の設定を追加します。下図のようになります。

必要に応じて認証情報を追加できます。Alibaba Cloud を例にとると、以下の 3 つのグローバル認証情報を新規追加します。
- jenkins-alicloud-account-id : Aliyun の accountId
- jenkins-alicloud-access-key-id : Aliyun の accessKeyId
- jenkins-alicloud-access-key-secret : Aliyun の accessKeySecret
これで、Serverless Devs プロジェクトの設定を進めることができます。Jenkinsfile を作成します。

Jenkins との統合の主な内容は、以下の 2 つの部分です。

- Environment 部分:上記の手順で設定した認証情報に基づいてキーを処理します。
- stages 部分:sh 'scripts/setup.sh' の部分を含み、scripts/setup.sh ファイルを実行して関連する内容の準備と設定を行います。
scripts/setup.sh ファイルを準備するには、プロジェクト直下にファイルを作成するだけです。

4. Cloud Effect との統合

Cloud Effect では、開発者ツールから Serverless Devs を直接選択し、カスタムコマンドに以下の内容を入力します。
# input your command here
npm install -g @serverless-devs/s
s config add --AccountID ${ACCOUNTID} --AccessKeyID ${ACCESSKEYID} --AccessKeySecret
${ACCESSKEYSECRET} -a default
s deploy
GitHub Action、Gitee Go、Jenkins の設定と同様に、Cloud Effect との統合も主に 3 つの部分で構成されます。
- Serverless Devs 開発者ツールの最新バージョンをインストールします:
npm install -g @serverless-devs/s
- config コマンドを使用してキーなどの情報を設定します:
s config add --AccountID ${ACCOUNTID} --AccessKeyID
${ACCESSKEYID} --AccessKeySecret
- deploy コマンドでプロジェクトをデプロイする、build などのコマンドでプロジェクトをビルドするなど、特定のコマンドを実行します:
s deploy -y

5. CI/CD プラットフォームとの統合

まとめ 以上の例から、自動化リリースを行う際の 3 つのコアプロセスは以下の通りです。
- ツールのダウンロード:コマンドは npm install -g @Serverless-devs/s です。
- キーの設定:コマンドは s config add --AccountID $ACCOUNTID --AccessKeyID $ACCESSKEYID --AccessKeySecret $ACCESSKEYSECRET -a default です。
- プロジェクトのデプロイ:コマンドは s deploy です。

ここでは GitHub Action、Gitee Go、Jenkins、Yunxiao を例として取り上げましたが、どのツールを CI/CD プラットフォームと統合する場合でも、上記の 3 つのコアプロセスは実質的に変わりません。また、上記のプロセスは主に自動化リリースを目的としていますが、リリース前にテストやリファクタリングが必要な場合もあるため、具体的な要件に応じて適宜調整してください。

結論として、サーバーレスアプリケーションの CI/CD を非常に簡単、迅速、かつ効率的に構築するには、充実した開発者ツールが不可欠です。

Serverless Devs はマルチクラウド対応の開発者ツールです。このツールを使用すると、AWS、Alibaba Cloud、Tencent Cloud など、複数のクラウドベンダーの関数コンピューティングなどの関連サービスを非常に簡単、迅速、かつ便利にデプロイできます。同時に、Serverless Devs はオープンソースプロジェクトでもあり、ユーザーがいつでもどこでもコンポーネントやアプリケーションを貢献できるようになっています。

サーバーレスアプリケーションの可観測性

サーバーレスアプリケーションの可観測性は、多くのユーザーから注目されています。可観測性とは、システムの外部の現れから内部状態を判断する方法です。アプリケーション開発において、可観測性はシステムの内部の健全性を判断するのに役立ちます。システムに問題が発生したときには、問題の特定、トラブルシューティング、分析に役立ちます。システムが正常に稼働しているときには、リスクの評価や今後発生しうる問題の予測に役立ちます。

サーバーレスアプリケーション開発において、関数の同時実行数が増加し続けている場合、ビジネスが急速に拡大している可能性があります。同時実行の上限に達してフロー制御がトリガーされることを避けるため、開発者は事前に同時実行数を増やしておく必要があります。

Alibaba Cloud Function Compute を例にとると、Alibaba Cloud Function Compute は、ロギング、メトリクス、トレーシングを含む複数の可観測性ディメンションを提供しています。

コンソールのモニタリングセンターでは、全体のメトリクス、サービスレベルのメトリクス、各関数のメトリクス、および現在の関数コンピューティングのリクエスト記録を確認できます。

リクエスト記録に応じて、Function Compute の詳細情報を確認することもできます。

コンソールのモニタリングセンターで関数のログなどの情報を確認できるほか、関数の詳細ページでも Function Compute の詳細なログ情報を確認できます。

Related Articles

Explore More Special Offers

  1. Short Message Service(SMS) & Mail Service

    50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00

phone お問い合わせ
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.