我的 CodeBuild 配置了 CodePipeline。S3 是我的神器商店。尽管附加了具有足够访问权限的 IAM 角色,但我仍然收到拒绝访问的消息。
错误消息的屏幕截图
我已经检查了与 Codebuild 关联的服务角色。它附有以下政策。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Build",
"arn:aws:logs:ap-southeast-1:682905754632:log-group:/aws/codebuild/Build:*"
],
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
]
},
{
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::codepipeline-ap-southeast-1-*"
],
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion"
]
}
]
Run Code Online (Sandbox Code Playgroud)
}
但是当我使用 IAM 策略验证器对其进行测试时,我收到以下错误消息。
根据这个问题的公认答案,我目前拥有的策略应该允许我从 S3 获取工件而不会出现任何问题 - AWS Codebuild 在下载源时失败。消息:访问被拒绝
如何摆脱拒绝访问的消息?
我正在尝试使用 CodePipeline 和以下设置在 AWS 上设置 CI/CD 管道
资料来源:S3
构建:代码构建
部署:CodeDeploy
发布:EC2 实例
我已经按照这个链接完成了配置
但是我的管道失败并显示错误消息
The object with key 'code-sashi/api' does not exist.
Run Code Online (Sandbox Code Playgroud)
我已经检查并确认存储桶名称正确,并且存储桶内有一个文件夹“api”。
设置此项的选项明确指出我可以输入 S3 对象键或 S3 文件夹。在这种情况下,我想使用 S3 文件夹,因为我的构建工件仅在 CodeBuild 运行后准备就绪。
但是 CodePipeline 继续查找对象键并忽略我的文件夹。
我还尝试将 S3 文件夹设置为“api”、“/api”、“api/”,但它们都不起作用。我尝试将我的文件直接复制到存储桶并将文件夹设置为“/”,但失败并显示“对象键不能以尾随 / 结尾”的不同错误消息
基于此链接,我应该能够通过 S3 文件夹将存储桶的所有内容作为“/”获取。
如果有帮助,我将使用 Bitbucket Pipelines 将文件从 Bitbucket 私有存储库上传到 S3。不幸的是 CodePipeline 无法直接连接 Bitbucket,因此 S3 解决方法。奇怪的是,CodeBuild 连接到 Bitbucket 存储库没有问题,但如果它是 CodePipeline 的一部分,则无法这样做。
题
如何正确配置 CodePipeline 以从“code-sashi”存储桶和“api”文件夹中获取我的文件?将来会有其他包含代码的文件夹,所以我想把它们都放在一个桶里。
amazon-s3 amazon-web-services aws-codepipeline aws-codebuild
根据开发人员政策,建议不要使用与SMS和CALL_LOG相关的权限,除非该应用具有与之相关的核心功能。我以前使用READ_SMS权限来自动检测OTP,但后来从应用程序中将其删除并用SMS Retriever API替换了它。我于2019年1月3日在没有任何禁止播放商店的许可的情况下发布了该应用程序,在要求该应用程序在没有这些许可的情况下进行更新的截止日期为2019年1月9日之前。收到一个需要解决1个错误的应用发布错误。当我单击查看错误详细信息时,消息为“在创建声明敏感权限的新应用发布之前,您无法编辑此应用”。
目前,我的应用中使用的权限列表如下:-
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.RECORD_AUDIO" />
Run Code Online (Sandbox Code Playgroud)
我没有使用任何SMS或CALL_LOG权限,但在发布新版本时仍然遇到错误。请参考链接以查看错误。
发布新版本时出现应用错误
背景:我尝试使用 SQS 队列作为触发器来执行 lambda 函数。一旦 lambda 函数完成执行,我就会尝试通过 SNS 主题将响应发送到另一个 SQS 队列。
SQS 队列 -> Lambda -> SNS 主题 -> SQS 队列
我最初尝试使用目标将 Lambda 的响应发送到 SQS,但这仅适用于异步调用,而 SQS 被视为同步调用。美好的。现在我触发一个 SNS 主题,然后该主题负责将消息添加到 SQS 队列。这种集成效果很好。
问题: SNS 主题始终无法发布到 SQS 队列。我可以看到死信队列始终包含消息,而不是实际队列。这是我在 CloudWatch 上发现的错误消息
{
"delivery": {
"providerResponse": "{\"ErrorCode\":\"KMS.AccessDeniedException\",\"ErrorMessage\":\"null (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: c)\",\"sqsRequestId\":\"Unrecoverable\"}",
"dwellTimeMs": 51,
"attempts": 1,
"statusCode": 400
},
"status": "FAILURE"
}
Run Code Online (Sandbox Code Playgroud)
我可以看到 KMS 拒绝访问某些内容。但我不确定谁被 KMS 拒绝了。SNS 主题没有加密设置。它已被禁用。我最初启用了它,但在遇到问题后,我禁用了它。但问题仍然存在。
我尝试过什么:
我不确定我是否理解 AWS Lambda - SQS 正确触发。我是否可以将它配置为一个 SQS 队列可以根据消息正文或消息属性触发不同的 lambda 函数?
我的用例:我有三个不同的 lambda 函数(processCricket、processFootball、processTennis),每个函数执行一个独特的功能。我有一个接收消息的队列(processGame)。队列中的每条消息都有一个属性“type”,它可以是“Cricket”、“Football”或“Tennis”。我可以根据消息上的“类型”调用不同的 lambda 函数吗?
选项 1:根据类型配置 SQS 以触发不同的 lambda 函数(不确定我是否可以这样做)
选项 2:配置一个可以检查类型的 lambda 函数,然后根据其类型调用其他 lambda 函数
选项 3:为每个 lambda 创建单独的队列。通过将消息添加到适当的队列来控制哪个 lambda 处理消息。
我正在使用express-handlebars 来渲染一些html 页面。浏览器找不到我链接到的 css 文件。这是我的服务器文件的样子:
const express = require('express');
const exphbs = require('express-handlebars');
const path = require('path');
const _ = require('lodash');
const bodyParser = require('body-parser');
const socketIO = require('socket.io');
const http = require('http');
var static = require('node-static');
var {mongoose} = require('./db/mongoose.js');
var {User} = require('./models/user');
const publicPath = path.join(__dirname, '../public');
var app = express();
app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');
var server = http.createServer(app);
var io = socketIO(server);
const port = process.env.PORT || 3000;
app.use('/', express.static(publicPath));
app.use(bodyParser.json());
app.get('/', (req, res) …Run Code Online (Sandbox Code Playgroud) 我最近一直在使用CodeBuild和CodePipeline,遇到了这个问题。
CodeBuild成功完成后,应将构建工件上载到S3存储桶。但是我注意到,当我单击View Artifacts按钮时,它只是告诉我发生了错误,并且我的S3存储桶也没有构建工件。
代码构建成功完成
但是,单击“查看工件”链接会将我带到此错误消息。
似乎我的构建工件没有上传到S3
这是我的Buildspec.yaml
version: 0.2
phases:
build:
commands:
- echo "Entering build"
- npm install
- echo "Finishing build"
Run Code Online (Sandbox Code Playgroud) amazon-s3 ×2
amazon-sqs ×2
amazon-sns ×1
android ×1
aws-lambda ×1
cocoa-touch ×1
express ×1
ios ×1
java ×1
node.js ×1
permissions ×1
release ×1
sms ×1
swift ×1
uitextview ×1