Amazon Web Services ブログ

Category: Programing Language

サーバーレス LAMP スタック – Part 5: CDK コンストラクトライブラリ

本投稿は AWS サーバーレス アプリケーションのシニアデベロッパーアドボケートである Benjamin Smith による寄稿です。 この投稿では、サーバーレス LAMP スタック用の新しい CDK コンストラクトライブラリが、開発者によるサーバーレス PHP アプリケーションの構築にどのように役立つかを学びます。 AWSクラウド開発キット(AWS CDK)は、クラウドアプリケーションリソースをコードで定義するためのオープンソースソフトウェア開発フレームワークです。開発者は、TypeScript、Python、C#、Javaなどの使い慣れたプログラミング言語でインフラストラクチャを定義できます。開発者は、インターフェイス、ジェネリクス、継承、メソッドアクセス修飾子など、言語が提供する機能を利用できます。AWS Construct ライブラリは、CDK アプリケーションで AWS リソースを定義するための API を公開するモジュールの広範なセットを提供します。 「サーバーレス LAMP スタック」ブログシリーズでは、ベストプラクティス、コード例、多くのサーバーレスコンセプトの詳細を紹介し、これらが PHP アプリケーションにどのように適用されるかを示しています。また、PHP 開発者のインスピレーションを刺激するのに役立つ、コミュニティからの貴重な貢献に焦点を当てています。 このサーバーレス LAMP スタックの各コンポーネントについては、一連のブログ記事で詳しく説明しています。 パート1:サーバーレス LAMP スタックの紹介 パート2:リレーショナルデータベース パート3:Webサーバーの置き換え パート4:サーバーレス Laravel アプリの構築 サーバーレス LAMP スタック用の CDK コンストラクトライブラリは、AWS デベロッパーアドボケートである Pahud Hsiehによって作成された抽象概念です。サーバーレス LAMP スタックを構成するすべてのリソースを定義するための単一の高レベルコンポーネントを提供します。 サーバーレス LAMP スタックの CDK コンストラクト […]

Read More

サーバーレス LAMP スタック – Part 4: サーバーレス Laravel アプリの構築

本投稿は AWS サーバーレス アプリケーションのシニアデベロッパーアドボケートである Benjamin Smith による寄稿です。 この投稿では、サーバーレスアプローチで Laravel アプリケーションをデプロイする方法を学びます。 これは「サーバーレス LAMP スタック」シリーズの4番目の投稿になります。過去の投稿はこちらです。 パート1:サーバーレス LAMP スタックの紹介 パート2:リレーショナルデータベース パート3:Webサーバーの置き換え Laravel は PHP 用のオープンソースの Web アプリケーションフレームワークです。フレームワークを使用すると、開発者は一般的なコンポーネントとモジュールを再利用することで、より速く構築できます。また、開発標準に準拠することにより、長期的なメンテナンスにも役立ちます。ただし、従来の LAMP スタックを使用して PHP フレームワークをスケーリングする場合は、まだ課題があります。サーバーレスアプローチを使用してフレームワークをデプロイすると、これらの課題の解決に役立ちます。 Laravel アプリケーションのサーバーレスインフラストラクチャへの展開を簡素化する方法は数多くあります。ここで紹介する方法では、AWSサーバーレスアプリケーションモデル(AWS SAM)テンプレートを使用しています。これによって、Laravel アプリケーションが単一の Lambda 関数にデプロイされます。この関数は、Bref FPM カスタムランタイムレイヤーを使用して PHP を実行します。AWS SAMテンプレートは、「サーバーレス LAMP スタック – パート3: Webサーバーの置き換え」で詳細に説明されている次のアーキテクチャをデプロイします。 サーバーレス LAMP スタック AWS SAM を使用した Laravel と Bref のデプロイ Composer […]

Read More

サーバーレス LAMP スタック – Part 3: Webサーバーの置き換え

本投稿は AWS サーバーレス アプリケーションのシニアデベロッパーアドボケートである Benjamin Smith による寄稿です。 この投稿では、Web サーバーを使用せずにサーバーレス PHP アプリケーションを構築する方法を学びます。 この投稿の後半で、bref および Serverless Visually Explained の作成者である Matthieu Napoli が FastCGI Process Manager の実装を Lambda 関数内で使うことでそれを可能にする方法を説明しています。Bref は、PHP 用のオープンソースのランタイム Lambda レイヤーです。 また、プライベート Amazon S3 バケットから静的アセットを安全に提供およびキャッシュするように Amazon CloudFront を構成する方法を示します。動的リクエストは、その後 Amazon API Gateway にルーティングされ、単一の AWS Lambda 関数にルーティングされます。 これらのサービスを組み合わせることで、PHP アプリケーション用の従来の Web サーバーを置き換えることができます。 サンプルコードについては、この GitHubリポジトリ にアクセスしてください。 サーバーレス LAMP スタックアーキテクチャについては、この投稿で説明しています。Web アプリケーションは2つのコンポーネント(静的アセットと動的コンテンツを生成するバックエンドアプリケーション)に分割されます。Lambda […]

