Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 31

0
votes
answers
20 views
+10

Cloudwatch獲取InstanceId

0

如何獲取Cloudwatch Alarm的所有實例的InstanceId,如果磁盤使用率達到90%,我正嘗試創建一個CloudWatch警報以發送電子郵件。Cloudwatch獲取InstanceId

Resources:  
    EC2DiskHealth: 
    Type: AWS::CloudWatch::Alarm 
    Properties: 
    AlarmDescription: { "Fn::Join" : ["", [{ "Ref" : "AWSEBEnvironmentName" }, ": Disk Usage" ]]} 
    Namespace: System/Linux 
    MetricName: DiskSpaceAvailable 
    Dimensions: 
     - Name: InstanceId 
     Value : { "Ref" : "instance-id" } 
     - Name: Filesystem 
     Value: /dev/xvda1 
     - Name: MountPath 
     Value:/
    Statistic: Average 
    Period: 60 
    EvaluationPeriods: 5 
    Threshold: 
     Fn::GetOptionSetting: 
     OptionName: ELBHealth 
     DefaultValue: "90" 
    ComparisonOperator: GreaterThanThreshold 
    AlarmActions: 
     - arn:aws:sns:awsregion:sns 
    InsufficientDataActions: 
     - arn:aws:sns:awsregion:sns 
    OKActions: 
     - arn:aws:sns:awsregion:sns 

輸出: 我應該能夠獲得實例ID,以便報警工作。

Dimensions: 
     - Name: InstanceId 
     Value : { "Ref" : "instance-id" } 

錯誤:

Service:AmazonCloudFormation, Message:Template format error: Unresolved resource dependencies [instance-id] in the Resources block of the template 
沙发
0
2

看來,你的情況是:

  • 你有一些現有的亞馬遜EC2實例
  • 您正在運行的情況下,一些腳本/代碼定期向Amazon CloudWatch發送稱爲DiskSpaceAvailable的指標
  • 你想創建一個CloudFormation模板
  • DiskSpaceAvailable超過一定指標

這是不可能的模板應該爲每一個EC2實例報警。

Amazon CloudWatch模板可以創建資源並可以引用資源,但它不能出去查找資源,也不能在發現的資源上執行循環。

例如,模板可以創建實例,然後專門爲該實例添加警報。但是,它不會自動發現資源。

你可以編寫一個AWS Lambda-backed Custom Resource,它可以做任何你想做的事(你必須編寫代碼),但是你的代碼需要創建警報而不是CloudFormation。

底線:您的用例最好通過您自己的代碼(Lambda或直接代碼)完成,而不是使用CloudFormation。

0
votes
answers
17 views
+10

如何連接到moto獨立服務器?

0

我剛安裝moto,並試圖用下面的node.js代碼連接到獨立服務器:如何連接到moto獨立服務器?

const AWS = require('aws-sdk') 
const ep = new AWS.Endpoint('http://127.0.0.1:5000') 
const route53 = new AWS.Route53({endpoint: ep}) 

const params = {} 
console.log(route53.listHostedZones(params)) 

代碼設置AWS服務的endpoint,它指向的moto的獨立服務器。然後向端點發送listHostedZones請求。這個程序的輸出是

