CLIの使い方まとめはじめにこんにちは。データサイエンスチームのmotchieです。2018の22日目の記事です。セッションから、特に使ってみたいLambdaのtipsをお届けします。前回の記事はこちらになります。Storeを使う機会がありました。手順やIAMポリシーがうろ覚えで、自分が書いた記事を何度も確認してしまいました。Storeによる設定情報の一元管理、とても便利です。そちらも試してみてください。SAMのポリシーテンプレートを使って、LambdaのIAMポリシーを作成する方法をご紹介します。SAMのポリシーテンプレートを使うことで、権限の範囲が制限されたIAMポリシーの作成・Lambda関数のデプロイを、より便利に行うことが出来ます。使用例として、この記事では、前回の記事で作成したSlack通知用Lambda関数を用いたいと思います。前回は、マネジメントコンソールでLambda関数を作成し、IAMロールを作成してアタッチする、という手順を踏んでいました。CLIを使って関数パッケージをデプロイしてみたいと思います。セッションは、スライドと動画が公開されています。Servicesセッション全体の内容が気になる方は、ぜひこちらも見てみてください。(SRV401-R2)のスライドp71において、全体のtipsがまとめられています。SAMのポリシーテンプレートを使ったIAM権限の管理について、詳しくご紹介したいと思います。サーバーレスアプリケーションモデルの略です。読んで字のごとく、サーバーレスアプリケーションの構築に特化したフレームワークです。CLIから構成されます。デプロイの際には、SAMのテンプレートはCloudFormationのテンプレート・スタックに変換されます。デプロイできるサービスの種類はCloudFormationの方が多いですが、SAMの方が記述がシンプルで済みます。CLIにはLambda関数をローカル環境でテストする機能も提供されています。Gatewayなど、サーバレスアプリケーションの構築用途では、CloudFormationよりもSAMがオススメです。して、可愛い子犬のパグが泣いているスライドが登場します。s3:GetObject(読み込み)、s3:PutObject(書き込み)、s3:DeleteObject(削除)など、S3のオブジェクトに対するあらゆるオペレーションが許可されています。用途によっては、実際に必要なのはオブジェクトの読み込み権限だけという場合もありそうです。その場合、最小権限の原則に則ると、s3:GetObjectだけ許可するのがセキュリティ的に望ましいです。実際には特定のバケットのオブジェクトだけ読み込めれば良いという場合もありそうです。S3のバケットを絞るなど、リソース範囲も制限したほうが良いでしょう。IAMポリシーの作成はなかなか手間がかかるため、結局範囲を絞らずに必要以上の権限を与えることになりがちかもしれません。そこで登場するのがSAMのポリシーテンプレートです。TemplatesSAMのテンプレートでリソース情報を記載する際、そのリソースに付与するIAMロールを指定したり、IAMロールを作成したりすることが出来ます。その際、SAMのポリシーテンプレートを使ってIAMロールを作成することで、権限の範囲が制限されたIAMロールをより簡単に作成することが出来ます。セッションの時点では、45種類以上の定義済ポリシーテンプレートが提供されています。ポリシーテンプレートの一覧については、こちらから確認できます。今後益々種類が増えていくことが予想されます。当該バケットの読み込み権限のみに制限したIAMポリシーを簡単に作成できます。以降では、前回の記事でご紹介したSlack通知用のLambda関数を再び使いたいと思います。CLIで関数パッケージをAWS上にデプロイしてみたいと思います。CLIはpipを使ってインストールすることが出来ます。CLIを使ってローカル環境でのLambda関数のテストを行うためには、Dockerのインストールも必要になります。詳しい手順については、こちらもご覧ください。--versionそれでは実際にpython3.6のアプリケーションを作成してみます。1.以下のコマンドで、サンプルアプリケーションをダウンロードします。python3.6中身はこんな感じになっています。test_handler.pyこのテンプレートを元に、ファイルを修正していきたいと思います。[1]の記事のコードに置換します。以下の内容に変更しますboto34.必要なパッケージとPythonコードをまとめておきます。hello_world/build/5.template.yamlを以下の内容に変更します。"*"17~18行目で、SAMのポリシーテンプレートからKMSでSlackのHookURLを復号化するためのポリシーを作成しています。KeyIdを指定することで、リソースの権限を制限したポリシーを作成しています。19~34行目は通常の方法で作成したポリシーです。Documentも併用して指定することが可能です。6.テンプレートの形式に問題がないか、チェックします。template.yaml7.パッケージを作成してS3のバケットにアップロードします。S3のバケットの値は自身のバケット名に置き換えて使ってください。packaged.yaml8.デプロイを行います。CAPABILITY_IAM以上で関数のデプロイは完了になります。作成したリソースはAWSマネジメントコンソールのCloudFormationから確認することが出来ます。CLIを使ってLambda関数をデプロイする方法をご紹介しました。みなさんもぜひ試してみてください。re:Inventmotchie2017年4月、NHNテコラスに新卒入社。データサイエンスチームに所属し、AWSを活用したデータ分析サービスの設計開発を担当。注力分野は自然言語処理、好きなAWSサービスはEMR、SageMaker。