Read More

サーバーレス LAMP スタック – Part 2: リレーショナルデータベース

本投稿は AWS サーバーレス アプリケーションのシニアデベロッパーアドボケートである Benjamin Smith による寄稿です。 この投稿では、サーバーレスアプリケーションで Amazon Aurora MySQLリレーショナルデータベースを使用する方法を学びます。Amazon RDS Proxy を使用してデータベースへの接続をプールおよび共有する方法と、構成を選択する方法を示します。この投稿のコード例は PHP で記述されており、この GitHubリポジトリにあります。なお、この概念自体は、AWS Lambda でサポートされている他のランタイム言語にも適用できますので、PHP に限定しない内容としてお読みいただけます。 サーバーレス LAMP スタック このサーバーレス LAMP スタックアーキテクチャについては、この記事で説明しています。このアーキテクチャでは、PHP Lambda 関数を使用して、Amazon Aurora MySQL データベースの読み取りと書き込みを行います。 Amazon Aurora は、MySQL および PostgreSQL データベースに高いパフォーマンスと可用性を提供します。基盤となるストレージは、最大64 テビバイト(TiB)まで需要に応じて自動的に拡張されます。 Amazon Aurora DB インスタンスは、パブリックアクセスを防止するために仮想プライベートクラウド(VPC)内に作成されます。 Lambda 関数から Aurora データベースインスタンスに接続するには、同じ VPC にアクセスするようにその Lambda 関数を設定する必要があります。 RDS データベースに直接接続すると、データベースのメモリ不足が発生する可能性があります。これは、データベース接続の急増、または高速で開閉する多数の接続が原因です。これにより、クエリが遅くなり、アプリケーションのスケーラビリティが制限される可能性があります。この問題を解決するために、Amazon RDS Proxy が実装されました。 […]

Read More

新しいサーバーレス LAMP スタック – Part 1: 概要紹介

本投稿は AWS サーバーレス アプリケーションのシニアデベロッパーアドボケートである Benjamin Smith による寄稿です。 これは、PHP 開発者向けの投稿シリーズの第一弾です。このシリーズでは、PHP でサーバーレステクノロジーを使用する方法を説明します。サーバーレスアプリケーションを構築するために利用できるツール、フレームワーク、戦略や、なぜ今始めるべきかについて説明します。 今後の投稿では、Laravel や Symfony などの PHP フレームワークとともに構築された Web アプリケーションに AWS Lambdaを使用する方法を示します。Lambda を Web ホスティング機能の代替として使用することから、分離されたイベント駆動型のアプローチに移行する方法を示します。最小限のスコープの複数の Lambda 関数を他のサーバーレスサービスと組み合わせて、パフォーマンスの高いスケーラブルなマイクロサービスを作成する方法について説明します。 まずは、カスタムランタイム API を使用して Lambda で PHP を使用する方法を学びます。サンプルコードについては、この GitHubリポジトリにアクセスしてください。 サーバーレスLAMPスタック 従来の PHP アプリケーションの課題 スケーラビリティは、従来の LAMP スタックの伝統的な課題です。スケーラブルなアプリケーションとは、非常に多様なレベルのトラフィックを処理できるアプリケーションです。PHP アプリケーションは、多くの場合、必要に応じて Web サーバーを追加することにより、水平方向にスケーリングされます。これは、リクエストをさまざまな Web サーバーに転送するロードバランサーを介して管理されます。サーバーを追加するたびに、ネットワーキング、管理、ストレージ容量、バックアップと復元のシステム、およびアセット管理インベントリの更新に関するオーバーヘッドが増加します。さらに、水平方向にスケーリングされた各サーバーは独立して実行されます。これにより、構成の同期が困難になる可能性があります。 従来の LAMP スタックアプリケーションによる水平スケーリング 各サーバーには独自のディスクとファイルシステムがあり、開発者がユーザーセッションを処理するメカニズムを追加する必要があることが多いため、新しいストレージの課題が発生します。 サーバーレステクノロジーを使用すれば、開発者のためにスケーラビリティが(自動で)管理されます。トラフィックが急増した場合、サービスが拡張され、追加のサーバーを展開する必要なく、需要に応えます。これにより、アプリケーションをプロトタイプから本番環境にすばやく移行できます。 サーバーレス LAMP アーキテクチャ 従来の Web […]