Request { 
domain: null, 
service: 
Service { 
    config: 
    Config { 
     credentials: [Object], 
     credentialProvider: [Object], 
     region: undefined, 
     logger: null, 
     apiVersions: {}, 
     apiVersion: null, 
     endpoint: [Object], 
     httpOptions: [Object], 
     maxRetries: undefined, 
     maxRedirects: 10, 
     paramValidation: true, 
     sslEnabled: true, 
     s3ForcePathStyle: false, 
     s3BucketEndpoint: false, 
     s3DisableBodySigning: true, 
     computeChecksums: true, 
     convertResponseTypes: true, 
     correctClockSkew: false, 
     customUserAgent: null, 
     dynamoDbCrc32: true, 
     systemClockOffset: 0, 
     signatureVersion: null, 
     signatureCache: true, 
     retryDelayOptions: {}, 
     useAccelerateEndpoint: false }, 
    endpoint: 
    Endpoint { 
     protocol: 'http:', 
     host: '127.0.0.1:5000', 
     port: 5000, 
     hostname: '127.0.0.1', 
     pathname: '/', 
     path: '/', 
     href: 'http://127.0.0.1:5000/', 
     constructor: [Object] }, 
    _clientId: 1 }, 
operation: 'listHostedZones', 
params: {}, 
httpRequest: 
HttpRequest { 
    method: 'POST', 
    path: '/', 
    headers: { 'User-Agent': 'aws-sdk-nodejs/2.166.0 darwin/v6.2.2' }, 
    body: '', 
    endpoint: 
    Endpoint { 
     protocol: 'http:', 
     host: '127.0.0.1:5000', 
     port: 5000, 
     hostname: '127.0.0.1', 
     pathname: '/', 
     path: '/', 
     href: 'http://127.0.0.1:5000/', 
     constructor: [Object] }, 
    region: undefined, 
    _userAgent: 'aws-sdk-nodejs/2.166.0 darwin/v6.2.2' }, 
startTime: 2017-12-18T13:27:48.148Z, 
response: 
Response { 
    request: [Circular], 
    data: null, 
    error: null, 
    retryCount: 0, 
    redirectCount: 0, 
    httpResponse: 
    HttpResponse { 
     statusCode: undefined, 
     headers: {}, 
     body: undefined, 
     streaming: false, 
     stream: null }, 
    maxRetries: 3, 
    maxRedirects: 10 }, 
_asm: 
AcceptorStateMachine { 
    currentState: 'validate', 
    states: 
    { validate: [Object], 
     build: [Object], 
     afterBuild: [Object], 
     sign: [Object], 
     retry: [Object], 
     afterRetry: [Object], 
     send: [Object], 
     validateResponse: [Object], 
     extractError: [Object], 
     extractData: [Object], 
     restart: [Object], 
     success: [Object], 
     error: [Object], 
     complete: [Object] } }, 
_haltHandlersOnError: false, 
_events: 
{ validate: 
    [ [Object], 
     [Function: VALIDATE_REGION], 
     [Function: BUILD_IDEMPOTENCY_TOKENS], 
     [Function: VALIDATE_PARAMETERS] ], 
    afterBuild: 
    [ [Object], 
     [Function: SET_CONTENT_LENGTH], 
     [Function: SET_HTTP_HOST] ], 
    restart: [ [Function: RESTART] ], 
    sign: [ [Object] ], 
    validateResponse: [ [Function: VALIDATE_RESPONSE] ], 
    send: [ [Object] ], 
    httpHeaders: [ [Function: HTTP_HEADERS] ], 
    httpData: [ [Function: HTTP_DATA] ], 
    httpDone: [ [Function: HTTP_DONE] ], 
    retry: 
    [ [Function: FINALIZE_ERROR], 
     [Function: INVALIDATE_CREDENTIALS], 
     [Function: EXPIRED_SIGNATURE], 
     [Function: CLOCK_SKEWED], 
     [Function: REDIRECT], 
     [Function: RETRY_CHECK] ], 
    afterRetry: [ [Object] ], 
    build: [ [Function: buildRequest], [Function: sanitizeUrl] ], 
    extractData: [ [Function: extractData], [Function: extractRequestId] ], 
    extractError: [ [Function: extractError], [Function: extractRequestId] ], 
    httpError: [ [Function: ENOTFOUND_ERROR] ] }, 
emit: [Function: emit] } 

正如你可以在上面的輸出中看到,有一個ENOTFOUND_ERROR錯誤的。我無法在moto的控制檯輸出中找到任何新的連接。

我開始摩托車的方式是moto_server route53

> moto_server route53 
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 

這有什麼錯我的配置?我認爲我的node.js代碼有問題。我是否誤解了endpoint的含義?

