在AWS资源中使用tag

今天收到AWS的账单,发现按照项目分类的账单明细中,有些项目没有添加特定的标签,以至于相应的费用不是很清楚。比如:不清楚那些“UNTAGGED”的资源都是在哪些项目中创建的。如果费用接近或超出预算,是需要查找原因的。


阅读更多

使用AWS Step Functions定制工作流

最近看上了一款Thinkpad的笔记本,但钱包不够鼓。于是想等价格降下来再考虑。难道去天天刷网页看价格吗?似乎不是一个程序猿该有的思维。最简单的方式就是写一个程序,检查该页面中的价格,然后设定为cron job,每天检查一下,给自己发邮件/短信通知。但这种方式实现起来一点刺激都没有,于是想到了AWS中的Step Functions。于是把整个过程用AWS实现了一下,通过一种无服务器的方式来实现这个功能。

阅读更多

如何使用AWS Cognito Pool和React实现用户注册功能

如何使用AWS Cognito Pool和React实现用户注册功能

AWS Cognito这项服务提供了非常全面的用户注册,登录,和权限管理功能。下面介绍如何使用AWS Cognito Pool在React程序中实现用户注册功能。

image
Source: Pixabay

创建AWS Cognito Pool

首先,进入AWS控制面板,选择Cognito页面,然后创建一个User pool。这里基本上都使用默认设置就可以了。有几点需要注意:

  • 选择Email而不是用户名注册。(这个其实无所谓,但多数App都使用Email,而不是用户名)
  • 创建自己App client的时候,一定要取消”Generate client secret”这个选项,否则后面调用时会出现授权错误。
    image

如果勾选“Generate client secret”,在后面的React程序中提交注册信息的时候,可能出错信息:
image

记录下自己的Pool id和App client id,后面在React中需要。

在Domain name页面,选择一个自己的domain,这个domain在后面会自动被Cognito调用。比如:用户单击验证邮件的链接时,就会访问这个域名下的页面。

在React中使用Cognito

首先创建React项目:

create-react-app aws-cognito-test

安装Node组件:

npm i amazon-cognito-identity-js

引用:

import { CognitoUserPool } from 'amazon-cognito-identity-js';

首先使用state hook创建两个状态:

const [email, setEmail] = useState('');
const [password, setPassword] = useState('');

注册UserPool:

const poolData = {
    UserPoolId: 'xxxx',
    ClientId: 'xxxx'
};
const UserPool = new CognitoUserPool(poolData);

实现注册表单的处理函数:

const handleSubmit = event => {
    event.preventDefault();
    UserPool.signUp(email, password, [], null, (err, data)=>{
      if (err) console.error(err);
      console.log(data);
    });
}

添加用户注册表单:

<form onSubmit={handleSubmit}>
    <input value={email}
       onChange={event => setEmail(event.target.value)}/>
    <input value={password}
       onChange={event => setPassword(event.target.value)}/>     
    <button type='submit'>Signup</button>         
</form>

尝试注册一个用户。从浏览器控制台中可以看到,用户已经创建成功了。

image

收到验证邮件:
image

进入到AWS User Pool,就会看到用户已经创建:
image

如何将Beem程序在AWS Lambda上运行

大约两,三年前就开始在VPS上跑Steem的程序了,后来有了Hive链,也开始跑Hive的程序。其实Steem/Hive的Python库还是很好用的。于是就有了几个Cronjob,点点赞,领取一些收益之类的。但近期随着对AWS服务了解的越来越多。感觉再在VPS跑Cronjob似乎有点Out了。于是开始考虑把一系列的Cronjob都搬到AWS上来,这样做最大的优势就是避免了以后服务器的维护成本。不用再考虑升级Ubuntu的各个版本/打各种安全补丁了。同时,也能节省一些银子。相信我,AWS的一系列Serverless服务真正用起来之后,在这些服务上的花费真的比想象中的要低不少。

image

阅读更多

使用AWS CloudWatch监测Lambda运行,并通过SNS发送通知

在运行Amazon AWS的众多服务时,一旦某个服务出现了故障,我们肯定想要第一时间得到通知。 或者当某项服务的资源使用超过某个阀值时,我们可能想要赋予其更多资源。 要实现类似的功能,我们可以使用SNS(Simple Notification Servivce)和SQS(Simple Queue Service)。下面通过一个简单的例子来说明如何使用AWS CloudWatch监测Lambda运行,并通过SNS发送通知。

阅读更多

使用AWS Amplify自动部署Hexo静态站点

最近尝试了一下Amazon AWS的Amplify,感觉非常好用。下面介绍一下如何使用Amplify自动将Hexo生成的静态站点发布到AWS。 其实使用AWS的优点还是有很多的。 比如: 前12个月免费,12月后对于访问量不是很高的个人站点而言,费用也非常低,每个月可能都不到1美元; 全球CDN网络支持,和众多AWS服务的无缝集成等等。下面把具体步骤总结一下:

Amplify

阅读更多

使用Bitbucket Pipelines自动部署Serverless项目到AWS Lambda

最近越来越多的在项目中用到AWS Lambda,也就是AWS无服务器架构中的核心编程单元。其最大的优势就是开发人员不用操心底层系统的架构和维护,只需要专注于核心代码。但AWS整个系统的部署要涉及的步骤非常繁琐,因此这里推荐使用serverless框架。就算使用这个框架,似乎还不够自动。因此下面介绍一下如何使用Bitbucket Pipelines将上面的所有环节都连接到一起,开发人员只关注Lambda代码的实现,一旦提交代码到Bitbucket,就会自动构建并部署到AWS。

Bitbucket Pipelines

阅读更多

使用Serverless Requirements在AWS无服务器架构中配置Python依赖库

最近一直在尝试AWS Serverless(无服务器架构)的系列产品,比如:S3, Lambda, APIGateway等等。在使用Serverless这个框架通过Python编写Lambda的时候经常会遇到一个问题就是:在Python中要使用其他依赖库怎么办?本来Lambda就是AWS微服务架构中的最小单元了,那么如何导入这些依赖库呢?其中的一个方案就是使用Serverless Requirements这个插件来管理这些依赖库。下面以一个简单的例子进行说明。

Serverless

阅读更多

在DynamoDB中使用GSI

由于DynamoDB是一个基于键/值方式存储的数据库,因此其性能卓越,能够快速返回待查询的信息。不过,当要进行稍微复杂查询的时候,就要在设计初期考虑清楚,其Partition Key(PK),Sort Key(SK),以及Global Secondary Index(GSI)的设计了。


阅读更多

安装并配置DynamoDB本地版

在学习和使用DynamoDB的时候,常常是先需要做一些尝试,等到一切都准备就绪后,才会在生产环境中创建数据库并导入数据。那么,能够在开发/实验阶段不使用AWS中的DynamoDB呢,毕竟要交费的?答案是肯定的。其实,AWS早就提供好了DynamoDB的本地版。一旦安装,配置好之后,所有的操作都可以针对本地的DynamoDB,这样就不会产生任何的费用了。下面总结一下如何进行安装和配置。

image

阅读更多