AWS lambda でgoogle spread sheetを操作したくなったのでやってみた [その1]

## 概要

表題そのままなのですが、google spread sheet って、なんかGAS(Google Apps Script)で操作する。
そんな固定観念があったんですが、今回はAWS lambda (Python)で操作したくなったのでやってみました。

別にGCPだけでも完結しますが、、、`AWS慣れているので使いたかった。それだけです（笑）`


## 構成

構成はシンプルです。

![Untitled (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/ab4a725f-616c-31c6-c3ea-62d904963c6b.png)

GCP側で作成した認証情報は、暗号化してAWS Secrets Managerに保持します。
lambdaのコードに認証key直書きとかはやめたほうが吉...


## 準備

### GCP側の認証を作成する
AWSでいうところのIAMのkeyを作成する感じです。

まずは[GCPのコンソール](https://console.cloud.google.com/?hl=ja)に入って適当なプロジェクトを作成し

 - APIとサービス-> ライブラリ よりAPIの有効
 - APIとサービス-> 認証情報-> サービスアカウントの作成

を行います。

---
APIとサービス-> ライブラリ よりAPIの有効にする

![スクリーンショット 2020-10-26 16-27-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/e7560e3d-f176-d160-5c68-6561c8bbcb24.png)

---
APIとサービス-> 認証情報-> サービスアカウントを作成
![gcp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/71aee21e-b3b3-d72c-41db-c833f77afc58.png)

サービスアカウント名をきかれます。
大事なのはサービスアカウントIDです。
他人がみてわかりやすい名前にしましょうw

![gcp2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/edd4089f-2b3e-3247-c6ce-de77ccad776e.png)

2.3 は省略可能なので省略。
※細かいアクセス制限とかしたい方は設定してください。

![スクリーンショット 2020-10-26 14-11-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/fb1adcfc-90c4-d910-4562-c1989ed0e317.png)


これが完了すると、サービスアカウントの箇所にメールアドレスみたいのができるので編集をおします。

![gcp3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/24f5e60e-a6c9-af2b-949e-bc234439c571.png)


編集の中から鍵を追加とあるので押すとjsonかP12かと選択がでてくるので、みんな大好きjsonを選択すると
ローカルにjsonがダウンロードされます。　これで認証keyの作成完了です。
(これがAWSいうcredential.jsonですね)

[注意！！]これが漏れると外部からアクセスされる可能性があるのでgithubとかに置くのはやめましょうね！

![スクリーンショット 2020-10-26 14-23-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/a356a447-1201-63b0-1dbb-1a207499b7ec.png)

---

### 更新するスプレットシートの準備

先程のサービスアカウントID(メアドっぽくなっているやつ)を共有するユーザとして設定します。

![スクリーンショット 2020-10-26 15-56-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/1c2a6c52-f5fd-dd9d-ceaa-79453d22feec.png)

---

## AWS 側の準備

### AWS Secrets Manager

keyを保管する場所を作成しましょう。　
cloudformationで自動で作成することもできますが、ここでは手で作成しています。

![スクリーンショット 2020-10-26 14-34-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/21fad7c7-18a0-78ec-4961-97df299ef67f.png)

※ちなみに`system manager` のキーストアでも同じようなkeyの保管ができますが、
　今回は`AWS Secrets Manager`です。

まずは枠だけ作るの シークレットの種類を選択 は`その他のシークレット`を選びましょう。
値は適当に入れておいてください(ここではsampla: test)と入れています。


![スクリーンショット 2020-10-26 14-37-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/81c5abe6-ecea-0f1f-673e-c2fe08129f99.png)

![スクリーンショット 2020-10-26 14-38-34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344266/d80ce689-1fea-d045-9c9c-5366378eb226.png)


それでは先程のkey(今はgoogle_key.jsonにリネームしています)をbase64に変換して
AWS cliをつかってkeyに登録していきます。
(※profileの向き先に注意してくださいw)

```bash

$ cat google_key.json | base64 > base64.json
aws secretsmanager update-secret --secret-id "/google/access_key" --secret-binary fileb://base64.json
```

--secret-binaryを指定することによって暗号化された状態で登録することになります。
※これを指定するとコンソールから値が見れないという利点があります。
もっとセキュリティを強化したい方はKMSを利用ください。





こんな感じでGCP側とAWS側の準備が完成です。

次回：
[AWS lambda でgoogle spread sheetを操作したくなったのでやってみた (その2)](https://qiita.com/mimimi-no-sesese/items/ffa586bdfda968d3f20d)


次回はlambda側の作成をしていきます！！！
では、良いAWSライフを！！