Cloud9でAWS CLI Toolsを実行するLambda Function(Python3.6)を作る

こんにちは、ひろかずです。

この記事は、以前に書いたCloud9でAWS CLI Toolsを実行するLambda Function(Python)を作るのアップデート記事です。

ちょっとした用事があって久しぶりに使ってみたら、Cloud9環境でPython2.7のブループリント([hello-world-python])をベースにLambda Functionが作れなくなっていました。

  • エラーが出てしまうのですよ

これをPython3.6で書き直したので、一筆書きます。

注意

2019/4/4現在、Cloud9は以下リージョンにてサポートされています。

EU (アイルランド)
アジアパシフィック (シンガポール)
米国東部 (バージニア北部)
米国東部 (オハイオ)
米国西部 (オレゴン)

工程

  1. Cloud9環境を作成する
  2. ブループリントからLambda Functionを開く
  3. AWS CLI ToolsをLambda Function内にローカルインストール
  4. AWS CLI ToolsをLambda Functionで実行

参考ドキュメント

AWS Lambda Python で AWS CLI を実行する方法
Cloud9でAWS CLI Toolsを実行するLambda Function(Python)を作る

1. Cloud9環境を作成する

手順は前回記事を参照してください

2. ブループリントからLambda Functionを開く

Welcomeページが表示されるので、[Create Lambda Function]リンクを選択

Function名を入力して[Next]を選択

今回はpython3.6で作りたいので、ブループリントは[hello-world-python3]を選択して[Next]を選択

今回は、トリガーなし(none)で設定します。
[Next]を選択

今回は、デフォルトのまま設定します。
Roleについては、最終的には本番向けに調整されたものに変更するようにしてください。
[Next]を選択

[Finish]を選択

3. AWS CLI ToolsをLambda Function内にローカルインストール

ディレクトリ構造は、前記事を参照してください

AWS CLI Toolsをローカルインストール

以下コマンドを実行

$ cd ~/environment/作成したLambdaFunction名
$ pip install awscli -t ./
$ pip install simplejson -t ./
$ pip install argparse -t ./

awsコマンドスクリプトを作成

/home/ec2-user/environment/作成したLambdaFunction名 にawsコマンドスクリプトを作成

$ vi aws
#!/usr/bin/python
# Copyright 2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.

# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at

#     http://aws.amazon.com/apache2.0/

# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
import sys
import os

if os.environ.get('LC_CTYPE', '') == 'UTF-8':
    os.environ['LC_CTYPE'] = 'en_US.UTF-8'
import awscli.clidriver


def main():
    return awscli.clidriver.main()


if __name__ == '__main__':
    sys.exit(main())

各ファイルに実行権を付与

$ chmod 755 -R *

4. AWS CLI ToolsをLambda Functionで実行

lambda_function.pyにAWS CLI Toolsを呼び出すコードを記載

  • もともと入っているHello Worldの内容はすべて消去します。
import subprocess
import json
import os
from io import StringIO
import re

print('Loading function')

def lambda_handler(event, context):
    cmd = ["./aws", "s3", "ls"]
    out = subprocess.run(cmd, check=True, stdout=subprocess.PIPE)
    print(out.stdout.decode())

緑色の実行ボタンを選択すると、[Function Logs]欄に結果が表示されます。

  • 期待通り、s3の内容が表示されていますね。

関数ができたら、zipにしてLambdaに登録しましょう

  • 今回は、具体的な登録手順は省略します。
$ cd ~/environment/作成したLambdaFunction名
$ zip -r /tmp/作成したLambdaFunction名.zip .
$ aws s3 cp /tmp/作成したLambdaFunction名.zip s3://your-s3-backet/

Python3.6でも、前回記事同様にLambdaでAWS CLIコマンドを実行することができました。

今日はここまでです。

お疲れ様でした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です