Read More

AWS App2Container – Java および ASP.NET アプリケーション用の新しいコンテナ化ツール

お客様は、コンテナとサーバーレステクノロジーを使用して新しいアプリケーションを開発することが多くなり、ソフトウェアデリバリーライフサイクルを自動化するために最新の継続的インテグレーションおよび継続的デリバリー (CI/CD) ツールを使用しています。また、手動で、または従来のシステムを使用して、構築および管理される多数の既存のアプリケーションを維持しています。異なるツールを使用してこれら 2 つのアプリケーションのセットを維持することで、運用上のオーバーヘッドが増加し、新しいビジネス機能の提供ペースが低下します。お客様は、既存のアプリケーションと新しいアプリケーションの両方について、管理ツールと CI/CD プロセスを可能な限り標準化できるようにしたいと考えています。その目的を達成するための最初のステップとして、既存のアプリケーションをコンテナにパッケージ化するオプションに目を向けています。 しかし、既存のアプリケーションをコンテナ化するには、アプリケーションの依存関係の識別、dockerfiles の書き込み、各アプリケーションのビルドプロセスとデプロイメントプロセスの設定など、手動による多くの作業を必要とします。これらの手動による作業は時間がかかり、エラーが発生しやすく、最新化に向けた取り組みの速度を低下させる可能性があります。 本日、当社は AWS App2Container をリリースします。これは、コードを変更することなく、オンプレミス、Amazon Elastic Compute Cloud (EC2)、または他のクラウドで実行されている既存のアプリケーションをコンテナ化するのに役立つ新しいコマンドラインツールです。App2Container は、サーバーで実行されているアプリケーションを検出し、それらの依存関係を識別して、Amazon ECS および Amazon EKS へのシームレスなデプロイのために、関連するアーティファクトを生成します。また、AWS CodeBuild および AWS CodeDeploy との統合を提供して、コンテナ化されたアプリケーションを繰り返し構築およびデプロイすることを可能にします。 AWS App2Container は、アプリケーションコンポーネントごとに、アプリケーションファイル/フォルダー、Dockerfiles、Amazon Elastic Container Registry (ECR) のコンテナイメージ、ECS タスク定義、Kubernetes デプロイ YAML、Amazon ECS または EKS にアプリケーションをデプロイする CloudFormation テンプレート、および AWS CodeBuild と CodeDeploy を活用する AWS Codepipeline でビルド/リリースパイプラインを設定するためのテンプレートといったアーティファクトを生成します。 本日より、App2Container を使用して、Windows […]

Read More

面白法人カヤックにおけるビルディングブロックとしてのAmazon ECSの活用とサービス間連携の工夫

開発者がアプリケーションを開発・パッケージング・デプロイするための強力な手法として、コンテナ技術はその代表的な1つに挙げられます。そしてそのようなコンテナ技術における様々なユースケースをサポートすべく、AWSではAmazon Elastic Container Service (Amazon ECS) に代表される多様なサービスを提供しています。
面白法人カヤック の技術部/インフラエンジニアである 藤原 俊一郎 氏にゲスト投稿いただき、Amazon ECS をはじめとした各AWSサービスをビルディングブロックとして組み合わせて利用していく上での課題と、その解決策の実例を紹介します。

Read More

AWS CLI v2 が一般利用可能となりました

AWS CLI バージョン 2 (v2) の v2.0.0 GA リリースを発表できることを嬉しく思います。 AWS CLI v2 は AWS CLI v1 をベースに構築され、コミュニティのフィードバックに基づいた多くの機能と拡張機能が含まれています。 新機能 AWS CLI v2 には、改良されたインストーラ、AWS シングルサインオン(SSO)などの新しい設定オプション、さまざまなインタラクティブ機能など、いくつかの新機能があります。

Read More

AWS Systems Manager の新しいオートメーション機能