沙发
0
0
const AWS = require('aws-sdk') 
const ep = new AWS.Endpoint('http://127.0.0.1:5000') 
const initParam = { 
    endpoint: ep, 
    region: 'ap-northeast-1' 
} 
const route53 = new AWS.Route53(initParam) 

let params = { 
    CallerReference: 'unique_string_affh38h98hasd8f76a', 
    Name: 'www.example.com' 
} 
route53.createHostedZone(params, (err, data) => { 
    if (err) { 
    console.error(`createHostedZone err: ${err}`) 
    } else { 
    console.log(`createHostedZone data: ${JSON.stringify(data)}`) 
    } 
}) 

我忘了設置region參數。我查看listHostedZones()的輸出的方式是錯誤的。糾正它們後,代碼正常工作。

0
votes
answers
38 views
+10

如何將本地文件中的值讀入Docker-compose環境變量中?

0

我試圖通過在我的docker-compose.yml文件中設置環境變量將我的AWS憑證從我的本地~/.aws/credentials文件注入到Docker容器中。如何將本地文件中的值讀入Docker-compose環境變量中?

但我不知道如何從本地文件讀取docker-compose文件的憑據。我該怎麼做??

這裏是我的AWS憑據文件看起來像:

$ cat ~/.aws/credentials 
[default] 
aws_access_key_id = AK_FAKE_KEY_88RD3PNY 
aws_secret_access_key = BividQsWW_FAKE_KEY_MuB5VAAsQNJtSxQQyDY2C 

這裏是我的我的碼頭工人組成文件的相關部分的樣子:

my_service: 
    build: . 
    image: my_image 
    environment: 
     - AWS_ACCESS_KEY_ID=<What should I put here?> 
     - AWS_SECRET_ACCESS_KEY=<What should I put here?> 
+0

爲什麼不使用IAM角色? – zacdav

+0

