概要
実務でプライベートAPIを作成したので、忘れないように、構築する手順をメモとして書いていきます。
かなり雑に書いているので見にくいです。ごめんなさい
イメージとしては、以下のような感じです。
以下のサイトから画像は頂きました。
手順
Lambda関数を作成し、API Gatewayと接続
・Lambdaを開き、関数を作成する。
↓
・API Gatewayを開き、「APIを作成」をクリックする。
↓
・「REST API プライベート」の「構築」をクリックする。
↓
・「新しいAPI」を選択し、API名に任意の名前を入力、「APIエンドポイントタイプ」が「プライベート」となっていることを確認し、「APIを作成」をクリックする。
↓
・APIが作成されたら、サイドバーから「リソース」を選択し、「メソッドを作成」をクリックする。
↓
・メソッドタイプを「GET」とし、統合タイプに「Lambda関数」を選択し、Lambda関数のリージョンは「ap-northeast-1」を選択し、右側のメソッドには、先ほど作成した関数を選択し、「メソッドの作成」をクリックする。
↓
・メソッドが作成されたら、APIとLambda関数が接続されたかを確認するため、「テスト」から「テストの実行」をクリックする。
VPCエンドポイント作成
・「VPCエンドポイント」を開き、「エンドポイントの作成」をクリックする。
↓
・名前に任意の名前を入力し、サービスカテゴリは「AWSのサービス」を選択する。
↓
・サービスで「execute-api」を選択。これを選択しないとAPIを実行できない。VPCは実行したいec2が属するVPCを選択する。
↓
・サブネットもec2が所属するものを選択する。セキュリティグループはHTTPSがインバウンドで許可されていればなんでもOK。
↓
・ポリシーで「フルアクセス」を選択し、「エンドポイントの作成」をクリックする。
↓
・エンドポイントが作成される。エンドポイントIDをコピーしておく。
API Gatewayの追加設定
・API Gatewayで、先ほど作成したAPIを開き、サイドバーから「APIの設定」を選択し、「APIの詳細」の「編集」をクリックする。
↓
・「VPCエンドポイントID」に、先ほどコピーしたVPCエンドポイントIDを追加して、「変更を保存」をクリックする。
↓
・「VPC endpoint IDs」に、追加したVPCエンドポイントが表示される。
↓
・続いて、サイドバーから「リソースポリシー」を選択し、「ポリシーを作成」をクリックする。
↓
・以下のコードをポリシーの詳細に記入し、「変更を保存」をクリックする。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": [
"execute-api:/*"
],
"Condition": {
"StringEquals": {
"aws:sourceVpce": "VPCエンドポイントID"
}
}
}
]
}
↓
・続いて、サイドバーの「リソース」を選択し、「APIをデプロイ」をクリックする。
↓
・「ステージ」で「新しいステージ」を選択する。
↓
・「ステージ名」で任意のステージ名を入力し、「デプロイ」をクリックする。
↓
・APIがデプロイされたら、URLをコピーしておく。
APIを実行
・コマンドプロンプトを起動し、ssh接続をして、以下のコマンドを入力して、EC2からAPIを呼び出せるかを確認する。
curl 先ほどコピーしたURL
↓
・EC2にログインしないで、先ほどと同じコマンドを入力して、以下のメッセージが表示されるかを確認する。
curl: (6) Could not resolve host: コピーしたURL
↓
以上の手順が問題なくいけば、成功している。
参考サイト