AWS API Gatewayチュートリアルの手順1
手順 1 - Amazon API Gatewayのセットアップ
この手順を終えると、以下が完了した状態となります。
Amazon DynamoDBテーブルからペットを取得して保管しているサービスロジックを実行するために、AWS Lambda関数を使用してAmazon API Gatewayがセットアップされる。
ペットのリストの取得および更新のための認証されていない2つのRESTサービスメソッドが作成されている。
始める前に、 Node.jsをインストールしておいてください。
1.Amazon DynamoDBテーブルを作成する
Amazon DynamoDBコンソールで、[Create Table(テーブルの作成)]をクリックします。

テーブルに関連する変数を構成します。
[Table name(テーブル名)]:Pets
[Primary key(プライマリキー)]:ユーザー名
[Primary key type(プライマリキーの種類)]:String(文字列)
[Use default settings(デフォルト設定を使用)]:チェックなし
Read capacity units(読み込みキャパシティユニット)]:3
Write capacity units(書き込みキャパシティユニット)]:3

[Create(作成)]をクリックして、指定した設定でテーブルを作成します。
テーブルが作成されている間、[Table details(テーブル詳細)]セクションにあるAmazon Resource Name (ARN)をメモしておきます。次の手順で、このテーブルのARNが必要になります。

2.DynamoDB PetsテーブルへのアクセスをAWS Lambda関数に付与するポリシーを作成する
AWS IAMコンソールに移動します。
左側のメニューの [Roles(ロール)]をクリックし、[Create New Role(新しいロールを作成)]ボタンをクリックします。

