GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Terraform – Python Lambdaをデプロイする(コンテナーイメージ)

2020年の終わりに、AWSはLambdaのコンテナーイメージのサポートを発表しました。この機能を使用すると、Lambda関数を最大10GBのサイズのコンテナーイメージとしてパッケージ化してデプロイできます。この記事では、Terraformを使用して、コンテナーイメージに基づくPythonLambda関数をデプロイする方法について説明します。この記事では、Terraformを使用して、コンテナーイメージに基づくPythonLambda関数をデプロイする方法について説明します。

クラウドの世界で一般的なタスクの1つは、ソースコードリポジトリをオンプレミスからクラウドに、またはクラウド環境間で複製することです。そこで、アプローチを説明するために、GitとGitPythonのサポートをLambda関数に追加することにしました。

プロジェクト構造

このデモで使用するプロジェクト構造は次のとおりです。

  $ treelambda_containerlambda_container├──README.md├──lambdas│└──git_client│├──Dockerfile│└──index.py└──main.tf2ディレクトリ、4ファイル 
  • ラムダ –Lambda関数のソースコードを配置するフォルダー
  • main.tf – git_client Lambda関数のDockerコンテナをビルドし、後で関数をデプロイするTerraformデモコード

Dockerfile

ラムダ関数のすべての依存関係をホストするDockerコンテナーについて説明します。これがDockerfileです コンテンツ:

  FROM public.ecr.aws/lambda/python:3.8RUN yum update -y &&\ yum install -y git &&\ rm -Rf / var / cache / yum &&\ pip install git-remote-codecommit boto3 GitPython awscliCOPY index.py $ {LAMBDA_TASK_ROOT} CMD ["index.handler"]  

AmazonのPython3.8パブリックDockerイメージをベースとして使用しています。次に、Gitをインストールし、yumキャッシュをクリーンアップしてコンテナーを小さくし、必要な依存関係をインストールします。これにより、認証にIAMを使用してCodeCommitでGitを使用できるようになります。

次に、 index.pyをコピーします Lambda関数コードが存在するフォルダーにファイルします。詳細については、「AWSLambda環境変数の使用」を確認してください。

最後に、コンテナの起動時にindex.pyファイルからハンドラメソッドを実行するように指定しています。

ラムダコード

Lambdaコンテナ宣言が完了するとすぐに、それを使用するLambda関数を記述できます。これがコード例で、Gitリポジトリのクローンを作成する方法を示しています。きっと、個人的なニーズに合わせてこの例を調整できるでしょう:

  import loggingimport osimport git TMP_DIR ="/ tmp" REPO_DIR ='aws-config-rules' REPO_URL =f'https://github.com/andreivmaksimov/ {REPO_DIR}' CLONE_PATH =os.path.join (TMP_DIR、REPO_DIR)LOGGER =logging.getLogger(__ name __)LOGGER.setLevel(logging.INFO)def clone(branch ='master'):repo =git.Repo.clone_from(REPO_URL、CLONE_PATH、branch =branch)withrepo。 config_writer()as git_config:git_config.set_value('user'、'email'、'[email protected]')git_config.set_value('user'、'name'、'Git Lambda')def handler(イベント、コンテキスト):LOGGER.info('Event:%s'、event)LOGGER.info('Cloning repo:%s'、REPO_URL)clone() 

このコードでは、必要なPythonライブラリ、いくつかの定数、構成ロガー、およびいくつかの関数を宣言しています。

  • def clone(branch ='master') –この関数は、Gitリポジトリのクローンを作成する方法を示しています
  • def handler(event、context) –この関数は、Lambda関数へのメインのエントリポイントであり、着信イベントをログに記録し、 cloneを呼び出します。 機能
テラフォームコード

Lambdaコードを取得してそのコンテナーを宣言するとすぐに、デプロイを自動化するためのTerraformコードを記述できます。ここにあります:

  variable region {default ="us-east-1"} Provider aws {region =var.region} data aws_caller_identity current {} locales {prefix ="git" account_id =data.aws_caller_identity.current.account_id ecr_repository_name ="$ {local.prefix} -demo-lambda-container" ecr_image_tag ="latest"} resource aws_ecr_repository repo {name =local.ecr_repository_name} resource null_resource ecr_image {triggers ={python_file =md5(file( " } /lambdas/git_client/index.py "))docker_file =md5(file(" $ {path.module} / lambdas / git_client / Dockerfile "))} provisioner" local-exec "{command =< 

このTerraformコードは、Terraformバージョン0.14.8を使用してテストされました。

この例では、次のテラフォームリソースを使用しています。

  • aws_ecr_repository – TerraformがDockerコンテナイメージを保存するECRレジストリを作成します。このイメージは、後でLambda関数で使用されます
  • null_resource – DockerコンテナをビルドしてECRレジストリにプッシュするために使用され、Lambda関数コードとDockerfileの変更をチェックし、Terraformがイメージを再構築してLambda関数を更新するタイミングを理解できるようにします
  • aws_ecr_image –公開されたDockerイメージに関する情報をクエリできます
  • aws_iam_role aws_iam_policy_document およびaws_iam_policy – Lambda関数のパーミッション(CloudWatchへのログの送信、CodeCommitアクセス)を宣言します
  • aws_lambda_function –ラムダ関数宣言自体
展開

ソリューションをテストするには、最初にTerraformコードをデプロイする必要があります:

  terraform initterraform apply -auto-approve  

次に、Lambda関数を実行する必要があります:

  aws lambda invoke --function-name git-lambda out --log-type Tail --query'LogResult' --output text | base64 -d  

期待される出力は次のとおりです:

  START RequestId:b8b742d6-5bd6-4098-90e3-5e30f5c6e816バージョン:$ LATEST [INFO] 2021-03-16T02:10:28.064Z b8b742d6-5bd6-4098-90e3-5e30f5c6e816イベント:{} [INFO ] 2021-03-16T02:10:28.064Z b8b742d6-5bd6-4098-90e3-5e30f5c6e816クローン作成リポジトリ:https://github.com/andreivmaksimov/aws-config-rulesEND RequestId:b8b742d6-5bd6-4098-90e3-5 :b8b742d6-5bd6-4098-90e3-5e30f5c6e816期間:4069.15 ms請求期間:6131 msメモリサイズ:128 MB最大使用メモリ:83 MB初期期間:2061.73 ms  
クリーンアップ

すべてをクリーンアップするには、次のコマンドを実行します。

  terraform destroy  
概要

この記事では、AWS Lambda関数用のDockerコンテナーを構築し、Terraformを使用してソリューション全体をデプロイしました。この記事がお役に立てば幸いです。もしそうなら、私たちがそれを世界に広めるのを手伝ってください。ご不明な点がございましたら、下のチャットセクションでお気軽にお問い合わせください。


Docker
  1. Anaconda Python DataScienceDockerコンテナを構築する方法

  2. Dockerイメージからファイルを抽出しますか?

  3. PostgreSQLをDockerコンテナとしてデプロイする方法

  1. LinodeにDockerを使用してnginxコンテナをデプロイする方法

  2. DockerをインストールしてLAMPスタックをデプロイする方法

  3. mysql コンテナーにデータをコミットする

  1. DockerコンテナにPostgreSQLをデプロイする方法

  2. Dockerイメージに基づいてデプロイされたコンテナーを更新する

  3. コンテナと Dockerfile から Docker イメージを作成する方法