Support】2022/08/28に公開AWSDockerLambdaTerraformtech!Qiitaで2021年03月03日に作成した記事を移行しております。記事内容は古い可能性があるのでご注意ください。2020において、Lambdaでコンテナイメージがサポートされました。注目ポイントは、従来のZip形式では依存パッケージ等も含め250MBまでだった容量制限が10GBまで増えた点です。Layerでデプロイする必要が無くなったのではないかと思います。(ただし、最大実行時間は変わらず15分であることに注意してください)コンテナイメージの実現方法として以下の2つがあります。APIを実装したカスタムイメージを作成する本記事では、AWS提供のベースイメージを利用して、下図のようにAWSのサービスステータス画面をスクレイピングして(※)、(AWS側に障害が発生していないときに限り)AWSサービス一覧を取得するLambdaを作成してみようと思います。LambdaのランタイムはPython3.8、IaCはterraformを利用します。status.aws.amazon.comでは、以下のとおりスクレイピングが許可されています。v0.13.6スクレイピング処理用のコンテナ作成まずは、スクレイピングを行い、S3にスクレイピング結果のCSVを出力する処理をPythonで記載していきます。事前準備Mockを用意するのが面倒なので、CSVのアップロード先S3バケットとコンテナのPush先リポジトリを作成しておきます。}}コーティング以下のようなコードを記載しました。logsに表示されなかったためです。(loggingモジュールでのログ出力方法は分かりませんでした。)(参考)実際にLambda上で動作させる場合は、stringであってもCloudWatchLogsに出力されるのでご安心ください。コンテナ作成AWSの公式Dockerイメージをベースに、前手順で作成したPythonのコードと依存パッケージがインストールされた状態のイメージを作成します。以下のDockerFileを作成し、buildを行います。先ほどの手順で作成したDockerイメージを利用して、ローカル上で検証を行います。Emulatorが立ち上がり、curlを利用してランタイムAPIを呼び出すことでPythonのコードを実行することができます。s3://test-upload-bucket-20210302/aws_services.csvイメージのPushローカル環境での検証が完了したので、ECRへイメージをPushし、Lambdaが利用できる状態にします。${ecr_repo}/aws_status_scraping:latestLambda作成Dockerイメージの検証・Pushが完了したので、以下のリソースを作成していきます。RoleLambdaへS3を操作する権限を与えるロールterraformのコードを以下のように修正し、applyを行ってください。"arn:aws:iam::aws:policy/AmazonS3FullAccess"}Lambdaの動作確認CLI経由もしくはAWS管理コンソールからaws_status_scraping関数を実行します。最後に、コンテナに変更を加えた際にDriftが検出されることを確認します。Lambdaリソースに記載した以下により、DockerイメージのHashの違いで差分を検出することができます。"Succeeded..."terraformのplan結果として差分が出力されればOKです。destroy.applyをしてあげることで、変更後のDockerイメージを利用することができます。response.json"Succeeded..."⏎さいごに全体的に簡単に利用し易い機能であると感じました。(カスタムイメージは触ったことが無いので何とも言えないですが)CI/CD周り、特にECR側のDockerイメージを更新した際には、たとえタグが変わらなくてもLambda側の更新処理(update-function-cod)が必要である点は気を付ける必要がありそうです。イメージのpushをしてリリースをした気にならないようにしましょう。terraformのnull_resourceを利用してコンテナのビルド、プッシュ機構を用意することも可能ですが、planのタイミングでコンテナイメージのビルドが行われず、差分が検出できないので注意してください。pupumaruAWSが好きなWebエンジニア。SAA/SAP/SOA/DVA/DOP/SCS保有。バッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。バッジを贈るDiscussionpupumaruAWSが好きなWebエンジニア。SAA/SAP/SOA/DVA/DOP/SCS保有。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。