Amazon Web Services ブログ

Category: AWS Lambda

AWS のサイトですか?AWS Lambda を使用したドメインの識別

以下のゲスト投稿で、私の同僚である Tim Bray は IsItOnAWS.com を構築した方法について説明しています。このサイトは、AWS の IP アドレスレンジのリストと Tim が記述した Lambda 関数を使用して、お気に入りのウェブサイトが AWS で実行されているかどうかを調べることを目的としています。 AWS のサイトですか? クリスマスの時期に遊び半分でプログラミングをしていたら、おもしろい Lambda 関数ができました。きっと気に入ってもらえると思います。指定したドメイン名 (または IP アドレス) (IPv6 でも可能) が、公表されている AWS IP アドレスレンジ に含まれているかどうかを調べてくれます。IsItOnAWS.com で実際に試してみることができます。構築の過程では、1 つの Lambda 関数で別の Lambda 関数を作成しています。JSON 形式の IPv4 および IPv6 CIDR で提供されているレンジのリストはここです。説明書はここで、Jeff Barr のブログ もあります。以下は、JSON 形式の IP レンジの例です。 { “syncToken”: “1486776130”, “createDate”: “2017-02-11-01-22-10”, “prefixes”: [ […]

Read More

AWS のサイトですか? AWS Lambda を使用したドメインの識別

以下のゲスト投稿で、私の同僚である Tim Bray は IsItOnAWS.com を構築した方法について説明しています。このサイトは、AWS の IP アドレスレンジのリストと Tim が記述した 関数を使用して、お気に入りのウェブサイトが AWS で実行されているかどうかを調べることを目的としています。 AWS のサイトですか? クリスマスの時期に遊び半分でプログラミングをしていたら、おもしろい Lambda 関数ができました。きっと気に入ってもらえると思います。指定したドメイン名 (または IP アドレス) (IPv6 でも可能) が、公表されている AWS IP アドレスレンジ に含まれているかどうかを調べてくれます。IsItOnAWS.com で実際に試してみることができます。構築の過程では、1 つの Lambda 関数で別の Lambda 関数を作成しています。JSON 形式の IPv4 および IPv6 CIDR で提供されているレンジのリストはここです。説明書はここで、Jeff Barr のブログ もあります。以下は、JSON 形式の IP レンジの例です。 { “syncToken”: “1486776130”, “createDate”: “2017-02-11-01-22-10”, “prefixes”: [ { […]

Read More

Amazon ECS におけるコンテナ インスタンス ドレイニングの自動化方法

同僚のMadhuri Periが素晴らしい記事を書いてくれました。AutoScalingグループのクラスタをスケールダウンする際にインスタンスからタスクを事前に削除するために、コンテナ インスタンス ドレイニングを利用する方法です。 —– Amazon ECSクラスタでは、クラスタからインスタンスを削除する必要があるタイミングというのがいくつかあります。例えば、システムを更新するとき、Dockerデーモンを更新するとき、あるいはクラスタのサイズをスケールダウンするときなどです。コンテナ インスタンス ドレイニング機能によって、クラスタ上のタスクに影響を与えることなく、コンテナインスタンスを削除することができます。この機能により、コンテナインスタンスがDRAINING状態である間はそのインスタンスに対して新しいタスクの配置がスケジュールされないようになり、利用可能なリソースがあればサービスがタスクをクラスタ上の他のコンテナインスタンスに移動してくれ、インスタンスを削除する前にタスクの移動が成功したことを待機できるようになります。 コンテナインスタンスの状態は、手動でDRAININGに変更することが可能です。しかしこの記事では、これらのプロセスを自動化するためにAutoScalingグループとAWS Lambdaを利用してコンテナ インスタンス ドレイニングを行う方法を説明します。 Amazon ECS オーバービュー Amazon ECSはコンテナ管理サービスです。クラスタやEC2インスタンスの論理グループ上でDockerコンテナの実行、停止、そして管理を容易にしてくれます。ECSを使ってタスクを実行するとき、タスクはクラスタに配置されます。Amazon ECSは指定されたレジストリからコンテナイメージをダウンロードし、そしてそのイメージをクラスタ内のコンテナインスタンス上で実行します。 コンテナ インスタンス ドレイニングの状態を扱う AutoScalingグループはライフサイクルフックをサポートしています。ライフサイクルフックは、インスタンスの起動や削除の前に独自の処理を完了するために呼び出されます。今回の例では、ライフサイクルフックは、2つの処理を実行するLambdaファンクションを呼び出します。 ECSコンテナインスタンスの状態をDRAININGに変更します。 コンテナインスタンス上にタスクが1つも残っていないことを確認します。もしドレイニング中のタスクがまだ存在する場合は、Lambdaファンクションを再度呼び出すためにSNSにメッセージを送信します。 コンテナインスタンス上で実行中のタスクがなくなるか、あるいはライフサイクルフックのハートビートタイムアウト(サンプルのCloudFormationテンプレートではTTL15分に設定)に達するか、どちらかの状態になるまでLambdaによってステップ2が繰り返されます。その後、制御はオートスケーリングのライフサイクルフックに戻され、そのインスタンスは削除されます。このプロセスを次の図に示します。 試してみましょう! この記事で説明した一連のリソースをセットアップするためにCloudFormationテンプレートを使用します。このCloudFormationテンプレートを使用するには、あなたのアカウントのS3バケットにLambdaデプロイメントパッケージをアップロードする必要があります。このテンプレートは次のリソースを作成します。 VPCと関連するネットワーク要素(サブネット、セキュリティグループ、ルートテーブルなど。) ECSクラスタ、ECSサービス、そしてサンプルのECSタスク定義 削除のライフサイクルフックと2つのEC2インスタンスが設定されたAutoScalingグループ Lambdaファンクション SNSトピック Lambdaを実行するために必要なIAMロール CloudFormationスタックを作成し、インスタンスの終了イベントをトリガーすることによってどのようにこのスタックが機能するのか見ていきます。 Amazon EC2のコンソールにおいて、AutoScalingグループを選択し、CloudFormationによって作成されたAutoScalingグループの名前(CloudFormationテンプレートのリソースのセクションから)を選択します。 操作、編集を選択し、インスタンスの希望の数を “1” に減らすようにサービスを更新します。これによって、2つのインスタンスのどちらか一方で終了プロセスが開始されます。 AutoScalingグループのインスタンスタブを選択します。1つのインスタンスのライフサイクルの状態が “Terminating:Wait” という値を示すはずです。 この状態になると、ライフサイクルフックが発火してSNSにメッセージが送信されます。そして、SNSメッセージトリガーに反応してLambdaファンクションが実行されます。 Lambdaファンクションによって、ECSコンテナインスタンスの状態がDRAININGに変更されます。その後、ECSサービススケジューラによってこのインスタンス上のタスクは停止され、利用可能なインスタンス上でタスクが起動されます。 ECSのコンソールに移動すれば、コンテナインスタンスの状態がDRAININGになっていることを確認できます。 タスクが全て完了すると、AutoScalingグループのアクティビティ履歴でEC2インスタンスの削除を確認できます。 どのように動作しているか 少しLambdaファンクションの内部的な動作を見てみましょう。ファンクションはまず最初に、受け取ったイベントのLifecycleTransitionの値が autoscaling:EC2_INSTANCE_TERMINATING にマッチするかをチェックします。 # もし受け取ったイベントがインスタンス終了中ならば・・・ if ‘LifecycleTransition’ […]

Read More

AWS Lambda – 2016 年を振り返って

2016 年は AWS Lambda、Amazon API Gateway、そして、サーバーレスコンピューティングテクノロジーにとって、控えめに言ってもすばらしい年となりました。もしかすると、AWS Lambda および Amazon API Gateway でのサーバーレスコンピューティングについて耳にしたことがない方がいらっしゃるかもしれませんので、これらのすばらしいサービスについてご紹介したいと思います。AWS Lambda を使用すると、サーバーをプロビジョニングまたは管理しなくてもコードを実行できます。このイベント駆動型のサーバーレスコンピューティングサービスにより、開発者は、ほぼすべての種類のアプリケーションまたはバックエンドで機能を簡単にクラウドへ移行できます。Amazon API Gateway は非常にスケーラブルで、信頼性が高く、堅牢な API を大規模にすばやく構築するのに役立ち、作成した API の維持およびモニタリングの機能も提供します。2016 年のサーバーレスの勢いの締めくくりとして、AWS チームは re:Invent でサーバーレスソリューションの構築をさらに簡単にする強力なサービス機能を発表しました。その機能には次のものがあります。 AWS Greengrass: Lambda および AWS IoT を使用して、接続された IoT デバイスのローカルでのコンピューティング、メッセージング、データのキャッシングを実行します。https://aws.amazon.com/blogs/aws/aws-greengrass-ubiquitous-real-world-computing/ Lambda@Edge Preview: グローバル AWS エッジロケーションでコードを実行でき、Amazon CloudFront のリクエストに応じてトリガーされることで、エンドユーザーのネットワークレイテンシーを削減できる Lambda の新しい機能です。https://aws.amazon.com/blogs/aws/coming-soon-lambda-at-the-edge/ AWS Batch Preview: 今後予定されているバッチジョブとしての Lambda 統合を含む AWS コンピューティングサービスにおけるワークロードの計画、スケジューリング、実行のコンピューティング用バッチです。https://aws.amazon.com/blogs/aws/aws-batch-run-batch-computing-jobs-on-aws/ AWS X-Ray: マイクロサービスアーキテクチャを使用してビルドされたもの、Java、Node.js、.NET で記述されたもの、EC2、ECS、AWS […]

Read More

AWS LambdaのC#サポートの発表

本日、AWS Lambdaのサポート言語としてC#を発表しました。新しいオープンソースの.NET Core 1.0ランタイムを使用すると、さまざまな一般的な.NETツールからC#コードをAWS Lambdaに簡単に公開できます。 .NET開発者は、C#言語と使い慣れた.NETツールを使用して、Lambda関数とサーバーレス アプリケーションを作成できます。 Visual Studio、Yeoman、およびdotnet CLIにおけるツール サポートによって、C#で記述された個々のLambda関数またはサーバーレスアプリケーション全体をLambdaおよび Amazon API Gatewayに簡単に展開できます。 LambdaはAWSサーバーレスプラットフォームの中核です。もともと2015年に発売されたLambdaでは、インフラストラクチャやスケーリングを心配することなく、Node.js、Python、およびJavaコードをAWSに展開することができます。これにより、開発者はアプリケーションのビジネスロジックに集中でき、インフラストラクチャの維持と拡張に時間を費やす必要がありません。今日まで、.NET開発者はこのモデルを利用することができませんでした。サポートされている言語のリストにC#を追加し、サーバーレスアプリケーションを作成すためにLambdaとAPIゲートウェイを利用する新しいカテゴリの開発者ができたことを嬉しく思っています。   C#でのLambda 単純なC#ラムダ関数を見てください。 既にNode.js、Python、JavaでLambdaを使っていたなら、これはよく分かるはずです: using System; using System.IO; using System.Text; using Amazon.Lambda.Core; using Amazon.Lambda.DynamoDBEvents; using Amazon.Lambda.Serialization.Json; namespace DynamoDBStreams { public class DdbSample { private static readonly JsonSerializer _jsonSerializer = new JsonSerializer(); [LambdaSerializer(typeof(JsonSerializer))] public void ProcessDynamoEvent(DynamoDBEvent dynamoEvent) { Console.WriteLine($”Beginning to process {dynamoEvent.Records.Count} […]

Read More

Lambda@Edge – プレビュー

ちょうど先週、私が Hacker News上で書いたコメントがきっかけでAWSのお客様から興味深いメールを頂きました。 彼はS3上でホストしているシングルページのアプリケーションを動作させていて(こちらについてはAmazon S3で静的なWebサイトの運用が可能に をご覧下さい。)、Amazon CloudFrontを経由して少ないレイテンシーで提供していると教えてくれました。そのページは、AWS Elastic Beanstalk上でホストしているAPIを使って、それぞれのユーザー向けにカスタマイズして表示するいくつかの動的な要素を含みます。 彼が説明してくれた彼の課題はこちらです。 適切に検索エンジンのインデックスを取得するために、またFacebookやTwitterないで正しく表示するためのコンテンツのプレビューをするためには、それぞれのページが事前に表示されたバージョンを提供する必要があります。こちらを実現するには、一般ユーザーがヒットするたびに、私たちのサイトはノーマルのフロントエンドをCloudFrontから提供する必要があります。しかし、もしユーザーエージェントがGoogle / Facebook / Twitter等にマッチする場合は、その代りに私たちは事前に表示されたバージョンへリダイレクトさせる必要があります。 私たちはこのユースケースについてよく分かっており、興味深いソリューションを準備中であることを彼に秘密を漏らすことなく伝えました。他のお客様もまた、エッジにおいてクイックな判定によりカスタマイズしたいと伝えてくれてました。 お客様に近いロケーションでHTTPリクエストを”賢く”処理しなければならないユースケースがあることがわかりました。これらには、HTTPヘッダの検査および変更、アクセスコントロール(特定のcookieを必要とする)、デバイス検出、A/Bテスト、クローラーまたはbotsのための処理または特別な対応、レガシーシステムに適応させるためにユーザーフレンドリーなURLを書き換えるユースケースを含みます。多くのこれらのユースケースは、シンプルなパターンマッチングやルールによって表現可能なユースケースよりも多くの処理や判定を必要とします。 Lambda@Edge これらのユースケースのサポートを提供するために、私はLambda@Edgeのプレビューをラウンチしています。この新しいLambdaベースの処理モデルにより、ますます増加するAWSエッジロケーションのネットワーク内で動作するJavaScriptコードを書くことが出来ます。 CloudFrontのディストリビューションを通して流れるリクエストやレスポンスを処理する軽量なロジックを書くことができます。4つの異なるイベントに対するレスポンスの中でコードを実行できます。 Viewer リクエスト – あなたのコードは、コンテンツがキャッシュされるか否かに関わらず、あらゆるリクエストにおいて動作します。こちらがシンプルなヘッダ処理用のコードです。 exports.viewer_request_handler = function(event, context) { var headers = event.Records[0].cf.request.headers; for (var header in headers) { headers[“X-“.concat(header)] = headers[header]; } context.succeed(event.Records[0].cf.request); } Origin リクエスト – リクエストされたコンテンツがエッジでキャッシュされていない時に、Originに転送される前にコードを実行します。ヘッダを追加したり、既存のヘッダを編集したり、URLを編集したりすることが可能です。 Viewer レスポンス – キャッシュされているか否かに関わらず、すべてのレスポンスにおいてコードを実行します。Viewerに戻す必要のないヘッダをクリーンアップするためにこちらを利用できます。 Origin レスポンス – […]

Read More

AWS Lambda の新機能 – 環境変数とサーバーレスアプリケーションモデル (SAM)

とサーバーレスアプリケーション開発をめぐる興奮のとりこになっています。過去 1〜2 年間に週刊 AWS で、多くのサーバーレスの成功事例、ツール、オープンソースプロジェクトを紹介しました。今回は Lambda に追加された重要な機能として、環境変数と新しいサーバーレスアプリケーションモデルについて説明します。 環境変数 開発者なら、だれでも複数の環境で利用できるコードを構築したいと思います。コードを簡単に再利用するには、実行時に設定値を受け入れられるように構築する必要があります。設定値とは、コードの環境をカスタマイズするためのテーブル名、デバイス名、ファイルパスなどです。たとえば、多くのプロジェクトは開発環境、テスト環境、本稼働環境ごとに設定が異なります。Lambda 関数に環境変数を指定できるようになりました。これでコードを変更または再デプロイすることなく設定の変更が可能になり、これまで以上にサーバーレスアプリケーション開発が効率化されます。各環境変数はキーと値のペアです。キーと値は で暗号化され、必要に応じて復号されます。関数あたりの環境変数の数には制限がありませんが、合計サイズは 4 KB を超えることができません。 Lambda 関数を新規作成する場合は、同時に環境変数も設定します。最新バージョンの関数の値は変更できますが、以前のバージョンの値は変更できません。次の例では、シンプルな Python 関数を作成して、いくつかの環境変数を設定し、その環境変数をコードから参照しています (このために os ライブラリをインポートする必要がありました)。 Lambda に用意されているデフォルトのサービスキーを使えば、この機能を使用しても料金はかかりません (独自のキーを使用する場合は、リクエストあたりの KMS の通常料金が適用されます)。この新しい機能の詳細とさまざまな活用方法については、 で「サーバーレスアプリケーションを簡素化する Lambda 環境変数」を参照してください。 AWS サーバーレスアプリケーションモデル サーバーレスアプリケーションを構築するために、Lambda 関数、 リソース、 テーブルを併用する場合があります。新しい AWS サーバーレスアプリケーションモデル (AWS SAM) を使うと、これらのすべてのコンポーネントを、 でネイティブにサポートされている簡略化された構文で記述できます。この構文を使用するには、CloudFormation テンプレートに次のような Transform セクション (CloudFormation の新しい要素) が含まれている必要があります。 AWSTemplateFormatVersion: ‘2010-09-09’ Transform: AWS::Serverless-2016-10-31 テンプレートの他のセクションでは、Lambda 関数、API Gateway のエンドポイントとリソース、DynamoDB […]

Read More

サーバーレス Chatbot コンテストに入賞した皆様、おめでとうございます!

私は 8 月に AWS サーバーレス Chatbot コンテストについて発表し、皆様に および を使用して Slack 用の Chatbot を構築していただきますようお願いしました。 先週、仲間の審査員である Tim Wagner (AWS Lambda のジェネラルマネージャー) および Cecilia Deng (Tim のチームのソフトウェア開発エンジニア) と一緒にビデオを見て、62 点の応募作品をすべて評価しました。私たちは応募作品の機能や多様性、そして作品の実行中の動作を示す魅力的なビデオの作成に対する応募者の努力に感心しました。長時間にわたって審査した結果、合計 9 点の入賞作品を選定しました。8 点は個人、チーム、小規模組織の作品で、1 点は大企業の作品です。難しい話は抜きにして、さっそく始めましょう。 個人、チーム、小規模組織 サーバーレス Slackbot ヒーロー賞の入賞作品は以下のとおりです。各入賞作品には、 のチケット 1 枚、ホテルの宿泊割引、公表、サーバーレスコンピューティング基調講演中の宣伝、クールな賞品、および 100 USD の AWS クレジットが贈られます。これらの多くのボットのコードは、GitHub で確認することができます。入賞作品をアルファベット順に示します。 AWS Network Helper – “このプロジェクトの目標は、サーバーレスアーキテクチャで実行する AWS ネットワークトラブルシューティングスクリプトを提供し、チャットボットとして Slack 経由で相互作用させることです。” GitHub repo。 B0pb0t […]

Read More

AWS Lambda と Amazon API Gateway で Express アプリケーションを実行

Express は Node.js のウェブフレームワークです。これを使用すると、「サーバーレス」ウェブサイトやウェブアプリケーション、API を簡単にデプロイできます。サーバーレス環境では、大方またはすべてのバックエンドロジックがステートレスのオンデマンドで実行します (詳細情報については Mike Roberts によるブログ「Serverless Architectures」をご覧ください)。今月初旬に公開したブログ (「API Gateway の更新 – API 開発を簡素化する新機能」) で紹介した新しい 機能と を併せて使用した場合、既存の Express アプリケーションをサーバーレスで実行することができます。API Gateway を使用すると API を中心に開発者のエコシステム構築を可能にする使用量プランなど追加機能を利用したり、キャッシュにより応答性と費用対効果に優れたアプリケーション構築を行うこともできます。 AWS は aws-serverless-express パッケージを提供することで Express アプリケーションから や への移行をお手伝いしています。このパッケージには実例が含まれています、ぜひご活用ください。 Express コードとアプリケーションを と に移行する場合に利用できる 2 つのリソースをご紹介します。 「Running Express Apps in AWS Lambda」ではアプリケーションをデプロイする場合の Claudia.js と aws-serverless-express モジュールの使い方が説明されています。既存の TCP リスナーを削除し、Lambda プロキシラッパーを作成してからデプロイするだけです。 AWS ブログ「サーバーレス: Express […]

Read More

サーバーレスでChatbot コンテスト開催

AWS Serverless Chatbot コンテストの審査員にならないかとのオファーが来たので、喜んで引き受けることにしました。 Chatbot の構築 AWS Lambda と Amazon API Gateway を使用して Slack 用の chatbot を構築してください。他の API (Slack Events API が便利) や追加サービス (AWS その他)、その他のデータソースも使用することができます。コンテストの参加作品はクリエイティブかつオリジナルであり、Stack ユーザーに本当の価値を提供できるものでなければなりません。AWS Free Tier は Lambda、API Gateway、そしてその他の AWS サービスへのアクセスを無料でご提供します。AWS の新規および既存のユーザーは Lambda リクエスト 100 万件、そして 400,000 GB/秒のコンピューティング時間を無料で利用することができます。AWS の新しいユーザーはサインアップしてから 12 か月間、API Gateway への API コールを毎月 100 万件ご利用いただけます。 コンテスト参加作品 Chatbot が完成したら、パッケージやマーケティングにも力を注ぐことをおすすめします。参加作品の一環として次のアイテムを提供することも忘れないでください。 Chatbot を実際に使用した様子を示すビデオ資料 参加作品の機能やユニークな点に関する概要 […]

Read More