AWS开发-Chalice Framework-Lambda和API网关5分钟

作者 : IT 大叔 本文共2710个字,预计阅读时间需要7分钟 发布时间: 2020-09-8

自从我从事IT事业的第一天以来,我一直在两种选择之间作斗争,以成为基础架构管理员或开发人员-我都喜欢。情况迫使我成为基础架构管理员,一段时间以来,开发只是我的爱好。
近年来,我从AWS中发现了越来越多的工具,这使我的梦想成为了同时成为开发人员和基础架构管理员的工具-使基础架构成为代码现实的工具。

工具之一是AWS Chalice框架

Chalice Framework的最佳定义 是:

AWS Chalice是适用于AWS的Python无服务器微框架,可让您快速创建和部署使用Amazon API Gateway和AWS Lambda的应用程序。

Chalice为开发人员提供了以下选项:

  1. 使用集成的部署工具快速部署资源
  2. 在本地测试代码

管理员可以使用CDK,Cloud Formation,Terraform集成和部署Chalice应用程序。请参阅AWS博客以了解CDK部署

总是有一个问题:要使用哪种工具-圣杯,SAM,CDK,烧瓶?

圣杯适合小型快速部署:

  1. 开发人员-快速测试应用程序。
  2. 在小型环境中部署

场景#2是我确切决定使用Chalice的原因。
在与客户谈论他的EC2实例定价时,我得到了必须满足的要求:

  • Windows Server与2个远程用户一起登录
  • 安全组中没有入站开放端口- 是的!
  • 没有VPN- 猜猜-这是来自上述步骤
  • 允许传出连接。
  • 时区PST / EST / CET-美国/欧洲
  • 5分钟即可启动服务器
  • 服务器需要快速运行,我们需要省钱- 是的!
  • 没有客户的服务器管理

解:

  1. 部署Lambda和API网关,当用户连接到服务器时将启动/停止实例-这将节省成本,因为预计服务器总使用时间不会超过12小时。
  2. 使用安装的SSM管理插件配置客户端,并启动服务器脚本
  3. 一个小时没有用户活动时停止EC2实例-Windows Server中的脚本

实施:步骤1

docker run -v ~/chalice:/root/chalice -v /root/.aws:/root/.aws/ -it -p 2022:22 ubuntu:chalice /bin/bash

  • 在容器中:

cd chalice

chalice new-project control-ec2

cd control-ec2

python3 -m pip show boto3|grep Version|sed 's/Version: /boto3==/'>>requirements.txt #这会将最新的boto3版本添加到本地测试的要求中。如果您可以接受代码,则不要这样做

  • 编辑app.py文件:

from chalice import Chalice
import boto3
app = Chalice(app_name='control-ec2')

@app.authorizer(ttl_seconds=30)
def my_auth(auth_request):
# Validate auth_request.token, and then:
return AuthResponse(routes=['/'], principal_id='arn:aws:ec2:us-west-2:xxxxxxxxxx:root/*')

# Create route to start instance
@app.route('/start/{name}', authorizer=my_auth)
def instance(name):
instances = [name]
ec2 = boto3.client('ec2', region_name='us-west-2')
ec2.start_instances(InstanceIds=instances)
return {'InstanceId started': name}

# Create route to stop instance
@app.route('/stop/{name}', authorizer=my_auth)
def instance_stop(name):
instances = [name]
ec2 = boto3.client('ec2', region_name='us-west-2')
ec2.stop_instances(InstanceIds=instances)
return {'InstanceId stopped': name}

我们在这里做什么:

  • 创建仅允许IAM用户调用API方法的授权者
  • 2个根据传入的实例ID启动/停止EC2实例的功能

注意:将 boto3客户端和主体ID的区域更改为所需的任何角色/用户名
principal_id='arn:aws:ec2:us-west-2:xxxxxxxxxx:root/*')

  • 下次运行 chalice deploy或 chalice deploy --stage prod 一旦开发阶段就可以

不到5分钟的时间就可以准备好

如何调用API?

*方法1:
Python代码

import requests
from requests_aws_sign import AWSV4Sign
from boto3 import session

session = session.Session()
credentials = session.get_credentials()
region = session.region_name
service = 'execute-api'

url = "REPLACE_THIS_LINE_WITH_URI_AND_INSTANCE_ID"
auth = AWSV4Sign(credentials, region, service)
response = requests.get(url, auth=auth)
print(response.text)

注意:您需要修改代码以传递实例ID,或使用实例ID明确指定网址-例如2个文件以启动和停止实例

  • 不过,还有更好的方法:使用AWS CLI:

aws apigateway test-invoke-method --rest-api-id API_ID --resource-id RESOURCE_ID --http-method GET --path-with-query-string /stop/<instanceId here>

--rest-api-id-在圣杯部署后返回或cat .chalice/deployed/prod.json
--resource-id-在控制台上在特定方法上找到,或者从
aws apigateway get-resources --rest-api-id API_ID

从解决方案中,我们仅实现了步骤1。请
继续关注如何为步骤2和3配置客户端

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » AWS开发-Chalice Framework-Lambda和API网关5分钟

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论