即使我使用IAM角色,我也必須將本地的?/ .aws/cli/cache/*。json文件複製到Dockerfile中的新圖像中,對嗎?這比我想要做的更容易嗎? –

+0

正如我理解它並且已經使用(承認有限的時間),我只是做了一個IAM角色,設置了角色的實例,就是這樣。我想這是假設你在EC2上運行。配置文件採取偏好,所以我甚至沒有任何在我的EC2上,因爲他們正在干涉。 – zacdav

沙发
0
1

是否需要從你憑證文件?

您可以創建~/aws_env_creds

AWS_ACCESS_KEY_ID=AK_FAKE_KEY_88RD3PNY 
AWS_SECRET_ACCESS_KEY=BividQsWW_FAKE_KEY_MuB5VAAsQNJtSxQQyDY2C 

然後

my_service: 
    build: . 
    image: my_image 
    env_file: 
    - ~/aws_env_creds 
0
votes
answers
37 views
+10

爲什麼npm install命令在節點應用程序中一次又一次地重新運行?

0

我正在經歷一個奇怪的情況。我在macOS Sierra 10.12.3中獲得了一個節點應用程序。我也得到了以下信息:爲什麼npm install命令在節點應用程序中一次又一次地重新運行?

節點-v顯示V8.4.0 NPM -v顯示5.3.0

該文件的package.json:

{ 
    "name": "myapp", 
    "version": "1.0.1", 
    "description": "My Node App", 
    "main": "app.js", 
    "scripts": { 
    "install": "npm install", 
    "test": "echo "Error: no test specified" && exit 1", 
    "start": "node app.js" 
    }, 
    "engines": { 
    "node": ">=6" 
    }, 
    "author": "blackjack", 
    "license": "ISC", 
    "dependencies": { 
    "angular": "^1.5.8" 
    } 
} 

當我運行 「故宮安裝」爲了安裝依賴關係,這些依賴關係被安裝,然而,「npm install」重新運行。事實上,它永遠不會停止運行。

看看這個:

pathfinder:myapp blackjack$ npm install --loglevel verbose 
npm info it worked if it ends with ok 
npm verb cli [ '/usr/local/bin/node', 
npm verb cli '/usr/local/bin/npm', 
npm verb cli 'install', 
npm verb cli '--loglevel', 
npm verb cli 'verbose' ] 
npm info using [email protected] 
npm info using [email protected] 
npm verb npm-session 0695436488c367c7 
npm info lifecycle [email protected]~preinstall: [email protected] 
npm verb correctMkdir /Users/blackjack/.npm/_locks correctMkdir not in flight; initializing 
npm verb lock using /Users/blackjack/.npm/_locks/staging-e02d0e92bf103f5a.lock for /Users/blackjack/dev/web/myapp/node_modules/.staging 
npm verb unlock done using /Users/blackjack/.npm/_locks/staging-e02d0e92bf103f5a.lock for /Users/blackjack/dev/web/myapp/node_modules/.staging 
npm info linkStuff [email protected] 
npm verb linkBins [email protected] 
npm verb linkMans [email protected] 
npm info lifecycle [email protected]~install: [email protected] 

> [email protected] install /Users/blackjack/dev/web/myapp 
> npm install 

npm info it worked if it ends with ok 
npm verb cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'install' ] 
npm info using [email protected] 
npm info using [email protected] 
npm verb npm-session aeb46163714f97fa 
npm info lifecycle [email protected]~preinstall: [email protected] 
npm verb correctMkdir /Users/blackjack/.npm/_locks correctMkdir not in flight; initializing 
npm verb lock using /Users/blackjack/.npm/_locks/staging-e02d0e92bf103f5a.lock for /Users/blackjack/dev/web/myapp/node_modules/.staging 
npm verb unlock done using /Users/blackjack/.npm/_locks/staging-e02d0e92bf103f5a.lock for /Users/blackjack/dev/web/myapp/node_modules/.staging 
npm info linkStuff [email protected] 
npm verb linkBins [email protected] 
npm verb linkMans [email protected] 
npm info lifecycle [email protected]~install: [email protected] 

> [email protected] install /Users/blackjack/dev/web/myapp 
> npm install 

^C 

它永遠不會打印 「OK」,告訴它的工作如預期。 應用程序在「node app.js」命令後運行正常。但是,它阻止了AWS Beanstalk中的安裝。我看不到任何打印錯誤。

沙发
0
1

從package.json中刪除"install": "npm install",

正如您在the document中看到的那樣,npm在安裝軟件包後運行一個指定的命令。所以在這裏指定npm install將永遠運行npm install

0
votes
answers
39 views
+10

如何在另一個完成後運行一個lambda函數

0

我有一個aws lambda函數,它每天與cron作業同時運行,並且正在生成cloudwatch日誌。我有另一個lambda函數,它將這些cloudwatch日誌轉移到S3。所以我希望當我的第一個lambda函數完成執行時,日誌lambda函數啓動並將日誌推送到S3存儲桶。請建議我如何實現這一目標。如何在另一個完成後運行一個lambda函數

沙发
0
1

您可以通過AWS SDK從另一個Lambda函數調用Lambda函數。所以你的第一個函數在完成時應該調用第二個函數。確保在調用第二個函數時選擇InvocationType「Event」,並且不要添加任何回調以避免函數並行運行並支付兩次。

0
votes
answers
29 views
+10

DynamoDB在沒有任何節流的情況下讀吞吐量低於容量

1

我遇到Dynamo問題,讀吞吐量遠低於配置的容量,而圖中沒有任何可見的節流。DynamoDB在沒有任何節流的情況下讀吞吐量低於容量

我的表有類似數據的100GB:

| Partition Key | Sort Key | Value | A | A1 | 1 | A | A2 | 21 | A | A3 | 231 ... | A | A200 | 31 | B | B1 | 5

這種結構不能改變太多,因爲我可以查詢(基於關聯到一個給定鍵的所有值和更復雜的查詢是非常重要的與給定分區鍵關聯的排序鍵)。 。 這使我扼殺了寫入,因爲它必須頻繁地擊中相同的分區,但真正奇怪的是讀取吞吐量。該表具有1000個讀取單元,但最大記錄吞吐量爲每秒600個讀取。這與每秒高達10.000個預配置讀取單位一致。

在客戶端,我每秒發送1000個請求(統一使用速率限制器),理論上讀取吞吐量應該是每秒1000個讀取。即使客戶端的請求數量增加,速率仍然保持不變,並且存在零節制讀取。

客戶端在與Dynamo相同的區域中的EC2 m4.2xlarge實例上運行。我排除了客戶端的一個問題,因爲CPU使用率相當低,並且有足夠的內存可用。

有什麼想法可能導致這種情況?

+0

所以你說你的1000次讀取(/秒)都成功了,但是系統卻把它算爲600? –

+0

@ Michael-sqlbot如果我每秒發送1000次讀數,那麼是的,它們都成功了,但是它的計數是每秒600/500,如果我發送2000然後不,它每秒少於2000次,但是比圖表上顯示的要多。 –

沙发
0
0

每個項目的數據量可能會影響RCU。

參見: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ProvisionedThroughput.html

一個讀出容量單元表示一個強一致的讀取每 第二,或兩個最終一致每秒讀取一個項目最多 至4 2KB大小。如果您需要讀取大於4 KB的項目,則 DynamoDB將需要消耗額外的讀取容量單位。 所需的讀取容量單位總數取決於項目大小, 以及是否希望讀取最終一致或強烈一致的 。

您需要檢查您是否使用一致的讀取以及您每次讀取的數據量。

+0

它與一致性有關。當我開始使用一致的讀取時,我可以接近所需的吞吐量,但即使沒有節流,我也無法獲得可擴展的值。 –

板凳
0
0

的一點想法

  1. 在您的測試是你傳播你的查詢過所有的分區鍵的? Dynamo在所有分區上分配吞吐量,因此它會觸及一部分分區,可能無法實現標題吞吐量。
  2. 你知道每個讀取的數據有多少返回? 1個讀取容量可以返回高達4KB的數據。如果您的一些結果大於4KB,那麼1000個RCU的讀取次數不會超過1000次。
  3. 你知道桌子上有多少個分區,以及你的吞吐量是如何分佈在他們身上的?一個分區只能有3,000個RCU Temporarily increasing吞吐量可能導致您的表生成新的分區 - 吞吐量分佈在每個分區上。然後,當您將RCU放回原位時,數據會保留在您的RCU更分散的相同數量的分區中。
+0

1.是的,我們的讀取分佈均勻,我記錄了密鑰,沒有查詢任何密鑰兩次以上。 2.每次讀取返回的數據少於4KB。我不知道多少,但是少了很多。 3.那是我沒有想過的。謝謝 –

0
votes
answers
13 views
+10

Django刪除按鈕上的S3存儲桶點擊

0

我有AWS上的S3存儲桶列表。顯示每個存儲桶的名稱,並試圖使用django實現刪除按鈕。 我遇到的問題是我還不確定如何獲取並傳遞存儲桶名稱變量到我有的刪除函數。這是我到目前爲止已經完成:Django刪除按鈕上的S3存儲桶點擊

DeleteBucketView.py

class deleteBucket(TemplateView): 
template_name = "project/delete_bucket.html" 

def deleteBucket(self, name): 
    s3 = boto3.resource('s3') 
    bucket = s3.Bucket(name) 
    bucket.delete() 

S3.html

<div class="s3Items"> 
    {% for bucket in buckets %} 
    <div class="s3Name"> 
    <div id="left"> 
     <a href="#"><h4 id='s3ItemName'>{{ bucket.bucketName }}</h4></a> 
    </div> 
    <div id="right"> 
     <ul id='s3ItemDesc'> 
     <li>{{ bucket.createdAt }}</li> 
      <li>{{ bucket.totalSize }}/4GB</li> 
     <li> 
      <form method="post" action="{% url 'project:deleteBucket' %}"> 
      {% csrf_token %} 
      <button type="submit" name="button" class='button delete'>Delete</button> 
      </form> 
     </li> 
     </ul> 
    </div> 
</div> 
{% endfor %} 

deletebucket.html是空的,因爲我不知道我是什麼可以進入那裏。 當我點擊刪除按鈕時,我需要調用函數deleteBucket,但是我需要將bucket的名稱傳遞給該函數。我想我也需要在deleteBucket視圖中定義文章,但我不知道如何從那裏去。 如何將存儲桶的名稱傳遞給函數並使其工作?我需要在deleteBucket.html中添加任何內容嗎?

感謝

沙发
0
1

我不知道很多關於你的網址定義,但我認爲這樣的...

url(r'^delete-bucket/(?P<name>w+)$', 'views.deleteBucket.as_view()', name='delete_bucket'), 

和修改您的看法是這樣的...

class deleteBucket(TemplateView): 
    template_name = "project/delete_bucket.html" 

    def delete_operation(self, name): 
     s3 = boto3.resource('s3') 
     bucket = s3.Bucket(name) 
     bucket.delete() 

    def post(self, request, name): 
     self.delete_operation(name) 
     ... 

並在HTML中,你必須告訴名稱

<form method="post" action="{% url 'project.delete_bucket' name=bucket.bucketNmae %}"> 
+0

雖然我如何調用函數? – davidb

+0

你的意思是調用deleteBucket的權利? –

+0

@davidb我已經更新了我的答案... –

0
votes
answers
16 views
+10

AWS s3存儲桶上的「content-MD5」錯誤

0

我正在創建一個應用程序,它將視頻文件發送到Amazon s3存儲桶,但只能在將apk重新上傳到手機之前發送1個視頻。拋出的錯誤與服務上的「BadDigest」錯誤有關:「Amazon S3」。以下是輸出錯誤。AWS s3存儲桶上的「content-MD5」錯誤

11-08 23:56:33.805 26045-26045/org.----------.videorecorder_aws W/System.err: com.amazonaws.services.s3.model.AmazonS3Exception: The Content-MD5 you specified did not match what we received. (Service: Amazon S3; Status Code: 400; Error Code: BadDigest; Request ID: 3345945A95914871), S3 Extended Request ID: pSWjCNJ6sMOiFytjZr0PRn9rns3jFoMkECoI+lfXgF0agfQTY4CdvXlsYJbCBK9qYE/OoAkWTrY= 
11-08 23:56:33.806 26045-26045/org.----------.videorecorder_aws W/System.err:  at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:729) 
11-08 23:56:33.806 26045-26045/org.----------.videorecorder_aws W/System.err:  at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:405) 
11-08 23:56:33.806 26045-26045/org.----------.videorecorder_aws W/System.err:  at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:212) 
11-08 23:56:33.806 26045-26045/org.----------.videorecorder_aws W/System.err:  at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4625) 
11-08 23:56:33.807 26045-26045/org.----------.videorecorder_aws W/System.err:  at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1728) 
11-08 23:56:33.807 26045-26045/org.----------.videorecorder_aws W/System.err:  at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.uploadSinglePartAndWaitForCompletion(UploadTask.java:214) 
11-08 23:56:33.807 26045-26045/org.----------.videorecorder_aws W/System.err:  at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.call(UploadTask.java:88) 
11-08 23:56:33.807 26045-26045/org.----------.videorecorder_aws W/System.err:  at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.call(UploadTask.java:47) 
11-08 23:56:33.807 26045-26045/org.----------.videorecorder_aws W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
11-08 23:56:33.808 26045-26045/org.----------.videorecorder_aws W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
11-08 23:56:33.808 26045-26045/org.----------.videorecorder_aws W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
11-08 23:56:33.808 26045-26045/org.----------.videorecorder_aws W/System.err:  at java.lang.Thread.run(Thread.java:762) 

請讓我知道如果您需要更多信息,這是一個相當時間敏感的問題。

編輯1 針對donkon,這裏要說的是,我使用我的文件發送到服務器的代碼:

public void submitVideoToS3Bucket(){ 
    TransferUtility transferUtility = new TransferUtility(s3, getApplicationContext()); 

    File directory = new File(getFilesDir(), "Reflex"); 
    final File CameraFile = new File(directory, "camera-temp.mp4"); 

    Date now = new Date(); 
    String videoName = now.toString().concat(".mp4").replace(" ", "_").replace(":", ""); 

    TransferObserver observer = transferUtility.upload(Constants.BUCKET_NAME, videoName, CameraFile); 

    observer.setTransferListener(new TransferListener() { 

     @Override 
     public void onStateChanged(int id, TransferState state) { 
      if (TransferState.COMPLETED == state) { 
      } 
      System.out.println("state change"); 
     } 

     @Override 
     public void onProgressChanged(
       int id, long bytesCurrent, long bytesTotal) { 
     } 

     @Override 
     public void onError(int id, Exception ex) { 
      ex.printStackTrace(); 
     } 
    }); 
    if (TransferState.COMPLETED == observer.getState()) { 
     // Handle a completed upload. 
     Intent cameraIntent = new Intent(this, CameraActivity.class); 
     startActivity(cameraIntent); 
    } 
} 
+0

不知道,但是如果您還沒有,也應該在AWS論壇上發帖。如果您能負擔得起,AWS支持也非常好。 – nasch

+0

你能提供代碼和示例文件來重現錯誤嗎?你使用哪個版本的SDK? – donkon

+0

內容是否隨着您的上傳而改變? –

沙发
0
0

的問題是,當你上傳的內容是不斷變化的。嘗試使用您的代碼上傳靜態文件(即,完成錄製的視頻),它應該可以工作。

+0

當我將「public void submitVideoToS3Bucket()」更改爲「public static ...」時,它不再有效。我該如何改變它,以便它上傳一個靜態文件? –

+0

在開始上傳之前,視頻必須完全錄制並保存。 –

0
votes
answers
30 views
+10

正在運行的未知AWS EC2實例即使在終止後也會重新創建

0

我正在運行創建EC2的單個實例的亞馬遜AWS ECS容器。當我創建ECS時,我確信它是1個實例。正在運行的未知AWS EC2實例即使在終止後也會重新創建

我的問題是,我有另一個實例在EC2中運行,亞馬遜給我發了一封電子郵件,我使用了免費配額的兩倍,並將收取費用。

但我不知道爲什麼這第二個EC2實例來自。

我終止了很多次,但它被重新創建。當我終止它,這是我收到的提示,這建議我,這是從EBS創建的,但沒有應用程序在EBS

On an EBS-backed instance, the default action is for the root EBS volume to be deleted when the instance is terminated. 
Storage on any local drives will be lost. 

實例的此名稱。 ECS實例 - amazon-ecs-cli-setup-ecs-cricketscorer

請幫忙。

沙发
0
2

檢查你是否有任何Auto Scaling Groups,你不承認。它最有可能是因爲它而創建的。如果沒有,請更改您的帳戶密碼並停用/刪除您現有的AccessKeys。

+0

非常感謝。這是自動擴展組造成的問題。剛刪除。 – Sallu

0
votes
answers
14 views
+10

收到/讀取SES郵件

2

我正在嘗試設置AWS SES,並且在閱讀/接收電子郵件時遇到問題。最終,我希望能夠使用Outlook或其他移動客戶端應用程序,以便查看使用SES發送/接收到驗證地址的電子郵件。收到/讀取SES郵件

我已經成功驗證了我的網域和電子郵件地址。另外,我已經設置了一個閱讀回執,將收到的來自SES的電子郵件轉發給S3存儲桶,但我不確定如何使用IMAP/POP3下載這些電子郵件。

我是否需要創建自己的電子郵件服務器,並與lambda函數一起將收到的電子郵件轉發到該服務器,以便我可以使用客戶端應用程序下拉這些電子郵件。有沒有辦法使用IMAP/POP3直接連接到SES?最後,我是否需要設置整個電子郵件堆棧,或者是否有一個簡單的(最好是NodeJS)郵件服務器,可以僅將電子郵件推送到客戶端。

謝謝,

沙发
0
3

目前IMAP/POP3不支持SES。我有類似的要求,並在評估了幾種方法後,我使用了Lambda將電子郵件轉發到我的網絡郵件。

您可以使用以下Lambda代碼轉發轉發給SNS主題的電子郵件。

var AWS = require('aws-sdk'); 
var forwardFrom = process.env.from_address; 
var forwardTo = process.env.to_address; 
exports.handler = function(event, context) { 
    var msgInfo = JSON.parse(event.Records[0].Sns.Message); 

    // don't process spam messages 
    if (msgInfo.receipt.spamVerdict.status === 'FAIL' || msgInfo.receipt.virusVerdict.status === 'FAIL') { 
     console.log('Message is spam or contains virus, ignoring.'); 
     context.succeed(); 
    } 

    var email = msgInfo.content, 
     headers = "From: " + forwardFrom + "
"; 
    headers += "Reply-To: " + msgInfo.mail.commonHeaders.from[0] + "
"; 
    headers += "X-Original-To: " + msgInfo.mail.commonHeaders.to[0] + "
"; 
    headers += "To: " + forwardTo + "
"; 
    headers += "Subject: Fwd: " + msgInfo.mail.commonHeaders.subject + "
"; 

    if (email) { 
     var res; 
     res = email.match(/Content-Type:.+s*boundary.*/); 
     if (res) { 
      headers += res[0] + "
"; 
     } else { 
      res = email.match(/^Content-Type:(.*)/m); 
      if (res) { 
       headers += res[0] + "
"; 
      } 
     } 

     res = email.match(/^Content-Transfer-Encoding:(.*)/m); 
     if (res) { 
      headers += res[0] + "
"; 
     } 

     res = email.match(/^MIME-Version:(.*)/m); 
     if (res) { 
      headers += res[0] + "
"; 
     } 

     var splitEmail = email.split("

"); 
     splitEmail.shift(); 

     email = headers + "
" + splitEmail.join("

"); 
    } else { 
     email = headers + "
" + "Empty email"; 
    } 

    new AWS.SES().sendRawEmail({ 
     RawMessage: { Data: email } 
    }, function(err, data) { 
     if (err) context.fail(err); 
     else { 
      console.log('Sent with MessageId: ' + data.MessageId); 
      context.succeed(); 
     } 
    }); 
} 

注:您需要設置FROM_ADDRESS,並to_address與IAM角色一起爲此工作。

有關詳細信息步驟,請參閱以下介質文章,該文章還將鏈接到具有CloudFormation堆棧的Github存儲庫以進行自動配置。

Forwarding Emails to your Inbox Using Amazon SES

另外,您可以使用Amazon Workmail接收電子郵件,但它會增加包月費用。

+0

謝謝你的回答。我是否正確理解這一點......當SES收到一封「admin @ domain.com」的電子郵件時,會調用一個lambda函數以將該電子郵件轉發到另一個電子郵件地址,例如「example @ gmail.com」?如果是這樣,當'example @ gmail.com'回覆轉發的電子郵件時,'From'地址會顯示原始的收件人('admin @ domain.com')或轉發的電子郵件地址('example @ gmail。 com) – SuperVeetz

+0

當前的代碼替換原始發件人的電子郵件地址,因此當您收到電子郵件到Gmail時,它將來自您指定的地址。要保留原始發件人地址,您可能需要稍微修改代碼,以便您可以直接回復原始發件人。 – Ashan