本日、AWS Systems Manager 内で追加された自動化機能を発表します。Systems Manager をまだ使用していない方のために説明すると、本サービスは統合されたユーザーインターフェイスを提供するため、複数の AWS サービスから運用データを表示し、AWS リソース全体の運用タスクを自動化できます。 この新しいリリースで、さらに強力になりました。AWS Systems Manager に追加機能を追加しました。これにより、チーム内または組織内の他のユーザーと自動化を構築、実行、共有できるため、インフラストラクチャの管理を繰り返すのがより簡単になり、エラーが発生しにくくなります。 ナビゲーションメニューの AWS Systems Manager コンソール内には、オートメーションという項目があり、このメニュー項目をクリックするとオートメーションを実行ボタンが表示されます。 これをクリックすると、実行するドキュメントを尋ねられます。AWS では、選択可能なドキュメントのライブラリを提供しますが、今日は独自のドキュメントを作成するため、ドキュメントを作成ボタンをクリックします。 これにより、新しい画面が表示され、Python または PowerShell スクリプトを実行するドキュメント (オートメーションプレイブックとも呼ぶ) を作成できます。 コンソールには、ドキュメントを編集するための 2 つのオプションがあります。YAML エディタまたはガイド付きの段階的なユーザーインターフェイスを提供する「ビルダー」ツールで、各ワークフローステップのドキュメントを含めることができます。 それでは、簡単なオートメーションを構築して実行してみましょう。ビルダーツールを使用してドキュメントを作成する場合、最初に必要なのはドキュメント名です。 次に、説明を入力する必要があります。以下に示すように、Markdown を使用して説明の書式を設定できます。説明は、ドキュメントの機能を説明する絶好の機会です。ほとんどのユーザーは、これらのドキュメントをチームの他のユーザーと共有し、日常の問題を解決するためのドキュメントライブラリを構築したいと思っています。 オプションで、ドキュメントのパラメータを指定するように求められます。これらのパラメータは、後で作成するすべてのスクリプトで使用できます。この例では、3 つのパラメータ imageId、tagValue、instanceType を作成しました。このドキュメントを実行するときに、設定したデフォルトを上書きするこれらのパラメータの値を提供する機会があります。 誰かが私のドキュメントを実行すると、実行されるスクリプトは AWS サービスと対話します。ドキュメントは、Assume ロールを提供するオプションとともに、ほとんどのアクションに対するユーザー権限を使用して実行されます。ただし、スクリプトを実行する操作を含むドキュメントの場合、スクリプトが AWS API を呼び出すときにロールが必要です。 ビルダーツールで、Assume ロールをグローバルに設定できます。ただし、ドキュメントに assumeRole というパラメータを追加したいので、それを実行している人であれば誰でも別のパラメータを提供できます。 次に、Assume ロールプロパティのテキストボックスで {{assumeRole}} 構文を使用して、このパラメータをグローバルに assumeRole に結び付けます (パラメータ名 […]

Read More

Amazon DynamoDB スキャンパフォーマンスに対する Python バージョンの影響の分析

Amazon DynamoDB は、柔軟なスキーマを使用できる NoSQL データベースです。これは、項目それぞれにどのような属性が存在するかという点で、同じテーブル内の項目が互いに異なることを意味します。 前の AWS ブログ記事では、項目あたりの属性数の影響について検証しましたが、私たちは先日、お客様の Python アプリケーションにおけるスキャンが遅いという問題を解決するお手伝いをしていた時、Python バージョンのアップグレードがパフォーマンス向上に役立つかどうかを確認するために、異なるバージョンの Python インタプリタを調べました。 この記事では、Python インタプリタのバージョンがスキャンパフォーマンスにどのように影響し得るかをお見せしたいと思います。 手法 パーティションキーとソートキー (どちらも文字列) で構成されるプライマリキーというシンプルな構造の DynamoDB テーブルを 1 つ作成しました。また、それぞれに 7 文字のキー名 (「field01」、「field10」、など) を含む、個別の 6 文字の文字列属性 24 個 (6 x 24 = 合計 144 文字) で構成されるもうひとつの DynamoDB テーブルも作成しました。 DynamoDB には、単一のリクエストで取得するデータの量に 1 MB の上限があるので、ランダムなデータ 10,000 項目でテーブルをシードしてから、1 MB の上限内に収まるだけの項目を取得する単一のスキャンを実行します。その後、クライアント側でこれらの項目を取得し、アンマーシャルするためにかかる時間を測定します。 ウォークスルー 以下は、Python バージョンの比較に関する典型的な質問です。 Python のあるバージョンを使用する場合と、別のバージョンを使用する場合とでは、どのようにパフォーマンスが変化するのか? […]

Read More