LoginSignup
9
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-05-01

こんにちは、ひろかずです。
AWS CLI Toolsを実行するLambda Functionは、これまでも幾つかのブログで書かれていましたが、Cloud9環境での実装が思いの外簡単だったので、一筆書きます。

注意

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

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

工程

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

参考ドキュメント

AWS Lambda Python で AWS CLI を実行する方法

1. Cloud9環境を作成する

AWSコンソールにて、Cloud9管理画面を開きます。

cloud9-00.png

[Create environment]を選択

cloud9-01.png

環境名を指定して、[Next step]を選択

cloud9-02.png

環境のスペックを設定します。
今回は、EC2タイプのデフォルト設定で作成します。
[Next step]を選択

cloud9-03-1.png

cloud9-03-2.png

確認画面にて注意書きを確認して、[Create environment]を選択

注意書きには、以下が記載されています

  • バックアップは自分でやること
  • ソフトウェア・アップデートは自分でやること
  • CloudTrailを有効にすること
  • 環境のシェアをする場合は、信頼されたユーザーだけに留めること。

これらの注意書きは、Cloud9が便利すぎて、いろいろできてしまうが故の注意書きと考えて良いでしょう。

cloud9-04.png

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

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

cloud9-05.png

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

cloud9-06.png

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

cloud9-02-1.png

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

cloud9-07.png

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

cloud9-08.png

[Finish]を選択

cloud9-09-1.png

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

Cloud9のIDE画面が展開されます。

cloud9-11.png

ディレクトリ構造の把握

画面下部でシェルが使えるので、ディレクトリ構造を把握しておきます。

Cloud9環境ディレクトリ

  • /home/ec2-user/environment

作成したFunctionディレクトリ(今回の場合,testというFunctionを作成しています)

  • /home/ec2-user/environment/test

lambda_function.pyの位置

  • /home/ec2-user/environment/test/test/lambda_function.py

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

/home/ec2-user/environment/testに移動して、以下コマンドを実行

$ pip install awscli -t ./
$ pip install simplejson -t ./
$ pip install argparse -t ./

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

/home/ec2-user/environment/testに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の内容はすべて消去します。
lambda_function.py
import commands
import json
import os
from cStringIO import StringIO
import re

print('Loading function')

def _(cmd):
    return commands.getoutput(cmd) 

def lambda_handler(event, context):
    print(_("./aws s3 ls"))

緑色の実行ボタンを選択すると、[Function Logs]欄に結果が表示されます。
期待通り、s3の内容が表示されていますね。

cloud9-12.png

AWS CLI Toolsをシェルスクリプトから呼び出す

先程は、AWS CLI Toolsを直接実行しましたが、シェルスクリプトでラップしたものを呼び出します。

シェルスクリプトは、/home/ec2-user/environment/testに配置します。
- 以下コマンドは、画面下部のシェルコンソールから実行します。

$ vi wrap.sh
wrap.sh
#!/bin/bash
aws s3 ls

lambda_function.pyを以下のように修正して、保存します。

lambda_function.py
import commands
import json
import os
from cStringIO import StringIO
import re

print('Loading function')

def _(cmd):
    return commands.getoutput(cmd) 

def lambda_handler(event, context):
    print(_("sh wrap.sh"))

緑色の実行ボタンを選択すると、[Function Logs]欄に結果が表示されます。
こちらでも、期待通り、s3の内容が表示されていますね。

cloud9-13.png

Cloud9環境を利用することで、ローカルにaws sam local等の開発環境を用意することなくコードの作成(動作確認)に集中することができました。
東京リージョンでの開通が待たれますね。

今日はここまでです。
お疲れ様でした。

9
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
2