dshimizu/blog/alpha

とりとめのないITブログ

AWS CLIを使ってPythonのAWS Lambda関数を更新する

とりあえずaws cliを使ってPythonAWS Lambda関数を更新するやり方がドキュメントにあったのでメモ。

標準ライブラリのみを使っているLambda関数の更新

使うコードはLambda関数の設計図の中にあるcloudwatch-alarm-to-slack-pythonを流用する。

関数名はlambda_function.pyとしておかないとLambdaが動かない。

$ cd ~/aws-lambda-sample_cloudwatch-alarm-to-slack

$ ls
README.md  lambda_function.py.py  test-event.json

単純に関数コードをzipアーカイブにし、AWS CLI を使用してアップロードすれば良い。

$ zip lambda_function.zip lambda_function.py 
  adding: lambda_function.zip (deflated 57%)
$ aws lambda update-function-code --function-name cloudwatch-alarm-to-slack-python --zip-file fileb://lambda_function.zip --profile admin
{
    "FunctionName": "cloudwatch-alarm-to-slack-python",
    "LastModified": "2019-08-04T00:21:16.455+0000",
    "RevisionId": "********-****-****-****-************",
    "MemorySize": 128,
    "Environment": {
        "Variables": {
            "kmsEncryptedHookUrl": "hooks.slack.com/services/*********/*********/************************",
            "slackChannel": "notification_aws",
            "HookUrl": "hooks.slack.com/services/*********/*********/************************"
        }
    },
    "Version": "$LATEST",
    "Role": "arn:aws:iam::**********:role/hogehoge-lambda-cli-role",
    "Timeout": 10,
    "Runtime": "python3.7",
    "TracingConfig": {
        "Mode": "PassThrough"
    },
    "CodeSha256": "hF1HoyoxurekUvEtl4+Hd5FRuGNvJx7tES1tiUV3jt8=",
    "Description": "An Amazon SNS trigger that sends CloudWatch alarm notifications to Slack.",
    "VpcConfig": {
        "SubnetIds": [],
        "VpcId": "",
        "SecurityGroupIds": []
    },
    "CodeSize": 969,
    "FunctionArn": "arn:aws:lambda:ap-northeast-1:************:function:cloudwatch-alarm-to-slack-python",
    "Handler": "lambda_function.lambda_handler"
}

これで関数が更新された。

まとめ

aws cliを使ってPythonAWS Lambda関数を更新するやり方について書いた。 ライブラリを使ってなければ単純にzip化してaws cliでLambda関数をアップロードすれば良い。

AWSのcode系サービスを使ってCI/CDをうまく組みたいが、現状、codedeployでは、Lambdaに対しては新しいバージョンへのトラフィックの制御をしながらの移行はできるがデプロイはできないみたいなのでどうするのが良いか考えたい。