【AWS】CodeStarでPython Lambda環境を作ってHelloWorldする

## はじめに
### 概要
このところ [AWS CodeStar](https://aws.amazon.com/jp/codestar/) を使った開発を行っています。
CodeStarはざっくりいうとCI/CDサービスとダッシュボードをまとめたサービスという理解でいます。
CI/CDツールもパッケージ化して作成してくれるので書いたコードがすぐに反映されるのでちゃちゃっと試したいときに便利なものではあります。
ただ作り込んでいくと（AWS初心者の私は）権限周りで躓くことが結構ありました。
今後S3アクセスやLambdaのVPC配置、EC2プロジェクトについても随時更新していく予定です。

まずはローカルのテキストエディタでコードを編集・Pushして変更を確認するところまで。

### 前提
 - 作業日時：2020/4/11
 - ローカル環境
   - PC：Mac
   - OS：Catalina
   - インストール済みコマンド：Git CLI, AWS CLI
 - AWS環境
   - ユーザー：root
   - AWSリージョン：東京（ap-northeast-1）
※ **2020/4/11時点で東京リージョンのCodeStarは開発環境としてのCloud9をサポートしてないのでご注意ください**

## CodeStarプロジェクト 作成手順

1. AWSマネジメントコンソールからcodestarと検索してCodeStarサービスを開きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/2e93f2fe-7d9c-de11-e5c0-ffd3725ffd7c.png)

2. 新規プロジェクトの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/93cc94fa-0bac-71e9-2d09-79cc32fba71f.png)

3. 今回は「Python ウェブサービス Lambda」テンプレートを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/f08781dc-7f26-0536-5f45-a1f9662aae0e.png)

4.今回プロジェクト名は「hello-world-codestar」、プロジェクトIDは「codestar-test」とし、リポジトリはCodeCommitを使用します
※ **プロジェクトIDは編集可能15文字まで、かつこのIDが後述のCodeStarが作成するサービスの各所（URLやサービス名、ARN）に響いてくる上に変更不可なので要注意**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/ccc729f0-d664-0bb0-c8ce-8f4f1d6f16f1.png)

5.「AWS CodeStarが、〜（略）〜」のチェックボックスにチェックが付いている状態で「プロジェクトを作成」を押します
※ **押すとすぐに関連サービスのデプロイが行われるので要注意**
※ **かつPublicなURLが公開される点も注意**
※ CodeStarのプロジェクト作成により7-8個のサービスが自動で作成されるので、むやみに作ると環境が一気にごちゃごちゃします・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/d5f52c19-275a-2b94-3ae8-b43f62fa3d92.png)

6.リポジトリ作成中...（リポジトリ作成が終わるとCodeCommit内に作られたリポジトリのURLが表示されます、）「スキップ」を選択
※ コードの編集環境の設定は後ででも行えます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/1dfeb999-d8da-e55b-ce2e-ef355b759137.png)

7.プロジェクト作成中...作成完了後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/d7c2bd8c-d7d8-8d1d-aede-3df8e1df5b9a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/cf0e9c7c-8262-707f-9a1a-42acace216fe.png)

8.この状態でダッシュボード中「アプリケーションのエンドポイント」にアクセスすると初期テンプレートのLambdaからの応答を確認できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/301259d1-48b1-9b40-dd6f-68cc4acedc95.png)


## ローカルPCでのコード編集 ~テキストエディタ編~
1. 作成したプロジェクトのダッシュボード画面から「ツールに接続」を選択し、リポジトリURLをコピー
※ 対象ユーザーGit credentials
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/b10259a2-16cb-45cc-c167-9ff645b7a485.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/2c102c96-05f4-8a94-4527-1762c6430553.png)

2. ローカルマシンのCLIでコピーしたURLをclone、初回Cloneの場合[Git credentials](https://docs.aws.amazon.com/ja_jp/codestar/latest/userguide/getting-started.html#git-credentials)のユーザー名/パスワードの入力が必要です

3. Cloneしたコードの階層は下記のようになっています、今回は「index.py」を編集してLambdaの応答が変化することを確認します
※ ここでは深く触れませんがbuidspec.ymlやtemplate.yml、またIAMのロール/ポリシーを適切に設定することで、Lambdaのbuildテストやデプロイ設定のアップデートが可能です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/1530a629-6c44-2ae5-4b74-cce0dbb26a96.png)

4. index.pyを編集・保存します、下の例ではoutputのvalueに「CodeStar！」を付け加えています

```python:index.py
import json
import datetime


def handler(event, context):
    data = {
        # 'output': 'Hello World',
        'output': 'Hello World CodeStar!',
        'timestamp': datetime.datetime.utcnow().isoformat()
    }
    return {'statusCode': 200,
            'body': json.dumps(data),
            'headers': {'Content-Type': 'application/json'}}
```

5.add → commit → pushでリモートリポジトリに変更を反映させます
※ このときAWS CLIのconfigurationがcloneしたリポジトリの存在する環境じゃないとpushに失敗します、設定方法は[こちら](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-configure.html)を参照

6.pushが成功するとCodeStarのダッシュボードでPipeLineのステータスが更新されていきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/48000804-15ad-1528-4d3c-5d3003f33816.png)

7.Deployも完了し全フェーズのステータスがGreenとなったこと確認し、アプリのエンドポイントにアクセスし、コードの変更が反映されていることを確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/31398cfe-9e1c-936d-1d59-e7ed5e38c106.png)

## さいごに
 - CodeStarプロジェクトの作成方法とテキストエディタでのコード編集方法について下記ましたが、IDEでのコード編集&pushも可能です
 - 振り返るとローカルで編集してpushするだけでも意外と工程があるなぁと思い知らされました

## （備考）CodeStarのプロジェクトIDについて
ダッシュボードの左下にあるプロジェクトを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/de83b9ff-a75d-fc3a-24c1-9b4063a956d7.png)

開くとプロジェクト詳細とCodeStarによって作成されたリソースの一覧が表示されます
見て分かる通り作成手順4で設定したプロジェクトIDが至るところで使用されています、前述の通りプロジェクトIDは変更ができないため注意が必要なのはこのためです
（プロジェクトIDの変更手順をご存知の方いらっしゃいましたらお教えください！）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533611/47976f9a-8854-c30b-d1f9-51ee82b1cb5f.png)