ロールにAPIGatewayLambdaExecRole
という名前を付け、[Next Step(次の手順)]をクリックします。
[Role(ロール]タイプを選択します。[AWS Service Roles]の下の[AWS Lambda]を選択します。

[Attach Policy(ポリシーのアタッチ)]の画面で、[Next Step(次の手順)]をクリックしてこの手順をスキップします。この時点で、ご自身が提供した情報を確認します。すべて正しい場合は、[Create Role(ロールの作成)]をクリックします。終了したら、IAMホームページにロールが記載されていることが確認できます。
作成したロール「APIGatewayLambdaExecRole」を選択します。[Inline Policies(インラインポリシー)]の下矢印をクリックして、 [Click Here(ここをクリック)]リンクをクリックします。
[Custom Policy(カスタムポリシー)]を選択し、[Select(選択)]をクリックします。ポリシーに「LogAndDynamoDBAccess
」という名前を付け、ポリシードキュメントとして以下のコードを追加します(必ずDynamoDBテーブルのAmazon Resource Name (ARN)を最初に更新してください)。[Apply policy(ポリシーを適用)]をクリックします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AccessCloudwatchLogs",
"Action": ["logs:*"],
"Effect": "Allow",
"Resource": "arn:aws:logs:*:*:*"
},
{
"Sid": "PetsDynamoDBReadWrite",
"Effect": "Allow",
"Action": [
"dynamodb:DeleteItem",
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem"
],
"Resource": ["DYNAMODB_TABLE_ARN_VALUE_FROM_PREVIOUS_STEP"]
}
]
}
Was this helpful?
2.AWS Lambda関数を作成する
次の3つの手順で、DynamoDBテーブルのペット情報を取得および更新するためのAWS Lambda関数を作成します。
GetPetInfoのLambda関数を作成する
AWS Lambdaコンソールで、[Create a Lambda Function(Lambda関数の作成)]を選択します(今までAWS Lambda関数を作成したことがない場合は、[Get Started Now(今すぐ始める)]をクリックします)。
[Select blueprint(ブループリントの選択)]画面で、 [Blank Function(ブランク関数)]を選択します。
その後、[Configure triggers(トリガーの構成)]画面が表示されます。[Next(次へ)]をクリックして続行します。この時点ではこれを行う必要はありません。
最後に、[Configure function(関数の構成)]を尋ねられます。
以下の情報を使用して、該当するフィールドに入力します。
[Name(名前)]:
GetPetInfo
[Runtime(ランタイム)]:Node.js 6.10
DynamoDBテーブルからペット情報を読み込むために[Lambda function code(Lambda関数コード)]エリアに貼り付けます。
var AWS = require('aws-sdk');
var DOC = require('dynamodb-doc');
var dynamo = new DOC.DynamoDB();
exports.handler = function(event, context) {
var cb = function(err, data) {
if(err) {
console.log('error on GetPetsInfo: ',err);
context.done('Unable to retrieve pet information', null);
} else {
if(data.Item && data.Item.pets) {
context.done(null, data.Item.pets);
} else {
context.done(null, {});
}
}
};
dynamo.getItem({TableName:"Pets", Key:{username:"default"}}, cb);
};
Was this helpful?
ロールについては、[Choose an existing role(既存のロールを選択)]を選びます。次に、既存のロールとしてAPIGatewayLambdaExecRoleを選択します。その他の設定はすべてデフォルト値のままにします。
[Next(次へ)]をクリックして、ご自身が提供した情報を確認します。すべて正しい場合は、[Create function(関数の作成)]をクリックします。
[Test(テスト)]をクリックし、インプットテストイベントを(Hello Worldテンプレートを使用する)デフォルトのままにします。テストが完了したら、[Execution Result(実行結果)]セクションに空のアウトプット({}
)が表示されます。テーブルは空です。
UpdatePetInfoのLambda関数を作成する
GetPetInfo
関数を作成するときに使用する手順方法を繰り返しますが、関数コードとして代わりに以下を使用します。
var AWS = require('aws-sdk');
var DOC = require('dynamodb-doc');
var dynamo = new DOC.DynamoDB();
exports.handler = function(event, context) {
var item = { username:"default",
pets: event.pets || {}
};
var cb = function(err, data) {
if(err) {
console.log(err);
context.fail('unable to update pets at this time');
} else {
console.log(data);
context.done(null, data);
}
};
dynamo.putItem({TableName:"Pets", Item:item}, cb);
};
Was this helpful?
関数をテストするために、[Actions(アクション)]ドロップダウンをクリックし、[Configure sample event(サンプルイベントの構成)]を選択します。サンプルデータとして以下を入力し、[Submit(送信)]をクリックします。
{
"pets": [{
"id": 1,
"type": "dog",
"price": 249.99
}]
}
Was this helpful?
空の結果({}
)が返されます。
GetPetInfo
Lambda関数に戻り、[Test(テスト)]を再びクリックします。ペットが1つ表示されます。
3つめのLambda関数を作成する
もう一つLambda関数を作成します。この関数は何もしませんが、後のセクションで説明するように、CORSのOPTIONSメソッドで必要です。
上述の手順を使用して、NoOp
という名前のLambda関数を作成します。この関数コードは以下の通りです。
exports.handler = function(event, context) {
context.succeed('');
}
Was this helpful?
この3つ目のLambda関数を作成する代わりに、 API GatewayでOPTIONSメソッドの作成を選択することもできます。
3.Amazon API Gateway APIを作成する
2つのメソッドでAPIを作成します。1つはペット情報をGET
、もう1つはペット情報をPOST
します。
方式:ペット情報をGET
Amazon API Gatewayコンソールに移動して[Create API(APIの作成)]をクリックします。APIを作成するのが初めての場合は、[Get Started(開始)]画面が表示されます。
APIを作成するのが初めての場合は、[Example API(サンプルAPI)]を作成するよう求められます。[OK]をクリックしてポップアップ通知を閉じ、[Example API(サンプルAPI)]ボタンの代わりに、[New API(新規API)]ラジオボタンを選択します。
APIを「SecurePets
」と名づけ、[Create API(APIの作成)]をクリックします。
SecurePets
APIの[Resource(リソース)]タブに移動し、[Create Resource(リソースの作成)]アクションをクリックします。
リソースに「Pets
」の名前を付け、 [Create Resource(リソースの作成)]を再びクリックします。
左ペインで/pets
を選択し、 [CreateMethod(メソッドの作成]ボタンをクリックします。
ドロップダウンで、[GET]を選択し、チェックマークボタンをクリックします。GET
メソッドのために、以下の構成値を提供します。
[Integration type(統合タイプ)]:Lambda関数
Lambda Region(lambdaリージョン):あなたがいる地域
[Lambda Function(Lambda関数)]:GetPetInfo
[Save(保存)]をクリックし、Lambda関数に権限を付与することをポップアップで求められたら[OK] をクリックします。
次に表示される[Method Execution(メソッドの実行)]ウィンドウで[Test(テスト)]をクリックします。
応答本文で1つペットが返されたことを確認できます。
方式:ペット情報をPOST
ペット情報をPOST
に使用するAPIの作成は、ペット情報をGET
に使用したAPIの作成方法と似ています。
左ペインで/pets
を選択し、 [CreateMethod(メソッドの作成]をクリックします。
ドロップダウンで、[POST]を選択し、チェックマークボタンをクリックします。
[Integration type(統合タイプ)]にLambda関数を選択し、あなたがいる地域を選択し、[Lambda Function(Lambda関数)]に「UpdatePetInfo」を選択します。
[Save(保存)]をクリックし、Lambda関数に権限を付与することをポップアップで求められたら[OK] をクリックします。
[Test(テスト)]をクリックし、以下を要求本文に貼り付けます。
{"pets": [
{"id": 1, "type": "dog", "price": 249.99},
{"id": 2, "type": "cat", "price": 124.99}
]
}
Was this helpful?
空の結果({}
)が返されます。
GETメソッドに戻り、[Test(テスト)]を再びクリックし、テーブルにペットが2つ記載されていることを要求本文が示していることを確認します。
[
{
"id": 1,
"price": 249.99,
"type": "dog"
},
{
"id": 2,
"price": 124.99,
"type": "cat"
}
]
Was this helpful?
方式:OPTIONS
アクションを起こさないlambda関数を作成する代わりに、API GatewayでOPTIONS
メソッドを作成することができます。
左ペインで/pets
を選択し、 [CreateMethod(メソッドの作成]をクリックします。ドロップダウンで、[OPTIONS]を選択し、チェックマークボタンをクリックします。[Integration type(統合タイプ)]に[Mock]を選択します。[Save(保存)]をクリックします。
応答本文は空欄のまま、[Test(テスト)]をクリックします。no data
と示す応答本文を受け取るはずです。
この時点で、AWS Lambda関数とAmazon API Gatewayメソッドは、セキュリティなしで定義されています。