aws cli で Lambda を使う

次の記事を参考にしました。
[AWS-CLIで試すLambdaでのHelloWorld!](https://qiita.com/toshihirock/items/8d06a524df79e7bb675c)

この記事との違いは、リージョンを、アジアパシフィック（東京）にしたことと、aws cli を、Arch Linux で使ったことです。

実行結果
Lambda で、Hello World を、CloudWatchLogsに出力します。
CloudWatch -> ログ

![cloudwatch_oct1501.png](https://qiita-image-store.s3.amazonaws.com/0/179446/a32ccccc-377c-8d86-6e05-8833958dbd10.png)

手順

１）S3バケットの作成

```bash:s3_create.sh
aws s3 mb s3://ekzemplaro-lambda-test --region ap-northeast-1
```

実行結果
S3

![s3_oct1501.png](https://qiita-image-store.s3.amazonaws.com/0/179446/18dd10e3-98d7-b01e-22e5-bcdb97ea2e26.png)

２）Lambda Exec Roleの作成

```json:role-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
     {
       "Action": "sts:AssumeRole",
       "Principal": {
         "Service": "lambda.amazonaws.com"
        },
        "Effect": "Allow",
        "Sid": ""
     }
  ]
}
```

```bash:role_create.sh
aws iam create-role --role-name hello_exec_role \
        --assume-role-policy-document file://role-policy.json
```

hello_exec_role が作成されたことを確認
IAM -> ロール

![role_oct1501.png](https://qiita-image-store.s3.amazonaws.com/0/179446/875c8922-2866-255d-fa9f-2027ac4db4f1.png)

４）ロールにCloudWatchLogsへの書き込みを行う権限を付与

```bash:attach-policy.sh
aws iam attach-role-policy --role-name hello_exec_role \
	--policy-arn "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess"
```

確認

```bash
aws iam list-attached-role-policies --role-name hello_exec_role
```

5) Lambda function の作成

```js:index.js
console.log('Loading function')

exports.handler = function(event, context) {
    console.log('value1 =', event.key1)
    console.log('value2 =', event.key2)
    console.log('value3 =', event.key3)
    console.log('hello world!')
    console.log('おはようございます。')
    context.succeed(event.key1);  // Echo back the first key value
    // context.fail('Something went wrong');
}
```

zip 圧縮します。

```bash
zip -r HelloWorld.zip index.js
```

作成

```bash:function_create.sh
aws lambda create-function \
--function-name hello_function \
--runtime nodejs14.x \
--role arn:aws:iam::123456789012:role/hello_exec_role \
--handler index.handler \
--zip-file fileb://HelloWorld.zip \
--region ap-northeast-1
```

作成されたことを確認
Lambda -> 関数

![function_oct1501.png](https://qiita-image-store.s3.amazonaws.com/0/179446/f3fa96c0-48fb-b43a-b473-0a7d5077664d.png)


6) CLIからイベントを発火

```bash:cli_exec.sh
aws lambda invoke --invocation-type Event \
	--function-name hello_function --region ap-northeast-1 \
	--payload '{"key1":" こんにちは", "key2":"今晩は", "key3":"さようなら"}' \
 outputfile.txt
```

実行結果

```text
$ ./cli_exec.sh 
{
    "StatusCode": 202
}
```


7) CloudWatchLogsにログが出力されているか確認

CloudWatch -> ログ -> ロググループ

画像は、冒頭

８）手順の再確認の為に作成したものを削除

```bash:delete.sh
# delete lambda function
aws lambda delete-function --function-name hello_function \
	--region ap-northeast-1

#detach policy
aws iam detach-role-policy --role-name hello_exec_role \
	--policy-arn "arn:aws:iam::aws:policy/CloudWatchLogsFullAccess"

#delete role
aws iam delete-role --role-name hello_exec_role

#delete S3 bucket
aws s3 rm s3://ekzemplaro-lambda-test --recursive --region ap-northeast-1
aws s3 rb s3://ekzemplaro-lambda-test --region ap-northeast-1
```

Python3 のサンプルはこちら
[python の関数を AWS Lambda で使用する](https://qiita.com/ekzemplaro/items/d9efb2014ea132081fc0)