AWS Lambdaを利用したアプリケーション開発　〜利用前の権限設定〜

# 概要
AWS LambdaでWebアプリケーションを開発したいと考えている。
そのために、まずは Lambda を利用するためのユーザーを作成し権限を付与する。

Lambda 関数を作成・実行などの操作をするためのユーザーと
Lambda 関数に、実行時のログをCloudWatchに格納するためのロールを作成する

# 目次
1. [IAM ユーザー作成](#iamユーザー作成)
1. [IAM ロール作成](#iamロール作成)
1. [Lambda関数の作成](#lambda関数の作成)
1. [テスト実行](#テスト実行)

# IAMユーザー作成
#### 1. IAM を開く
IAMの操作権限を所持しているユーザーで、コンソールからIAM画面に移動する
<img width="70%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/ce4ffdb7-bbb0-9e3c-a64a-1bdb024215bf.png">

#### 2. ユーザー作成画面へ遷移
サイドバーから「ユーザー」を選択し、「ユーザーの作成」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/217745d5-45ee-05cb-fa0f-bcbbf7bddcf7.png)

#### 3.　ユーザー名の入力
任意のユーザー名を入力し(ここでのユーザー名は「lambda-user」)
オプションの「AWS マネジメントコンソールへのユーザーアクセスを提供する」をチェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/4f987cfb-508b-1e8b-353c-59c1bc957518.png)


#### 4. 許可の設定
ここでは、「ポリシーを直接アタッチする」を選択し、
「AWSLambda_FullAccess」を選択し次へ
既に設定が用意されている場合は他のオプションを選択しても構いません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/526180e8-0b2e-a9ea-491f-05d84087758d.png)

AWSLambda_FullAccess・・・ Lambda に関するすべての操作の許可と、関連で使用されることが多いサービスの許可が含まれたポリシー

#### 5. 内容確認
内容を確認し、問題がなければ「ユーザーの作成」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/655bf341-5afb-acce-0ac7-5ff33c1a0088.png)

#### 6. ログイン情報の取得
ユーザーが作成されると、コンソールにサインインするための「URL、ユーザー名、パスワード」が発行される
パスワード情報はこの画面でしか確認することができないため、必ず確認
必要に応じて、サインイン情報が記載されたcsvファイルをダウンロードしておくこと![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/782b3e5d-d43f-5029-3e3d-2a3d9b2c9775.png)

# IAMロール作成
#### 1. IAM ロール作成画面へ遷移
IAMページのサイドバーから「ロール」を選択し、「ロールの作成」を選択し
ユースケースに「Lambda」を選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/934a475d-4ed1-3059-b22f-e4ca9c3d2e4e.png)

#### 2. 信頼されたエンティティ取得
信頼されたエンティティタイプで、「AWSのサービス」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/814939b1-c297-0f36-3e89-266b766f7430.png)

#### 3. 許可の追加
「AWSLmbdaBasicExecutionRole」にチェックを入れて次へを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/6bc264b8-ed00-6987-372f-4fef01d720d5.png)

AWSLmbdaBasicExecutionRole・・・ Lambda 実行時 CloudWatch にログを書き込むためのポリシー

#### 4. ロール基本情報の設定
ロール名（任意の名前）と説明を入力して、「ロールを作成」を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/24dd97e9-a0d5-27a6-bab3-09f8e8dc5507.png)

# Lambda関数の作成
#### 1. サインイン
サインイン情報をもとに「lambda-user」でコンソールにサインインしパスワードを変更する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/28dca6bc-2edf-a3df-7811-d8807492433b.png)

#### 2. サインイン後 Lambda を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/628e4cd0-80fc-9d01-35f9-f25c29232ee4.png)

#### 3. 関数を作成
関数の作成を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/98604232-02d2-8c07-92b8-62323373a9c0.png)

#### 4. 関数の基本情報設定1
関数名（任意の名前）を入力しランタイムを選択
ここでは、「Python3.12」を選択
アーキテクチャは「x86_64」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/5a820c12-2d1e-d46c-66c1-7eb4bdfb89dd.png)

#### 関数の基本情報設定2
アクセス権限の実行ロールを「既存のロールを使用する」を選択し
作成した「lambda-excec」を選択し「関数の作成」を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/3a623805-a7ce-9f17-4a59-63aa313d946f.png)

関数が作成されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/ec445836-eb30-df90-206f-cdffb1cca491.png)

# テスト実行
#### 1. テストコードの作成
コードを下記のように書き換えます
```py:lambda_function.py
import json

def lambda_handler(event, context):
    name = str(event['name'])
    age = int(event['age'])
    
    print("name:", name)
    print("age:", age)
    
    prof_message = f'{name}さんの年齢は{age}歳です'
    prof = {'prof': prof_message}
    
    print("prof:", prof_message)
    
    return {
        'statusCode': 200,
        'body': json.dumps(prof)
    }
```

#### 2. テストコード作成
テストタブから、「新しいイベントを作成」を選択し、イベント名(任意の名前)を入力し下にスクロール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/3c497bc1-1802-5144-c38f-7011e6b56f07.png)

#### 3. イベントJSON作成
以下の記載し、テストを選択
```json
{
  "name": "user1",
  "age": "30"
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/3d956a3d-34eb-1e6d-3740-9413975bb9f1.png)

#### 4. 実行確認
実行に成功すると、実行ログが表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/39d75f39-cc4f-1081-24fe-99eccba4bc75.png)


#### 5. CloudWatchからログの確認
CloudWatchを開き、ロググループを開くと、作成した関数のログ格納されたグループが作成されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/2cf77d37-ab5c-209d-e9c8-d2c1faa69589.png)

ログストリームから実行時刻付近のログを開くと、ログを確認できる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3459413/231be274-9dfd-ac26-85d6-5dd369d005c5.png)

# 参考資料
[AWS Lambda実践ガイド](https://www.amazon.co.jp/AWS-Lambda%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-impress-top-gear/dp/4295002526)